MergeResult ThreeWayMerge::mergeKeySet (const KeySet & base, const KeySet & ours, const KeySet & theirs, const Key & mergeRoot) { Key ourkey = ours.head ().dup (); Key theirkey = theirs.head ().dup (); Key basekey = base.head ().dup (); MergeResult merged = mergeKeySet ( MergeTask (BaseMergeKeys (base, basekey), OurMergeKeys (ours, ourkey), TheirMergeKeys (theirs, theirkey), mergeRoot)); return merged; }
SpecBackendBuilder SpecMountpointReader::readMountpointSpecification (KeySet const & cks) { ks = cks; mp = ks.head ().dup (); Key rmp (mp.dup ()); helper::removeNamespace (rmp); bb.setMountpoint (rmp, mountConf); processKey (mp); bb.nodes++; // count mp ks.lookup (mp, KDB_O_POP); ks.rewind (); // we need old fashioned loop, because it can handle ks.cut during iteration for (Key k = ks.next (); k; k = ks.next ()) { // search for mountpoint Key m = k.getMeta<const Key> ("mountpoint"); if (m) { SpecMountpointReader smr (backends, bbi); backends[k] = smr.readMountpointSpecification (ks.cut (k)); continue; } processKey (k); bb.nodes++; } bb.setBackendConfig (backendConfig); bb.useConfigFile (mp.getMeta<std::string> ("mountpoint")); return bb; }