Пример #1
0
        /// <summary>
        /// print dependencies.
        /// </summary>
        /// <param name="wr">place to pretty-print them to</param>
        /// <param name="deps">the map of item->changeset list</param>
        /// <param name="keyChangesets">the changeset->item map for the changesets we are interested in</param>
        private static void _PrintDeps(System.IO.TextWriter wr, ItemMap deps, CSItemMap keyChangesets)
        {
            /* print out only our changesets,
             * details:
             *  the dependices they have on other changesets,
             *  what file is the dependency.
             */

            for (CSItemMap.iterator it = keyChangesets.begin();
                 it != keyChangesets.end();
                 ++it)
            {
                wr.WriteLine("changeset {0}", it.item());

                foreach (Item item in it.value())
                {
                    ItemMap.iterator imit = deps.find(item);
                    if (imit != deps.end())
                    {
                        if (imit.value().size() > 1)
                        {
                            wr.WriteLine(imit.item().ServerItem);
                            foreach (int csID in imit.value())
                            {
                                wr.WriteLine(csID);
                            }
                            wr.WriteLine();
                        }
                    }
                }

                wr.WriteLine();
            }
        }
Пример #2
0
        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);
        }