From eeab6860f1c5e542ebabdec2e44185bedad49ed7 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Mon, 3 Aug 2015 13:11:53 -0700 Subject: [PATCH] Fix shallow clone behavior The existing code here makes sure that switching clone-depth from on to off actually causes the history to be fully restored. Unfortunately, it does this by fetching the full history every time the fetch spec changes. Switching between two clone-depth="1" branches will fetch far more than the top commit. Instead, when not using clone-depth, pass --depth=2147483647 to git fetch so that it ensures that we have the entire history. That is slightly less efficient, so limit it to only when there are shallow objects in the project by checking for the existance of the 'shallow' file. Change-Id: Iee0cfc9c6992c208344b1d9123769992412db67b --- project.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/project.py b/project.py index 9cb7542e..a117f4df 100644 --- a/project.py +++ b/project.py @@ -1877,6 +1877,13 @@ class Project(object): if depth: cmd.append('--depth=%s' % depth) + else: + # If this repo has shallow objects, then we don't know which refs have + # shallow objects or not. Tell git to unshallow all fetched refs. Don't + # do this with projects that don't have shallow objects, since it is less + # efficient. + if os.path.exists(os.path.join(self.gitdir, 'shallow')): + cmd.append('--depth=2147483647') if quiet: cmd.append('--quiet') @@ -1914,16 +1921,6 @@ class Project(object): spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch))) cmd.extend(spec) - shallowfetch = self.config.GetString('repo.shallowfetch') - if shallowfetch and shallowfetch != ' '.join(spec): - GitCommand(self, ['fetch', '--depth=2147483647', name] - + shallowfetch.split(), - bare=True, ssh_proxy=ssh_proxy).Wait() - if depth: - self.config.SetString('repo.shallowfetch', ' '.join(spec)) - else: - self.config.SetString('repo.shallowfetch', None) - ok = False for _i in range(2): gitcmd = GitCommand(self, cmd, bare=True, ssh_proxy=ssh_proxy)