diff --git a/lnt/lnttool/main.py b/lnt/lnttool/main.py --- a/lnt/lnttool/main.py +++ b/lnt/lnttool/main.py @@ -186,7 +186,10 @@ help="show verbose test results") @click.option("--testsuite", "-s", default='nts', show_default=True, help="testsuite to use in case the url is a file path") -def action_submit(url, files, select_machine, merge, verbose, testsuite): +@click.option("--ignore-regressions", is_flag=True, + help="disable regression tracking") +def action_submit(url, files, select_machine, merge, verbose, + ignore_regressions): """submit a test report to the server""" from lnt.util import ServerUtil import lnt.util.ImportData @@ -197,7 +200,8 @@ results = ServerUtil.submitFiles(url, files, verbose, select_machine=select_machine, - merge_run=merge, testsuite=testsuite) + merge_run=merge, testsuite=testsuite, + ignore_regressions=ignore_regressions) for submitted_file in results: if verbose: lnt.util.ImportData.print_report_result( diff --git a/lnt/server/config.py b/lnt/server/config.py --- a/lnt/server/config.py +++ b/lnt/server/config.py @@ -118,6 +118,8 @@ blacklist = None secretKey = data.get('secret_key', None) + ignore_regressions = data.get('ignore_regressions', False) + return Config(data.get('name', 'LNT'), data['zorgURL'], dbDir, os.path.join(baseDir, tempDir), os.path.join(baseDir, profileDir), secretKey, @@ -125,7 +127,7 @@ default_email_config, 0)) for k, v in data['databases'].items()]), - blacklist, schemasDir, api_auth_token) + blacklist, schemasDir, api_auth_token, ignore_regressions) @staticmethod def dummy_instance(): @@ -159,7 +161,8 @@ databases, blacklist, schemasDir, - api_auth_token=None): + api_auth_token=None, + ignore_regressions=False): self.name = name self.zorgURL = zorgURL self.dbDir = dbDir @@ -174,6 +177,7 @@ for db in self.databases.values(): db.config = self self.api_auth_token = api_auth_token + self.ignore_regressions = ignore_regressions def get_database(self, name): """ diff --git a/lnt/server/ui/api.py b/lnt/server/ui/api.py --- a/lnt/server/ui/api.py +++ b/lnt/server/ui/api.py @@ -307,9 +307,12 @@ data = request.get_data(as_text=True) select_machine = request.values.get('select_machine', 'match') merge = request.values.get('merge', None) + ignore_regressions = request.values.get('ignore_regressions', False) \ + or getattr(current_app.old_config, 'ignore_regressions', False) result = lnt.util.ImportData.import_from_string( current_app.old_config, g.db_name, db, session, g.testsuite_name, - data, select_machine=select_machine, merge_run=merge) + data, select_machine=select_machine, merge_run=merge, + ignore_regressions=ignore_regressions) error = result['error'] if error is not None: diff --git a/lnt/server/ui/views.py b/lnt/server/ui/views.py --- a/lnt/server/ui/views.py +++ b/lnt/server/ui/views.py @@ -116,6 +116,8 @@ else: select_machine = request.form.get('select_machine', 'match') merge_run = request.form.get('merge', None) + ignore_regressions = request.form.get('ignore_regressions', False) \ + or getattr(current_app.old_config, 'ignore_regressions', False) if input_file and not input_file.content_length: input_file = None @@ -156,7 +158,8 @@ result = lnt.util.ImportData.import_from_string( current_app.old_config, g.db_name, db, session, g.testsuite_name, - data_value, select_machine=select_machine, merge_run=merge_run) + data_value, select_machine=select_machine, merge_run=merge_run, + ignore_regressions=ignore_regressions) # It is nice to have a full URL to the run, so fixup the request URL # here were we know more about the flask instance. diff --git a/lnt/util/ImportData.py b/lnt/util/ImportData.py --- a/lnt/util/ImportData.py +++ b/lnt/util/ImportData.py @@ -18,7 +18,7 @@ def import_and_report(config, db_name, db, session, file, format, ts_name, show_sample_count=False, disable_email=False, disable_report=False, select_machine=None, - merge_run=None): + merge_run=None, ignore_regressions=False): """ import_and_report(config, db_name, db, session, file, format, ts_name, [show_sample_count], [disable_email], @@ -147,7 +147,10 @@ result['run_id'] = run.id session.commit() - fieldchange.post_submit_tasks(session, ts, run.id) + if ignore_regressions: + logger.info("Regenerating regressions skipped") + else: + fieldchange.post_submit_tasks(session, ts, run.id) # Add a handy relative link to the submitted run. result['result_url'] = "db_{}/v4/{}/{}".format(db_name, ts_name, run.id) @@ -173,7 +176,8 @@ show_sample_count, disable_email, disable_report, select_machine=select_machine, - merge_run=merge_run) + merge_run=merge_run, + ignore_regressions=ignore_regressions) # Append the shadow result to the result. result['shadow_result'] = shadow_result @@ -319,7 +323,8 @@ def import_from_string(config, db_name, db, session, ts_name, data, - select_machine=None, merge_run=None): + select_machine=None, merge_run=None, + ignore_regressions=False): # Stash a copy of the raw submission. # # To keep the temporary directory organized, we keep files in @@ -348,5 +353,6 @@ result = lnt.util.ImportData.import_and_report( config, db_name, db, session, path, '', ts_name, - select_machine=select_machine, merge_run=merge_run) + select_machine=select_machine, merge_run=merge_run, + ignore_regressions=ignore_regressions) return result diff --git a/lnt/util/ServerUtil.py b/lnt/util/ServerUtil.py --- a/lnt/util/ServerUtil.py +++ b/lnt/util/ServerUtil.py @@ -32,7 +32,8 @@ sys.stderr.write(message + '\n') -def submitFileToServer(url, file, select_machine=None, merge_run=None): +def submitFileToServer(url, file, select_machine=None, merge_run=None, + ignore_regressions=False): with open(file, 'rb') as f: values = { 'input_data': f.read(), @@ -42,6 +43,8 @@ values['select_machine'] = select_machine if merge_run is not None: values['merge'] = merge_run + if ignore_regressions: + values['ignore_regressions'] = True headers = {'Accept': 'application/json'} data = urllib.parse.urlencode(values).encode(encoding='ascii') try: @@ -72,7 +75,7 @@ def submitFileToInstance(path, file, select_machine=None, merge_run=None, - testsuite=None): + testsuite=None, ignore_regressions=False): # Otherwise, assume it is a local url and submit to the default database # in the instance. instance = lnt.server.instance.Instance.frompath(path) @@ -85,26 +88,28 @@ return lnt.util.ImportData.import_and_report( config, db_name, db, session, file, format='', ts_name=testsuite or 'nts', select_machine=select_machine, - merge_run=merge_run) + merge_run=merge_run, ignore_regressions=ignore_regressions) def submitFile(url, file, verbose, select_machine=None, merge_run=None, - testsuite=None): + testsuite=None, ignore_regressions=False): # If this is a real url, submit it using urllib. if '://' in url: - result = submitFileToServer(url, file, select_machine, merge_run) + result = submitFileToServer(url, file, select_machine, merge_run, + ignore_regressions) else: result = submitFileToInstance(url, file, select_machine, merge_run, - testsuite) + testsuite, ignore_regressions) return result def submitFiles(url, files, verbose, select_machine=None, merge_run=None, - testsuite=None): + testsuite=None, ignore_regressions=False): results = [] for file in files: result = submitFile(url, file, verbose, select_machine=select_machine, - merge_run=merge_run, testsuite=testsuite) + merge_run=merge_run, testsuite=testsuite, + ignore_regressions=ignore_regressions) if result: results.append(result) return results