Skip to content
Permalink
3df977cf7b
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
176 lines (145 sloc) 5.09 KB
"""
Reading and writing of the configuration file.
"""
from __future__ import absolute_import, print_function
import os
from datetime import datetime
import mozinfo
from configobj import ConfigObj, ParseError
from mozregression.errors import MozRegressionError
from mozregression.log import colorize
CONFIG_FILE_HELP_URL = "http://mozilla.github.io/mozregression/documentation/configuration.html"
DEFAULT_CONF_FNAME = os.path.expanduser(
os.path.join("~", ".mozilla", "mozregression", "mozregression.cfg")
)
TC_CREDENTIALS_FNAME = os.path.expanduser(
os.path.join("~", ".mozilla", "mozregression", "taskcluster-credentials.json")
)
OLD_TC_ROOT_URL = "https://taskcluster.net"
TC_ROOT_URL = "https://firefox-ci-tc.services.mozilla.com"
TC_ROOT_URL_MIGRATION_FLAG_DATE = datetime.strptime("2019-11-09", "%Y-%M-%d")
ARCHIVE_BASE_URL = "https://archive.mozilla.org/pub"
# when a bisection range needs to be expanded, the following value is used to
# specify how many builds we try (if 20, we will try 20 before the lower limit,
# and another 20 after the higher limit)
DEFAULT_EXPAND = 20
# default values when not defined in config file.
# Note that this is also the list of options that can be used in config file
DEFAULTS = {
"adb-profile-dir": None,
"app": "firefox",
"approx-policy": "auto",
"archive-base-url": ARCHIVE_BASE_URL,
"background-dl-policy": "cancel",
"bits": None,
"build-type": "",
"cmdargs": [],
"http-timeout": 30.0,
"mode": "classic",
"no-background-dl": "",
"persist": None,
"persist-size-limit": 0,
"process-output": None,
"profile": None,
"profile-persistence": "clone",
"repo": None,
"taskcluster-accesstoken": None,
"taskcluster-clientid": None,
"enable-telemetry": True,
}
def get_config(conf_path):
"""
Get custom defaults from configuration file in argument.
"""
config = dict(DEFAULTS)
try:
config_obj = ConfigObj(conf_path)
except ParseError as exc:
raise MozRegressionError("Error while reading the config file %s:\n %s" % (conf_path, exc))
config.update(config_obj)
return config
def _get_persist_dir(default):
print(
"You should configure a persist directory, where to put downloaded"
" build files to reuse them in future bisections."
)
print(
"I recommend using %s. Leave blank to use that default. If you"
" really don't want a persist dir type NONE, else you can"
" just define a path that you would like to use." % default
)
value = input("persist: ")
if value == "NONE":
return ""
elif value:
persist_dir = os.path.realpath(value)
else:
persist_dir = default
if persist_dir:
if not os.path.isdir(persist_dir):
os.makedirs(persist_dir)
return persist_dir
def _get_persist_size_limit(default):
print(
"You should choose a size limit for the persist dir. I recommend you"
" to use %s GiB, so leave it blank to use that default. Else you"
" can type NONE to not limit the persist dir, or any number you like"
" (a GiB value, so type 0.5 to allow ~500 MiB)." % default
)
value = input("persist-size-limit: ")
if value == "NONE":
return 0.0
elif value:
return float(value)
return default
def _get_bits(default):
print(
"You are using a 64-bit system, so mozregression will by default"
" use the 64-bit build files. If you want to change that to"
" 32-bit by default, type 32 here."
)
while 1:
value = input("bits: ")
if value in ("", "32", "64"):
break
if not value:
return default
return value
CONF_HELP = """\
# ------ mozregression configuration file ------
# Most of the command line options can be used in here.
# Just remove the -- from the long option names, e.g.
# bits = 32
# persist-size-limit = 15.0
"""
def write_config(conf_path):
conf_dir = os.path.dirname(conf_path)
if not os.path.isdir(conf_dir):
os.makedirs(conf_dir)
config = ConfigObj(conf_path)
if not config.initial_comment:
config.initial_comment = CONF_HELP.splitlines()
def _set_option(optname, getfunc, default):
print()
if optname not in config:
value = getfunc(default)
if value is not None:
config[optname] = value
else:
value = default
else:
print("%s already defined." % optname)
value = config[optname]
name = colorize("{fGREEN}%s{sRESET_ALL}" % optname)
print("%s: %s" % (name, value))
_set_option("persist", _get_persist_dir, os.path.join(conf_dir, "persist"))
_set_option("persist-size-limit", _get_persist_size_limit, 20.0)
if mozinfo.os != "mac" and mozinfo.bits == 64:
_set_option("bits", _get_bits, 64)
config.write()
print()
print(colorize("Config file {sBRIGHT}%s{sRESET_ALL} written." % conf_path))
print(
"Note you can edit it manually, and there are other options you can"
" configure. See %s." % CONFIG_FILE_HELP_URL
)