Chromium Code Reviews| Index: gclient_scm.py |
| diff --git a/gclient_scm.py b/gclient_scm.py |
| index a87032e749902122c676b6621dde4fec33f8f232..df1054f112233032e21cb45a21a50d48af8dbc74 100644 |
| --- a/gclient_scm.py |
| +++ b/gclient_scm.py |
| @@ -825,6 +825,25 @@ class GitWrapper(SCMWrapper): |
| # create it, so we need to do it manually. |
| parent_dir = os.path.dirname(self.checkout_path) |
| gclient_utils.safe_makedirs(parent_dir) |
| + |
| + template_dir = None |
| + if options.no_history: |
| + if gclient_utils.IsGitSha(revision): |
| + # In the case of a subproject, the pinned sha is not necessarily the |
| + # head of the remote branch (so we can't just use --depth=N). Instead, |
| + # we tell git to fetch all the remote objects from SHA..HEAD by means of |
| + # a template git dir which has a 'shallow' file pointing to the sha. |
|
iannucci
2014/08/02 21:22:15
sneaky :(. I'm not sure if this is guaranteed to w
Primiano Tucci (use gerrit)
2014/08/03 17:43:34
+torne as he might have more insights on this topi
|
| + template_dir = tempfile.mkdtemp( |
| + prefix='_gclient_gittmp_%s' % os.path.basename(self.checkout_path), |
| + dir=parent_dir) |
| + self._Run(['init', '--bare', template_dir], options, cwd=self._root_dir) |
| + with open(os.path.join(template_dir, 'shallow'), 'w') as template_file: |
| + template_file.write(revision) |
| + clone_cmd.append('--template=' + template_dir) |
| + else: |
| + # Otherwise, we're just interested in the HEAD. Just use --depth. |
| + clone_cmd.append('--depth=1') |
| + |
| tmp_dir = tempfile.mkdtemp( |
| prefix='_gclient_%s_' % os.path.basename(self.checkout_path), |
| dir=parent_dir) |
| @@ -841,6 +860,8 @@ class GitWrapper(SCMWrapper): |
| if os.listdir(tmp_dir): |
| self.Print('_____ removing non-empty tmp dir %s' % tmp_dir) |
| gclient_utils.rmtree(tmp_dir) |
| + if template_dir: |
| + gclient_utils.rmtree(template_dir) |
|
wtc
2014/08/03 04:12:49
Should we add
if os.listdir(template_dir):
s
Primiano Tucci (use gerrit)
2014/08/03 17:43:34
Hmm this I think should stay as it is.
Conversely
|
| self._UpdateBranchHeads(options, fetch=True) |
| self._Checkout(options, revision.replace('refs/heads/', ''), quiet=True) |
| if self._GetCurrentBranch() is None: |