def parse_args(): usage = ("\n" " %(prog)s [OPTIONS]" " [[--bad BAD_DATE]|[--bad-release BAD_RELEASE]]" " [[--good GOOD_DATE]|[--good-release GOOD_RELEASE]]" "\n" " %(prog)s [OPTIONS]" " --inbound --bad-rev BAD_REV --good-rev GOOD_REV") parser = ArgumentParser(usage=usage) parser.add_argument("--version", action="version", version=__version__, help="print the mozregression version number and exits") parser.add_argument("-b", "--bad", metavar="YYYY-MM-DD", dest="bad_date", help="first known bad nightly build, default is today") parser.add_argument("-g", "--good", metavar="YYYY-MM-DD", dest="good_date", help="last known good nightly build") parser.add_argument("--bad-release", type=int, help=("first known bad nightly build. This option is" " incompatible with --bad.")) parser.add_argument("--good-release", type=int, help=("last known good nightly build. This option is" " incompatible with --good.")) parser.add_argument("--inbound", action="store_true", help=("use inbound instead of nightlies (use --good-rev" " and --bad-rev options")) parser.add_argument("--bad-rev", dest="first_bad_revision", help="first known bad revision (use with --inbound)") parser.add_argument("--good-rev", dest="last_good_revision", help="last known good revision (use with --inbound)") parser.add_argument("-e", "--addon", dest="addons", action='append', default=[], metavar="PATH1", help="an addon to install; repeat for multiple addons") parser.add_argument("-p", "--profile", metavar="PATH", help="profile to use with nightlies") parser.add_argument("-a", "--arg", dest="cmdargs", action='append', default=[], metavar="ARG1", help=("a command-line argument to pass to the" " application; repeat for multiple arguments")) parser.add_argument("-n", "--app", choices=('firefox', 'fennec', 'thunderbird', 'b2g'), default="firefox", help="application name. Default: %(default)s") parser.add_argument("--repo", metavar="[mozilla-aurora|mozilla-beta|...]", help="repository name used for nightly hunting") parser.add_argument("--inbound-branch", metavar="[b2g-inbound|fx-team|...]", help="inbound branch name on ftp.mozilla.org") parser.add_argument("--bits", choices=("32", "64"), default=mozinfo.bits, help=("force 32 or 64 bit version (only applies to" " x86_64 boxes). Default: %(default)s bits")) parser.add_argument("--persist", help="the directory in which files are to persist") commandline.add_logging_group(parser) options = parser.parse_args() options.bits = parse_bits(options.bits) return options
def test_parse_32(self, mozinfo): mozinfo.bits = 32 self.assertEqual(utils.parse_bits('32'), 32) self.assertEqual(utils.parse_bits('64'), 32)
def test_parse_64(self, mozinfo): mozinfo.bits = 64 self.assertEqual(utils.parse_bits('32'), 32) self.assertEqual(utils.parse_bits('64'), 64)
def parse_args(argv=None): """ Parse command line options. """ usage = ("\n" " %(prog)s [OPTIONS]" " [[--bad BAD_DATE]|[--bad-release BAD_RELEASE]]" " [[--good GOOD_DATE]|[--good-release GOOD_RELEASE]]" "\n" " %(prog)s [OPTIONS]" " --inbound --bad-rev BAD_REV --good-rev GOOD_REV") parser = ArgumentParser(usage=usage) parser.add_argument("--version", action="version", version=__version__, help=("print the mozregression version number and" " exits.")) parser.add_argument("-b", "--bad", metavar="YYYY-MM-DD", dest="bad_date", help=("first known bad nightly build, default is" " today.")) parser.add_argument("-g", "--good", metavar="YYYY-MM-DD", dest="good_date", help="last known good nightly build.") parser.add_argument("--list-releases", action="store_true", help="list all known releases and exit") parser.add_argument("--bad-release", type=int, help=("first known bad nightly build. This option" " is incompatible with --bad.")) parser.add_argument("--good-release", type=int, help=("last known good nightly build. This option is" " incompatible with --good.")) parser.add_argument("--inbound", action="store_true", help=("use inbound instead of nightlies (use" " --good-rev and --bad-rev options.")) parser.add_argument("--bad-rev", dest="first_bad_revision", help=("first known bad revision (use with" " --inbound).")) parser.add_argument("--good-rev", dest="last_good_revision", help=("last known good revision (use with" " --inbound).")) parser.add_argument("--find-fix", action="store_true", help="Search for a bug fix instead of a regression.") parser.add_argument("-e", "--addon", dest="addons", action='append', default=[], metavar="PATH1", help="addon to install; repeat for multiple addons.") parser.add_argument("-p", "--profile", metavar="PATH", help="profile to use with nightlies.") parser.add_argument("-a", "--arg", dest="cmdargs", action='append', default=[], metavar="ARG1", help=("a command-line argument to pass to the" " application; repeat for multiple arguments.")) parser.add_argument("-n", "--app", choices=FC_REGISTRY.names(), default="firefox", help="application name. Default: %(default)s.") parser.add_argument("--repo", metavar="[mozilla-aurora|mozilla-beta|...]", help="repository name used for nightly hunting.") parser.add_argument("--inbound-branch", metavar="[b2g-inbound|fx-team|...]", help="inbound branch name on ftp.mozilla.org.") parser.add_argument("--bits", choices=("32", "64"), default=mozinfo.bits, help=("force 32 or 64 bit version (only applies to" " x86_64 boxes). Default: %(default)s bits.")) parser.add_argument("-c", "--command", help=("Test command to evaluate builds automatically." " A return code of 0 will evaluate build as" " good, any other value will evaluate the build" " as bad.")) parser.add_argument("--persist", help=("the directory in which downloaded files are" " to persist.")) parser.add_argument("--http-cache-dir", help=("the directory for caching http requests." " If not set there will be an in-memory cache" " used.")) parser.add_argument('--http-timeout', type=float, default=10.0, help=("Timeout in seconds to abort requests when there" " is no activity from the server. Default to" " %(default)s seconds - increase this if you" " are under a really slow network.")) commandline.add_logging_group(parser) options = parser.parse_args(argv) options.bits = parse_bits(options.bits) return options
def parse_args(argv=None): """ Parse command line options. """ usage = ("\n" " %(prog)s [OPTIONS]" " [[--bad BAD_DATE]|[--bad-release BAD_RELEASE]]" " [[--good GOOD_DATE]|[--good-release GOOD_RELEASE]]" "\n" " %(prog)s [OPTIONS]" " --bad-rev BAD_REV --good-rev GOOD_REV") defaults = get_defaults(DEFAULT_CONF_FNAME) parser = ArgumentParser(usage=usage) parser.add_argument("--version", action="version", version=__version__, help=("print the mozregression version number and" " exits.")) parser.add_argument("-b", "--bad", metavar="YYYY-MM-DD", dest="bad_date", help=("first known bad nightly build, default is" " today.")) parser.add_argument("-g", "--good", metavar="YYYY-MM-DD", dest="good_date", help="last known good nightly build.") parser.add_argument("--list-releases", action="store_true", help="list all known releases and exit") parser.add_argument("--bad-release", type=int, help=("first known bad nightly build. This option" " is incompatible with --bad.")) parser.add_argument("--good-release", type=int, help=("last known good nightly build. This option is" " incompatible with --good.")) parser.add_argument("--bad-rev", dest="first_bad_revision", help=("first known bad revision (for inbound" " bisection).")) parser.add_argument("--good-rev", dest="last_good_revision", help=("last known good revision (for inbound" " bisection).")) parser.add_argument("--find-fix", action="store_true", help="Search for a bug fix instead of a regression.") parser.add_argument("-e", "--addon", dest="addons", action='append', default=[], metavar="PATH1", help="addon to install; repeat for multiple addons.") parser.add_argument("-p", "--profile", default=defaults.get("profile"), metavar="PATH", help="profile to use with nightlies.") parser.add_argument("-a", "--arg", dest="cmdargs", action='append', default=[], metavar="ARG1", help=("a command-line argument to pass to the" " application; repeat for multiple arguments.")) parser.add_argument('--pref', nargs='*', dest='prefs', help=(" A preference to set. Must be a key-value pair" " separated by a ':'")) parser.add_argument('--preferences', nargs="*", dest='prefs_files', help=("read preferences from a JSON or INI file. For" " INI, use 'file.ini:section' to specify a" " particular section.")) parser.add_argument("-n", "--app", choices=FC_REGISTRY.names(), default=defaults.get("app", "firefox"), help="application name. Default: %(default)s.") parser.add_argument("--repo", metavar="[mozilla-aurora|mozilla-beta|...]", default=defaults.get("repo"), help="repository name used for nightly hunting.") parser.add_argument("--inbound-branch", metavar="[b2g-inbound|fx-team|...]", default=defaults.get("inbound-branch"), help="inbound branch name on ftp.mozilla.org.") parser.add_argument("--bits", choices=("32", "64"), default=defaults.get("bits", mozinfo.bits), help=("force 32 or 64 bit version (only applies to" " x86_64 boxes). Default: %(default)s bits.")) parser.add_argument("-c", "--command", help=("Test command to evaluate builds automatically." " A return code of 0 will evaluate build as" " good, any other value will evaluate the build" " as bad.")) parser.add_argument("--persist", default=defaults.get("persist"), help=("the directory in which downloaded files are" " to persist.")) parser.add_argument("--http-cache-dir", default=defaults.get("http-cache-dir"), help=("the directory for caching http requests." " If not set there will be an in-memory cache" " used.")) parser.add_argument('--http-timeout', type=float, default=float(defaults.get("http-timeout", 30.0)), help=("Timeout in seconds to abort requests when there" " is no activity from the server. Default to" " %(default)s seconds - increase this if you" " are under a really slow network.")) parser.add_argument('--no-background-dl', action='store_false', dest="background_dl", default=(defaults.get('no-background-dl', '').lower() not in ('1', 'yes', 'true')), help=("Do not download next builds in the background" " while evaluating the current build.")) commandline.add_logging_group( parser, include_formatters=commandline.TEXT_FORMATTERS) options = parser.parse_args(argv) options.bits = parse_bits(options.bits) return options
def parse_args(argv=None): """ Parse command line options. """ usage = ("\n" " %(prog)s [OPTIONS]" " [[--bad BAD_DATE]|[--bad-release BAD_RELEASE]]" " [[--good GOOD_DATE]|[--good-release GOOD_RELEASE]]" "\n" " %(prog)s [OPTIONS]" " --bad-rev BAD_REV --good-rev GOOD_REV") defaults = get_defaults(DEFAULT_CONF_FNAME) parser = ArgumentParser(usage=usage) parser.add_argument("--version", action="version", version=__version__, help=("print the mozregression version number and" " exits.")) parser.add_argument("-b", "--bad", metavar="YYYY-MM-DD", dest="bad_date", help=("first known bad nightly build, default is" " today.")) parser.add_argument("-g", "--good", metavar="YYYY-MM-DD", dest="good_date", help="last known good nightly build.") parser.add_argument("--list-releases", action="store_true", help="list all known releases and exit") parser.add_argument("--bad-release", type=int, help=("first known bad nightly build. This option" " is incompatible with --bad.")) parser.add_argument("--good-release", type=int, help=("last known good nightly build. This option is" " incompatible with --good.")) parser.add_argument("--bad-rev", dest="first_bad_revision", help=("first known bad revision (for inbound" " bisection).")) parser.add_argument("--good-rev", dest="last_good_revision", help=("last known good revision (for inbound" " bisection).")) parser.add_argument("--find-fix", action="store_true", help="Search for a bug fix instead of a regression.") parser.add_argument("-e", "--addon", dest="addons", action='append', default=[], metavar="PATH1", help="addon to install; repeat for multiple addons.") parser.add_argument("-p", "--profile", default=defaults.get("profile"), metavar="PATH", help="profile to use with nightlies.") parser.add_argument("-a", "--arg", dest="cmdargs", action='append', default=[], metavar="ARG1", help=("a command-line argument to pass to the" " application; repeat for multiple arguments.")) parser.add_argument('--pref', nargs='*', dest='prefs', help=(" A preference to set. Must be a key-value pair" " separated by a ':'")) parser.add_argument('--preferences', nargs="*", dest='prefs_files', help=("read preferences from a JSON or INI file. For" " INI, use 'file.ini:section' to specify a" " particular section.")) parser.add_argument("-n", "--app", choices=FC_REGISTRY.names(), default=defaults.get("app", "firefox"), help="application name. Default: %(default)s.") parser.add_argument("--repo", metavar="[mozilla-aurora|mozilla-beta|...]", default=defaults.get("repo"), help="repository name used for nightly hunting.") parser.add_argument("--inbound-branch", metavar="[b2g-inbound|fx-team|...]", default=defaults.get("inbound-branch"), help="inbound branch name on ftp.mozilla.org.") parser.add_argument("--bits", choices=("32", "64"), default=defaults.get("bits", mozinfo.bits), help=("force 32 or 64 bit version (only applies to" " x86_64 boxes). Default: %(default)s bits.")) parser.add_argument("-c", "--command", help=("Test command to evaluate builds automatically." " A return code of 0 will evaluate build as" " good, any other value will evaluate the build" " as bad.")) parser.add_argument("--persist", default=defaults.get("persist"), help=("the directory in which downloaded files are" " to persist.")) parser.add_argument("--http-cache-dir", default=defaults.get("http-cache-dir"), help=("the directory for caching http requests." " If not set there will be an in-memory cache" " used.")) parser.add_argument('--http-timeout', type=float, default=float(defaults.get("http-timeout", 30.0)), help=("Timeout in seconds to abort requests when there" " is no activity from the server. Default to" " %(default)s seconds - increase this if you" " are under a really slow network.")) parser.add_argument('--no-background-dl', action='store_false', dest="background_dl", default=(defaults.get('no-background-dl', '').lower() not in ('1', 'yes', 'true')), help=("Do not download next builds in the background" " while evaluating the current build.")) commandline.add_logging_group( parser, include_formatters=commandline.TEXT_FORMATTERS ) options = parser.parse_args(argv) options.bits = parse_bits(options.bits) return options
def parse_args(): usage = ("\n" " %(prog)s [OPTIONS]" " [[--bad BAD_DATE]|[--bad-release BAD_RELEASE]]" " [[--good GOOD_DATE]|[--good-release GOOD_RELEASE]]" "\n" " %(prog)s [OPTIONS]" " --inbound --bad-rev BAD_REV --good-rev GOOD_REV") parser = ArgumentParser(usage=usage) parser.add_argument( "--version", action="version", version=__version__, help="print the mozregression version number and exits") parser.add_argument("-b", "--bad", metavar="YYYY-MM-DD", dest="bad_date", help="first known bad nightly build, default is today") parser.add_argument("-g", "--good", metavar="YYYY-MM-DD", dest="good_date", help="last known good nightly build") parser.add_argument("--bad-release", type=int, help=("first known bad nightly build. This option is" " incompatible with --bad.")) parser.add_argument("--good-release", type=int, help=("last known good nightly build. This option is" " incompatible with --good.")) parser.add_argument( "--inbound", action="store_true", help=("use inbound instead of nightlies (use --good-rev" " and --bad-rev options")) parser.add_argument("--bad-rev", dest="first_bad_revision", help="first known bad revision (use with --inbound)") parser.add_argument("--good-rev", dest="last_good_revision", help="last known good revision (use with --inbound)") parser.add_argument("-e", "--addon", dest="addons", action='append', default=[], metavar="PATH1", help="an addon to install; repeat for multiple addons") parser.add_argument("-p", "--profile", metavar="PATH", help="profile to use with nightlies") parser.add_argument("-a", "--arg", dest="cmdargs", action='append', default=[], metavar="ARG1", help=("a command-line argument to pass to the" " application; repeat for multiple arguments")) parser.add_argument("-n", "--app", choices=('firefox', 'fennec', 'thunderbird', 'b2g'), default="firefox", help="application name. Default: %(default)s") parser.add_argument("--repo", metavar="[mozilla-aurora|mozilla-beta|...]", help="repository name used for nightly hunting") parser.add_argument("--inbound-branch", metavar="[b2g-inbound|fx-team|...]", help="inbound branch name on ftp.mozilla.org") parser.add_argument("--bits", choices=("32", "64"), default=mozinfo.bits, help=("force 32 or 64 bit version (only applies to" " x86_64 boxes). Default: %(default)s bits")) parser.add_argument("--persist", help="the directory in which files are to persist") commandline.add_logging_group(parser) options = parser.parse_args() options.bits = parse_bits(options.bits) return options
def cli(argv=None): """ main entry point of mozregression command line. """ options = parse_args(argv) logger = commandline.setup_logging("mozregression", options, {"mach": sys.stdout}) check_mozregression_version(logger) if options.list_releases: print(formatted_valid_release_dates()) sys.exit() cache_session = limitedfilecache.get_cache( options.http_cache_dir, limitedfilecache.ONE_GIGABYTE, logger=get_default_logger('Limited File Cache')) set_http_cache_session(cache_session, get_defaults={"timeout": options.http_timeout}) user_defined_bits = options.bits is not None options.bits = parse_bits(options.bits or mozinfo.bits) fetch_config = create_config(options.app, mozinfo.os, options.bits) if not user_defined_bits and \ options.bits == 64 and \ mozinfo.os == 'win' and \ 32 in fetch_config.available_bits(): # inform users on windows that we are using 64 bit builds. logger.info("bits option not specified, using 64-bit builds.") if options.command is None: launcher_kwargs = dict( addons=options.addons, profile=options.profile, cmdargs=options.cmdargs, preferences=preference(options.prefs_files, options.prefs), ) test_runner = ManualTestRunner(launcher_kwargs=launcher_kwargs) else: test_runner = CommandTestRunner(options.command) runner = ResumeInfoBisectRunner(fetch_config, test_runner, options) if fetch_config.is_inbound(): # this can be useful for both inbound and nightly, because we # can go to inbound from nightly. fetch_config.set_inbound_branch(options.inbound_branch) # bisect inbound if last good revision or first bad revision are set if options.first_bad_revision or options.last_good_revision: bisect = bisect_inbound else: bisect = bisect_nightlies try: launcher_class = APP_REGISTRY.get(fetch_config.app_name) launcher_class.check_is_runnable() sys.exit(bisect(runner, logger)) except KeyboardInterrupt: sys.exit("\nInterrupted.") except UnavailableRelease as exc: sys.exit("%s\n%s" % (exc, formatted_valid_release_dates())) except (MozRegressionError, RequestException) as exc: sys.exit(str(exc))