diff options
authorAlexis Lothoré <>2023-03-09 16:53:01 +0100
committerRichard Purdie <>2023-03-12 23:36:44 +0000
commit6c472b326bcc718459483cc29b310b884742df86 (patch)
parentc335f96f687c73fde443ac330ca3e17113794d9e (diff)
scripts/ set proper branches when using resulttool
The script currently only works if base and target can be found on default branches. It breaks if we try to generate a regression report between revisions that live on different branches (as needed on integration and testing branches). For example, the following command: ./scripts/ regression-report yocto-4.0.6 yocto-4.0.7 ends with the follwing error: [...] ERROR: Only 1 tester revisions found, unable to generate report [...] Read branches from tags names in test results repository, and pass those branches to resulttool when generating the report Signed-off-by: Alexis Lothoré <> Signed-off-by: Richard Purdie <>
1 files changed, 15 insertions, 6 deletions
diff --git a/scripts/ b/scripts/
index 3df9d6015f..4df339c92e 100755
--- a/scripts/
+++ b/scripts/
@@ -38,18 +38,27 @@ def get_sha1(pokydir, revision):
logger.error(f"Can not find SHA-1 for {revision} in {pokydir}")
return None
+def get_branch(tag):
+ # The tags in test results repository, as returned by git rev-list, have the following form:
+ # refs/tags/<branch>/<count>-g<sha1>/<num>
+ return tag.split("/")[2]
def fetch_testresults(workdir, sha1):"Fetching test results for {sha1} in {workdir}")
rawtags = subprocess.check_output(["git", "ls-remote", "--refs", "--tags", "origin", f"*{sha1}*"], cwd=workdir).decode('utf-8').strip()
if not rawtags:
raise Exception(f"No reference found for commit {sha1} in {workdir}")
+ branch = ""
for rev in [rawtag.split()[1] for rawtag in rawtags.splitlines()]:
-"Fetching matching revisions: {rev}")
+ if not branch:
+ branch = get_branch(rev)
+"Fetching matching revision: {rev}")
subprocess.check_call(["git", "fetch", "--depth", "1", "origin", f"{rev}:{rev}"], cwd=workdir)
+ return branch
-def compute_regression_report(workdir, baserevision, targetrevision):
+def compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision):"Running resulttool regression between SHA1 {baserevision} and {targetrevision}")
- report = subprocess.check_output([resulttool, "regression-git", "--commit", baserevision, "--commit2", targetrevision, workdir]).decode("utf-8")
+ report = subprocess.check_output([resulttool, "regression-git", "--branch", basebranch, "--commit", baserevision, "--branch2", targetbranch, "--commit2", targetrevision, workdir]).decode("utf-8")
return report
def print_report_with_header(report, baseversion, baserevision, targetversion, targetrevision):
@@ -74,9 +83,9 @@ def regression(args):
if not args.testresultsdir:
subprocess.check_call(["rm", "-rf", workdir])
- fetch_testresults(workdir, baserevision)
- fetch_testresults(workdir, targetrevision)
- report = compute_regression_report(workdir, baserevision, targetrevision)
+ basebranch = fetch_testresults(workdir, baserevision)
+ targetbranch = fetch_testresults(workdir, targetrevision)
+ report = compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision)
print_report_with_header(report, args.base, baserevision,, targetrevision)
if not args.testresultsdir: