git_config: Support SHA-256 object IDs

Update ID_RE to match both 40-char (SHA-1) and 64-char (SHA-256) IDs as
part of Git 3.0 support.

Bug: 483758905
Change-Id: Ie5d9a2a5df4c6e7adda7f1d89f1bfb7724846057
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/600341
Reviewed-by: Brian Gan <brgan@google.com>
Tested-by: Gavin Mak <gavinmak@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Commit-Queue: Gavin Mak <gavinmak@google.com>
This commit is contained in:
Gavin Mak
2026-06-23 22:47:32 +00:00
committed by gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 6586efe79a
commit c21a41c7cc
3 changed files with 28 additions and 4 deletions
+3 -3
View File
@@ -40,7 +40,7 @@ from repo_trace import Trace
# that is saved in the config.
SYNC_STATE_PREFIX = "repo.syncstate."
ID_RE = re.compile(r"^[0-9a-f]{40}$")
ID_RE = re.compile(r"^[0-9a-f]{40,64}$")
REVIEW_CACHE = {}
@@ -49,8 +49,8 @@ def IsChange(rev):
return rev.startswith(R_CHANGES)
def IsId(rev):
return ID_RE.match(rev)
def IsId(rev: str) -> bool:
return bool(ID_RE.match(rev))
def IsTag(rev):
+1 -1
View File
@@ -2709,7 +2709,7 @@ class Project:
if depth:
current_branch_only = True
is_sha1 = bool(IsId(self.revisionExpr))
is_sha1 = IsId(self.revisionExpr)
if current_branch_only:
if self.revisionExpr.startswith(R_TAGS):
+24
View File
@@ -244,3 +244,27 @@ def test_remote_save_with_push_url_without_projectname(
assert (
written_config.GetString("remote.origin.pushurl") == "ssh://example.com"
)
@pytest.mark.parametrize(
"rev, expected",
(
("a" * 40, True),
("0" * 40, True),
("f" * 40, True),
("a" * 64, True),
("0" * 64, True),
("f" * 64, True),
("a" * 39, False),
("a" * 41, True),
("a" * 63, True),
("a" * 65, False),
("g" * 40, False),
("g" * 64, False),
("refs/heads/master", False),
("refs/tags/v1.0", False),
),
)
def test_is_id(rev: str, expected: bool) -> None:
"""Test IsId identifies both SHA-1 and SHA-256 hashes."""
assert git_config.IsId(rev) == expected