From 3000cdad2237abe1f956f8109e385891e1a96d17 Mon Sep 17 00:00:00 2001 From: Bertrand SIMONNET Date: Tue, 25 Nov 2014 16:19:29 -0800 Subject: [PATCH] Handle shallow checkout of SHA1 pinned repos When doing a shallow checkout SHA1 pinned repos with repo init --depth=1 and repo sync -c, repo would try to fetch only some reference and fail if the exact SHA1 repo was missing. Instead, when depth is set, fetch only the specific commit. Change-Id: If3f799d0e78c03faea47f796380bb5e367b11998 --- project.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/project.py b/project.py index cdce1e84..b9a53dce 100644 --- a/project.py +++ b/project.py @@ -1763,8 +1763,15 @@ class Project(object): if is_sha1 or tag_name is not None: if self._CheckForSha1(): return True - if is_sha1 and (not self.upstream or ID_RE.match(self.upstream)): - current_branch_only = False + if is_sha1 and not depth: + # When syncing a specific commit and --depth is not set: + # * if upstream is explicitly specified and is not a sha1, fetch only + # upstream as users expect only upstream to be fetch. + # Note: The commit might not be in upstream in which case the sync + # will fail. + # * otherwise, fetch all branches to make sure we end up with the + # specific commit. + current_branch_only = self.upstream and not ID_RE.match(self.upstream) if not name: name = self.remote.name @@ -1841,12 +1848,17 @@ class Project(object): spec.append(tag_name) branch = self.revisionExpr - if is_sha1: - branch = self.upstream - if branch is not None and branch.strip(): - if not branch.startswith('refs/'): - branch = R_HEADS + branch - spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch))) + if is_sha1 and depth: + # Shallow checkout of a specific commit, fetch from that commit and not + # the heads only as the commit might be deeper in the history. + spec.append(branch) + else: + if is_sha1: + branch = self.upstream + if branch is not None and branch.strip(): + if not branch.startswith('refs/'): + branch = R_HEADS + branch + spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch))) cmd.extend(spec) shallowfetch = self.config.GetString('repo.shallowfetch')