From a91002bb46fa8981962e0fda6ca1d965ac482c69 Mon Sep 17 00:00:00 2001 From: Dennis Kempin Date: Thu, 8 Sep 2022 19:36:57 +0000 Subject: [PATCH] tools/cl: Identify cl's by Change-Id Otherwise we won't be able to find the corresponding gerrit change if the commit has been ammended. BUG=b:239840337 TEST=./tools/cl status Change-Id: I5a9673414145a0dcc0547c1de6422992478a3094 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3885076 Reviewed-by: Daniel Verkamp Tested-by: Dennis Kempin Commit-Queue: Dennis Kempin --- tools/cl | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tools/cl b/tools/cl index 7934a66537..f19ab36800 100755 --- a/tools/cl +++ b/tools/cl @@ -4,10 +4,12 @@ # found in the LICENSE file. import functools +import re +import sys from os import chdir from pathlib import Path -from impl.common import CROSVM_ROOT, GerritChange, confirm, run_commands, cmd -import sys + +from impl.common import CROSVM_ROOT, GerritChange, cmd, confirm, run_commands USAGE = """\ ./tools/cl [upload|rebase|status|prune] @@ -65,9 +67,19 @@ class LocalChange(object): sha_title = line.split(" ", 1) yield cls(sha_title[0], sha_title[1]) + @functools.cached_property + def change_id(self): + msg = git("log -1 --format=email", self.sha).stdout() + match = re.search("^Change-Id: (I[a-f0-9]+)", msg, re.MULTILINE) + if not match: + return None + return match.group(1) + @functools.cached_property def gerrit(self): - results = GerritChange.query("project:crosvm/crosvm", self.sha) + if not self.change_id: + return None + results = GerritChange.query("project:crosvm/crosvm", self.change_id) if len(results) > 1: raise Exception(f"Multiple gerrit changes found for commit {self.sha}: {self.title}.") return results[0] if results else None @@ -127,7 +139,12 @@ def prerequisites(): def print_branch_summary(branch: str): - print("Branch", branch, "tracking", get_upstream(branch)) + upstream = get_upstream(branch) + if not upstream: + print("Branch", branch, "is not tracking an upstream branch") + print() + return + print("Branch", branch, "tracking", upstream) changes = [*LocalChange.list_changes(branch)] for change in changes: if change.gerrit: