mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-10-21 04:38:22 +00:00
project: centralize safe branch and commit resolution
Resolve commit-ish values through one typed helper using rev-parse --verify --quiet and, on Git 2.30+, --end-of-options. Reject option-like revisions on older clients, reuse the helper for project and manifest resolution, and validate user branch names with check-ref-format --branch. Bug: 553599402 Change-Id: I2dda49ff3e781cec14d3b84263a8dace06b4073f Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/623182 Tested-by: Gavin Mak <gavinmak@google.com> Commit-Queue: Gavin Mak <gavinmak@google.com> Reviewed-by: Brian Gan <brgan@google.com>
This commit is contained in:
1 parent
6541729a18
commit
d27034bf62
7 files changed
+95
-10
No files matched your search
+15
-2
@@ -1767,7 +1767,7 @@ class Project:
|
||||
return self.GetRevisionId(self._allrefs)
|
||||
|
||||
try:
|
||||
return self.bare_git.rev_list(self.revisionExpr, "-1")[0]
|
||||
return self.bare_git.ResolveCommit(self.revisionExpr)
|
||||
except GitError:
|
||||
raise ManifestInvalidRevisionError(
|
||||
f"revision {self.revisionExpr} in {self.name} not found"
|
||||
@@ -1800,7 +1800,7 @@ class Project:
|
||||
return all_refs[rev]
|
||||
|
||||
try:
|
||||
return self.bare_git.rev_parse("--verify", "%s^0" % rev)
|
||||
return self.bare_git.ResolveCommit(rev)
|
||||
except GitError:
|
||||
raise ManifestInvalidRevisionError(
|
||||
f"revision {self.revisionExpr} in {self.name} not found"
|
||||
@@ -4581,6 +4581,19 @@ class Project:
|
||||
)
|
||||
return ref
|
||||
|
||||
def ResolveCommit(self, revision: str) -> str:
|
||||
"""Resolve |revision| to a commit without option ambiguity."""
|
||||
cmdv = ["--verify", "--quiet"]
|
||||
if git_require((2, 30, 0)):
|
||||
cmdv.append("--end-of-options")
|
||||
elif revision.startswith("-"):
|
||||
raise GitError(
|
||||
f"invalid revision: {revision}",
|
||||
project=self._project.name,
|
||||
)
|
||||
cmdv.append(f"{revision}^{{commit}}")
|
||||
return self.rev_parse(*cmdv, log_as_error=False)
|
||||
|
||||
def SetHead(self, ref, message=None):
|
||||
cmdv = []
|
||||
if message is not None:
|
||||
|
||||
Reference in new issue
Block a user