From 2ce14b10dd4781499f7e88b62e535af098899626 Mon Sep 17 00:00:00 2001 From: firewave Date: Fri, 30 Dec 2022 17:01:42 +0100 Subject: [PATCH 1/3] triage_version.py: bail out when no versions were found in the given folder --- tools/triage_py/triage_version.py | 41 +++++++++++++++++-------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/tools/triage_py/triage_version.py b/tools/triage_py/triage_version.py index 0b442860460..58529d1aa71 100644 --- a/tools/triage_py/triage_version.py +++ b/tools/triage_py/triage_version.py @@ -45,27 +45,32 @@ def sort_commit_hashes(commits): continue versions.append(filename) -if len(versions): - try: - Version(versions[0]) - use_hashes = False - versions.sort(key=Version) - except: - if verbose: - print("'{}' not a version - assuming commit hashes".format(versions[0])) - if not git_repo: - print('error: git repository argument required for commit hash sorting') - sys.exit(1) - if verbose: - print("using git repository '{}' to sort commit hashes".format(git_repo)) - use_hashes = True - # if you use the folder from the bisect script that contains the repo as a folder - so remove it from the list - if versions.count('cppcheck'): - versions.remove('cppcheck') - versions = sort_commit_hashes(versions) +if not len(versions): + print("error: no versions found in '{}'".format(directory)) + sys.exit(1) if verbose: print("found {} versions in '{}'".format(len(versions), directory)) + +try: + Version(versions[0]) + use_hashes = False + versions.sort(key=Version) +except: + if verbose: + print("'{}' not a version - assuming commit hashes".format(versions[0])) + if not git_repo: + print('error: git repository argument required for commit hash sorting') + sys.exit(1) + if verbose: + print("using git repository '{}' to sort commit hashes".format(git_repo)) + use_hashes = True + # if you use the folder from the bisect script that contains the repo as a folder - so remove it from the list + if versions.count('cppcheck'): + versions.remove('cppcheck') + versions = sort_commit_hashes(versions) + +if verbose: print("analyzing '{}'".format(input_file)) last_ec = None From 59a7c825ab0a299446688e4d1e53702a2edf0cc1 Mon Sep 17 00:00:00 2001 From: firewave Date: Fri, 30 Dec 2022 17:02:36 +0100 Subject: [PATCH 2/3] triage_version.py: bail out when commit hash sorting returned less entries than provided --- tools/triage_py/triage_version.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/triage_py/triage_version.py b/tools/triage_py/triage_version.py index 58529d1aa71..088c2afe66f 100644 --- a/tools/triage_py/triage_version.py +++ b/tools/triage_py/triage_version.py @@ -68,7 +68,11 @@ def sort_commit_hashes(commits): # if you use the folder from the bisect script that contains the repo as a folder - so remove it from the list if versions.count('cppcheck'): versions.remove('cppcheck') + len_in = len(versions) versions = sort_commit_hashes(versions) + if len(versions) != len_in: + print('error: unexpected amount of versions after commit hash sorting') + sys.exit(1) if verbose: print("analyzing '{}'".format(input_file)) From df474122f627b0163c0b39bcc969f4d33ca21b0a Mon Sep 17 00:00:00 2001 From: firewave Date: Fri, 30 Dec 2022 17:03:17 +0100 Subject: [PATCH 3/3] triage_version.py: bail out when commit hash sorting failed (e.g. unknown hash) --- tools/triage_py/triage_version.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/triage_py/triage_version.py b/tools/triage_py/triage_version.py index 088c2afe66f..b2234102f4a 100644 --- a/tools/triage_py/triage_version.py +++ b/tools/triage_py/triage_version.py @@ -22,8 +22,12 @@ def sort_commit_hashes(commits): git_cmd = 'git rev-list --abbrev-commit --topo-order --no-walk=sorted --reverse ' + ' '.join(commits) p = subprocess.Popen(git_cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=git_repo, universal_newlines=True) - comm = p.communicate() - return comm[0].splitlines() + stdout, stderr = p.communicate() + if p.returncode != 0: + print('error: sorting commit hashes failed') + print(stderr) + sys.exit(1) + return stdout.splitlines() verbose = args.verbose do_compare = args.compare