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 import logging | 7 import logging |
8 import os | 8 import os |
9 import posixpath | 9 import posixpath |
10 import re | 10 import re |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 print('') | 648 print('') |
649 | 649 |
650 clone_cmd = ['clone', '--progress'] | 650 clone_cmd = ['clone', '--progress'] |
651 if revision.startswith('refs/heads/'): | 651 if revision.startswith('refs/heads/'): |
652 clone_cmd.extend(['-b', revision.replace('refs/heads/', '')]) | 652 clone_cmd.extend(['-b', revision.replace('refs/heads/', '')]) |
653 detach_head = False | 653 detach_head = False |
654 else: | 654 else: |
655 detach_head = True | 655 detach_head = True |
656 if options.verbose: | 656 if options.verbose: |
657 clone_cmd.append('--verbose') | 657 clone_cmd.append('--verbose') |
658 if options.with_branch_heads: | |
659 clone_cmd.extend(['--config', 'remote.origin.fetch=+refs/branch-heads/*:' | |
660 'refs/remotes/branch-heads/*']) | |
661 clone_cmd.extend([url, self.checkout_path]) | 658 clone_cmd.extend([url, self.checkout_path]) |
662 | 659 |
663 # If the parent directory does not exist, Git clone on Windows will not | 660 # If the parent directory does not exist, Git clone on Windows will not |
664 # create it, so we need to do it manually. | 661 # create it, so we need to do it manually. |
665 parent_dir = os.path.dirname(self.checkout_path) | 662 parent_dir = os.path.dirname(self.checkout_path) |
666 if not os.path.exists(parent_dir): | 663 if not os.path.exists(parent_dir): |
667 gclient_utils.safe_makedirs(parent_dir) | 664 gclient_utils.safe_makedirs(parent_dir) |
668 | 665 |
669 percent_re = re.compile('.* ([0-9]{1,2})% .*') | 666 percent_re = re.compile('.* ([0-9]{1,2})% .*') |
670 def _GitFilter(line): | 667 def _GitFilter(line): |
671 # git uses an escape sequence to clear the line; elide it. | 668 # git uses an escape sequence to clear the line; elide it. |
672 esc = line.find(unichr(033)) | 669 esc = line.find(unichr(033)) |
673 if esc > -1: | 670 if esc > -1: |
674 line = line[:esc] | 671 line = line[:esc] |
675 match = percent_re.match(line) | 672 match = percent_re.match(line) |
676 if not match or not int(match.group(1)) % 10: | 673 if not match or not int(match.group(1)) % 10: |
677 print '%s' % line | 674 print '%s' % line |
678 | 675 |
679 for _ in range(3): | 676 for _ in range(3): |
680 try: | 677 try: |
681 self._Run(clone_cmd, options, cwd=self._root_dir, filter_fn=_GitFilter, | 678 self._Run(clone_cmd, options, cwd=self._root_dir, filter_fn=_GitFilter, |
682 print_stdout=False) | 679 print_stdout=False) |
683 # Update the "branch-heads" remote-tracking branches, since clone | |
684 # doesn't automatically fetch those, and we might need it to checkout a | |
685 # specific revision below. | |
686 if options.with_branch_heads: | |
687 fetch_cmd = ['fetch', 'origin'] | |
688 if options.verbose: | |
689 fetch_cmd.append('--verbose') | |
690 self._Run(fetch_cmd, options) | |
691 break | 680 break |
692 except subprocess2.CalledProcessError, e: | 681 except subprocess2.CalledProcessError, e: |
693 # Too bad we don't have access to the actual output yet. | 682 # Too bad we don't have access to the actual output yet. |
694 # We should check for "transfer closed with NNN bytes remaining to | 683 # We should check for "transfer closed with NNN bytes remaining to |
695 # read". In the meantime, just make sure .git exists. | 684 # read". In the meantime, just make sure .git exists. |
696 if (e.returncode == 128 and | 685 if (e.returncode == 128 and |
697 os.path.exists(os.path.join(self.checkout_path, '.git'))): | 686 os.path.exists(os.path.join(self.checkout_path, '.git'))): |
698 print(str(e)) | 687 print(str(e)) |
699 print('Retrying...') | 688 print('Retrying...') |
700 continue | 689 continue |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1236 new_command.append('--force') | 1225 new_command.append('--force') |
1237 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1226 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
1238 new_command.extend(('--accept', 'theirs-conflict')) | 1227 new_command.extend(('--accept', 'theirs-conflict')) |
1239 elif options.manually_grab_svn_rev: | 1228 elif options.manually_grab_svn_rev: |
1240 new_command.append('--force') | 1229 new_command.append('--force') |
1241 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1230 if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
1242 new_command.extend(('--accept', 'postpone')) | 1231 new_command.extend(('--accept', 'postpone')) |
1243 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: | 1232 elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]: |
1244 new_command.extend(('--accept', 'postpone')) | 1233 new_command.extend(('--accept', 'postpone')) |
1245 return new_command | 1234 return new_command |
OLD | NEW |