示例#1
0
        public static void Main(string [] args)
        {
            if (args.Length < 2) {
                Console.Error.WriteLine ("factory-status: [https://API_URL/]DEVEL_PROJECTS [https://API_URL/]FACTORY_PROJECT");
                return;
            }

            accounts = new OscRcAccountCollection ();

            Console.Error.Write ("\r");
            Console.Write ("Loading revision data... ");

            var devel_packages = new Dictionary<string, Package> ();
            var factory_packages = new Dictionary<string, Package> ();

            for (int i = 0; i < args.Length - 1; i++) {
                LoadPackages (devel_packages, args[i]);
            }

            LoadPackages (factory_packages, args[args.Length - 1]);

            int total_count = devel_packages.Count + factory_packages.Count;
            int completed_count = 0;
            var start_time = DateTime.Now;

            foreach (var package_set in new Dictionary<string, Package> [] { devel_packages, factory_packages }) {
                foreach (var entry in package_set) {
                    var package = package_set[entry.Key];
                    package.SrcMd5 = GetPackageCurrentRevision (package);
                    UpdateStatus (start_time, total_count, ++completed_count);
                }
            }

            var to_update = new List<Package> ();
            var to_remove = new List<Package> ();

            // Find packages that are not up-to-date
            foreach (var package in devel_packages.Values) {
                if (!factory_packages.ContainsKey (package.Name) ||
                    factory_packages[package.Name].SrcMd5 != package.SrcMd5) {
                    to_update.Add (package);
                }
            }

            to_update.Sort ((a, b) =>
                a.Project == b.Project
                    ? a.Name.CompareTo (b.Name)
                    : a.Project.CompareTo (b.Project));

            // Find packages that are obsolete
            foreach (var package in factory_packages.Values) {
                if (!devel_packages.ContainsKey (package.Name)) {
                    to_remove.Add (package);
                }
            }

            Console.WriteLine ();
            Console.WriteLine ("Loaded revision data.");
            Console.WriteLine ();

            if (to_update.Count == 0 && to_remove.Count == 0) {
                Console.WriteLine ("The Factory project is up-to-date. Congratulations!");
                return;
            }

            if (to_update.Count > 0) {
                Console.WriteLine ("Packages that need updating in Factory ({0}):", to_update.Count);
                foreach (var package in to_update) {
                    Console.WriteLine ("  - {0} ({1}, {2})", package.Name, package.Project, package.SrcMd5);
                }
            }

            if (to_remove.Count > 0) {
                Console.WriteLine ("Packages not in a devel project ({0}):", to_remove.Count);
                foreach (var package in to_remove) {
                    Console.WriteLine ("  - {0}", package.Name);
                }
            }
        }
示例#2
0
        private void LoadSubmitRequests()
        {
            var accounts = new OscRcAccountCollection ();
            var account = accounts.DefaultAccount;
            using (var reader = new StreamReader (BuildPath (BasePath, ".osc", "_apiurl"))) {
                account = accounts[reader.ReadToEnd ().Trim ()];
            }

            Console.WriteLine ("Checking for submit requests...");

            var doc = new XPathDocument (XmlReader.Create (account.ApiRequest.Get (
                @"/search/request?match=" +
                @"state/@name=""new"" and " +
                @"action/target/@project=""" + Name + @""""
            )));

            var nav = doc.CreateNavigator ();
            var iter = nav.Select ("/collection/request");
            while (iter.MoveNext ()) {
                Requests.Add (new ObsRequestNode (iter.Current));
            }
        }