From 0286e31ec7fd76237b597846b394a681ba78bb0b Mon Sep 17 00:00:00 2001 From: Ian Kasprzak Date: Fri, 5 Feb 2021 10:06:18 -0800 Subject: [PATCH] Update _CheckForImmutableRevision to use git rev-list _CheckForImmutableRevision is used to see if repo can skip fetching a project, but 'git rev-parse' with partial clone does a data fetch to accomplish this. Changed to use: 'git rev-list -1 --missing=allow-any ^0' which checks the local ref without fetching from the server first. Bug: [google internal] b/179477822 Testing: - Unit tests - Verified init/sync working on aosp-master - Verified wwith a pinned manifest that local ref check works (no fetch) Change-Id: If327b893c6658421f41df1f58c337f53b4c60ce6 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/296142 Reviewed-by: Dan Willemsen Tested-by: Ian Kasprzak --- project.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/project.py b/project.py index 17c75b4d..9c7d9ec1 100644 --- a/project.py +++ b/project.py @@ -438,6 +438,7 @@ class RemoteSpec(object): self.orig_name = orig_name self.fetchUrl = fetchUrl + class Project(object): # These objects can be shared between several working trees. shareable_files = ['description', 'info'] @@ -1927,7 +1928,8 @@ class Project(object): try: # if revision (sha or tag) is not present then following function # throws an error. - self.bare_git.rev_parse('--verify', '%s^0' % self.revisionExpr) + self.bare_git.rev_list('-1', '--missing=allow-any', + '%s^0' % self.revisionExpr, '--') return True except GitError: # There is no such persistent revision. We have to fetch it.