private static void _GenerateDeps(VersionControlServer vcs, ItemMap deps, IntList intTreap) { /* walk through the changeset list. */ for (IntList.iterator it = intTreap.begin(); it != intTreap.end(); ++it) { /* grab the changeset. */ Changeset cs = vcs.GetChangeset(it.item()); foreach (Change cng in cs.Changes) { /* now dump each item in the changeset into the dependency list. */ ItemMap.iterator imit = deps.find(cng.Item); if (imit == deps.end()) { /* new one. */ IntList changesetlist = new IntList(); changesetlist.insert(cs.ChangesetId); deps.insert(cng.Item, changesetlist); } else { /* hey, it already exists, so find it and dump the changeset in there. */ IntList.iterator csit = imit.value().find(cs.ChangesetId); if (csit == imit.value().end()) { imit.value().insert(cs.ChangesetId); } } } } }
private static int Main(string[] args) { ArgParser ap = new ArgParser(); ap.add(new Arg('s', "server", "tfs server name", "name of the tfs server.", null)); ap.add(new Arg('c', "candidates", "candidates file name", new string[] { "list of stuff that hasn't moved from one branch to the other.", " filename of '-' means stdin.", " this can be obtained with a command like:", " tf merge /recursive /candidate /noprompt <source> <destination>", }, null)); System.Collections.Generic.List <int> unknownArgs; bool argOK = ap.parse_args(args, out unknownArgs); if (!argOK || unknownArgs.Count < 1) { ap.print_help("", new string[] { "foo!" }); return(1); } IntList mergeCandidates; IntList toMerge = new IntList(); { System.IO.TextReader rdr = null; if (ap.get_arg <Arg>("candidates") != "-") { rdr = new System.IO.StreamReader(new System.IO.FileStream(ap.get_arg <Arg>("candidates"), System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)); } else { rdr = Console.In; } mergeCandidates = _ReadFile(rdr); } /* process the unknown arguments. * these should all be target changesets. */ foreach (int i in unknownArgs) { int csID = Int32.Parse(args[i]); IntList.iterator it = toMerge.find(csID); if (it == toMerge.end()) { toMerge.insert(csID); } } ItemMap deps = new ItemMap(); VersionControlServer vcs = tfsinterface.SCMUtils.GetTFSServer(ap.get_arg <Arg>("server")); _GenerateDeps(vcs, deps, mergeCandidates); /* now pull information on the target changesets. * * note: * we really already have pulled this information, * but it would be a little difficult to dual-purpose the '_GenerateDeps' function. * it would also make it look really confusing. */ CSItemMap targetCSs = new CSItemMap(); foreach (int csID in toMerge) { Changeset cs = vcs.GetChangeset(csID); ItemList il = new ItemList(); foreach (Change cng in cs.Changes) { il.insert(cng.Item); } targetCSs.insert(csID, il); } Console.WriteLine("merge ordering:"); _PrintDeps(Console.Out, deps, targetCSs); return(0); }