| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Gclient-specific SCM-specific operations.""" | 5 """Gclient-specific SCM-specific operations.""" |
| 6 | 6 |
| 7 from __future__ import print_function | 7 from __future__ import print_function |
| 8 | 8 |
| 9 import errno | 9 import errno |
| 10 import logging | 10 import logging |
| (...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 clone_cmd = cfg + ['clone', '--no-checkout', '--progress'] | 818 clone_cmd = cfg + ['clone', '--no-checkout', '--progress'] |
| 819 if self.cache_dir: | 819 if self.cache_dir: |
| 820 clone_cmd.append('--shared') | 820 clone_cmd.append('--shared') |
| 821 if options.verbose: | 821 if options.verbose: |
| 822 clone_cmd.append('--verbose') | 822 clone_cmd.append('--verbose') |
| 823 clone_cmd.append(url) | 823 clone_cmd.append(url) |
| 824 # If the parent directory does not exist, Git clone on Windows will not | 824 # If the parent directory does not exist, Git clone on Windows will not |
| 825 # create it, so we need to do it manually. | 825 # create it, so we need to do it manually. |
| 826 parent_dir = os.path.dirname(self.checkout_path) | 826 parent_dir = os.path.dirname(self.checkout_path) |
| 827 gclient_utils.safe_makedirs(parent_dir) | 827 gclient_utils.safe_makedirs(parent_dir) |
| 828 |
| 829 template_dir = None |
| 830 if options.no_history: |
| 831 if gclient_utils.IsGitSha(revision): |
| 832 # In the case of a subproject, the pinned sha is not necessarily the |
| 833 # head of the remote branch (so we can't just use --depth=N). Instead, |
| 834 # we tell git to fetch all the remote objects from SHA..HEAD by means of |
| 835 # a template git dir which has a 'shallow' file pointing to the sha. |
| 836 template_dir = tempfile.mkdtemp( |
| 837 prefix='_gclient_gittmp_%s' % os.path.basename(self.checkout_path), |
| 838 dir=parent_dir) |
| 839 self._Run(['init', '--bare', template_dir], options, cwd=self._root_dir) |
| 840 with open(os.path.join(template_dir, 'shallow'), 'w') as template_file: |
| 841 template_file.write(revision) |
| 842 clone_cmd.append('--template=' + template_dir) |
| 843 else: |
| 844 # Otherwise, we're just interested in the HEAD. Just use --depth. |
| 845 clone_cmd.append('--depth=1') |
| 846 |
| 828 tmp_dir = tempfile.mkdtemp( | 847 tmp_dir = tempfile.mkdtemp( |
| 829 prefix='_gclient_%s_' % os.path.basename(self.checkout_path), | 848 prefix='_gclient_%s_' % os.path.basename(self.checkout_path), |
| 830 dir=parent_dir) | 849 dir=parent_dir) |
| 831 try: | 850 try: |
| 832 clone_cmd.append(tmp_dir) | 851 clone_cmd.append(tmp_dir) |
| 833 self._Run(clone_cmd, options, cwd=self._root_dir, retry=True) | 852 self._Run(clone_cmd, options, cwd=self._root_dir, retry=True) |
| 834 gclient_utils.safe_makedirs(self.checkout_path) | 853 gclient_utils.safe_makedirs(self.checkout_path) |
| 835 gclient_utils.safe_rename(os.path.join(tmp_dir, '.git'), | 854 gclient_utils.safe_rename(os.path.join(tmp_dir, '.git'), |
| 836 os.path.join(self.checkout_path, '.git')) | 855 os.path.join(self.checkout_path, '.git')) |
| 837 except: | 856 except: |
| 838 traceback.print_exc(file=self.out_fh) | 857 traceback.print_exc(file=self.out_fh) |
| 839 raise | 858 raise |
| 840 finally: | 859 finally: |
| 841 if os.listdir(tmp_dir): | 860 if os.listdir(tmp_dir): |
| 842 self.Print('_____ removing non-empty tmp dir %s' % tmp_dir) | 861 self.Print('_____ removing non-empty tmp dir %s' % tmp_dir) |
| 843 gclient_utils.rmtree(tmp_dir) | 862 gclient_utils.rmtree(tmp_dir) |
| 863 if template_dir: |
| 864 gclient_utils.rmtree(template_dir) |
| 844 self._UpdateBranchHeads(options, fetch=True) | 865 self._UpdateBranchHeads(options, fetch=True) |
| 845 self._Checkout(options, revision.replace('refs/heads/', ''), quiet=True) | 866 self._Checkout(options, revision.replace('refs/heads/', ''), quiet=True) |
| 846 if self._GetCurrentBranch() is None: | 867 if self._GetCurrentBranch() is None: |
| 847 # Squelch git's very verbose detached HEAD warning and use our own | 868 # Squelch git's very verbose detached HEAD warning and use our own |
| 848 self.Print( | 869 self.Print( |
| 849 ('Checked out %s to a detached HEAD. Before making any commits\n' | 870 ('Checked out %s to a detached HEAD. Before making any commits\n' |
| 850 'in this repo, you should use \'git checkout <branch>\' to switch to\n' | 871 'in this repo, you should use \'git checkout <branch>\' to switch to\n' |
| 851 'an existing branch or use \'git checkout %s -b <branch>\' to\n' | 872 'an existing branch or use \'git checkout %s -b <branch>\' to\n' |
| 852 'create a new branch for your work.') % (revision, self.remote)) | 873 'create a new branch for your work.') % (revision, self.remote)) |
| 853 | 874 |
| (...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1539 new_command.append('--force') | 1560 new_command.append('--force') |
| 1540 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1561 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
| 1541 new_command.extend(('--accept', 'theirs-conflict')) | 1562 new_command.extend(('--accept', 'theirs-conflict')) |
| 1542 elif options.manually_grab_svn_rev: | 1563 elif options.manually_grab_svn_rev: |
| 1543 new_command.append('--force') | 1564 new_command.append('--force') |
| 1544 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1565 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
| 1545 new_command.extend(('--accept', 'postpone')) | 1566 new_command.extend(('--accept', 'postpone')) |
| 1546 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1567 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
| 1547 new_command.extend(('--accept', 'postpone')) | 1568 new_command.extend(('--accept', 'postpone')) |
| 1548 return new_command | 1569 return new_command |
| OLD | NEW |