]> scripts.mit.edu Git - wizard.git/blobdiff - wizard/command/mass_upgrade.py
Implement MediaWiki scaffolding for auto conflict resolution; untested.
[wizard.git] / wizard / command / mass_upgrade.py
index 4254729af9235bb4bb0da314c1124b8159d63d74..a2ccd367976fee0d31b645aa1c5a88aa4c7ccb1c 100644 (file)
@@ -9,7 +9,7 @@ import time
 import itertools
 
 import wizard
-from wizard import deploy, util, shell, sset, command
+from wizard import deploy, util, scripts, shell, sset, command
 
 def main(argv, baton):
     options, args = parse_args(argv, baton)
@@ -23,7 +23,7 @@ def main(argv, baton):
     errors = {}
     i = 0
     merge_fails = [0] # otherwise I get a UnboundLocalError later on when I increment
-    deploys = deploy.parse_install_lines(app, options.versions_path)
+    deploys = deploy.parse_install_lines(app, options.versions_path, user=options.user)
     requested_deploys = itertools.islice(deploys, options.limit)
     for i, d in enumerate(requested_deploys, 1):
         # check if we want to punt due to --limit
@@ -60,7 +60,17 @@ def main(argv, baton):
                     name = e.name
                     if name not in errors: errors[name] = []
                     errors[name].append(d)
-                    logging.error("%s in [%04d] %s" % (name, i, d.location))
+                    if name == "WebVerificationError":
+                        try:
+                            host, path = scripts.get_web_host_and_path(d.location)
+                            url = "http://%s%s" % (host, path)
+                        except ValueError:
+                            url = d.location
+                        # This should actually be a warning, but
+                        # it's a really common error
+                        logging.info("Could not verify application at %s" % url)
+                    else:
+                        logging.error("%s in [%04d] %s" % (name, i, d.location))
                     errors_log.write("%s\n" % d.location)
             return (on_success, on_error)
         on_success, on_error = make_on_pair(d, i)
@@ -69,7 +79,7 @@ def main(argv, baton):
     sh.join()
     for name, deploys in errors.items():
         logging.warning("%s from %d installs" % (name, len(deploys)))
-    if merge_fails:
+    if merge_fails[0]:
         logging.warning("%d out of %d installs (%.1f%%) had merge failure" % (merge_fails[0], i, float(merge_fails[0])/i*100))
 
 def parse_args(argv, baton):
@@ -91,6 +101,9 @@ the scripts AFS patch."""
     baton.push(parser ,"limit")
     baton.push(parser, "versions_path")
     baton.push(parser, "srv_path")
+    baton.push(parser, "user")
+    parser.add_option("--force", dest="force", action="store_true",
+            default=False, help="Force running upgrade even if it's already at latest version.")
     options, args, = parser.parse_all(argv)
     if len(args) > 1:
         parser.error("too many arguments")
@@ -99,5 +112,5 @@ the scripts AFS patch."""
     return options, args
 
 def calculate_base_args(options):
-    return command.makeBaseArgs(options, dry_run="--dry-run", srv_path="--srv-path")
+    return command.makeBaseArgs(options, dry_run="--dry-run", srv_path="--srv-path", force="--force")