OLD | NEW |
1 # Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2009 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 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 return | 742 return |
743 | 743 |
744 command = ["update", checkout_path] | 744 command = ["update", checkout_path] |
745 if revision: | 745 if revision: |
746 command.extend(['--revision', str(revision)]) | 746 command.extend(['--revision', str(revision)]) |
747 scm.SVN.RunAndGetFileList(options, command, self._root_dir, file_list) | 747 scm.SVN.RunAndGetFileList(options, command, self._root_dir, file_list) |
748 | 748 |
749 def updatesingle(self, options, args, file_list): | 749 def updatesingle(self, options, args, file_list): |
750 checkout_path = os.path.join(self._root_dir, self.relpath) | 750 checkout_path = os.path.join(self._root_dir, self.relpath) |
751 filename = args.pop() | 751 filename = args.pop() |
752 if not os.path.exists(checkout_path): | 752 if scm.SVN.AssertVersion("1.5")[0]: |
753 # Create an empty checkout and then update the one file we want. Future | 753 if not os.path.exists(os.path.join(checkout_path, '.svn')): |
754 # operations will only apply to the one file we checked out. | 754 # Create an empty checkout and then update the one file we want. Future |
755 command = ["checkout", "--depth", "empty", self.url, checkout_path] | 755 # operations will only apply to the one file we checked out. |
| 756 command = ["checkout", "--depth", "empty", self.url, checkout_path] |
| 757 scm.SVN.Run(command, self._root_dir) |
| 758 if os.path.exists(os.path.join(checkout_path, filename)): |
| 759 os.remove(os.path.join(checkout_path, filename)) |
| 760 command = ["update", filename] |
| 761 scm.SVN.RunAndGetFileList(options, command, checkout_path, file_list) |
| 762 # After the initial checkout, we can use update as if it were any other |
| 763 # dep. |
| 764 self.update(options, args, file_list) |
| 765 else: |
| 766 # If the installed version of SVN doesn't support --depth, fallback to |
| 767 # just exporting the file. This has the downside that revision |
| 768 # information is not stored next to the file, so we will have to |
| 769 # re-export the file every time we sync. |
| 770 if not os.path.exists(checkout_path): |
| 771 os.makedirs(checkout_path) |
| 772 command = ["export", os.path.join(self.url, filename), |
| 773 os.path.join(checkout_path, filename)] |
| 774 if options.revision: |
| 775 command.extend(['--revision', str(options.revision)]) |
756 scm.SVN.Run(command, self._root_dir) | 776 scm.SVN.Run(command, self._root_dir) |
757 command = ["update", filename] | |
758 scm.SVN.RunAndGetFileList(options, command, checkout_path, file_list) | |
759 # After the initial checkout, we can use update as if it were any other | |
760 # dep. | |
761 self.update(options, args, file_list) | |
762 | 777 |
763 def revert(self, options, args, file_list): | 778 def revert(self, options, args, file_list): |
764 """Reverts local modifications. Subversion specific. | 779 """Reverts local modifications. Subversion specific. |
765 | 780 |
766 All reverted files will be appended to file_list, even if Subversion | 781 All reverted files will be appended to file_list, even if Subversion |
767 doesn't know about them. | 782 doesn't know about them. |
768 """ | 783 """ |
769 __pychecker__ = 'unusednames=args' | 784 __pychecker__ = 'unusednames=args' |
770 path = os.path.join(self._root_dir, self.relpath) | 785 path = os.path.join(self._root_dir, self.relpath) |
771 if not os.path.isdir(path): | 786 if not os.path.isdir(path): |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
835 print("\n________ couldn't run \'%s\' in \'%s\':\nThe directory " | 850 print("\n________ couldn't run \'%s\' in \'%s\':\nThe directory " |
836 "does not exist." | 851 "does not exist." |
837 % (' '.join(command), path)) | 852 % (' '.join(command), path)) |
838 # There's no file list to retrieve. | 853 # There's no file list to retrieve. |
839 else: | 854 else: |
840 scm.SVN.RunAndGetFileList(options, command, path, file_list) | 855 scm.SVN.RunAndGetFileList(options, command, path, file_list) |
841 | 856 |
842 def FullUrlForRelativeUrl(self, url): | 857 def FullUrlForRelativeUrl(self, url): |
843 # Find the forth '/' and strip from there. A bit hackish. | 858 # Find the forth '/' and strip from there. A bit hackish. |
844 return '/'.join(self.url.split('/')[:4]) + url | 859 return '/'.join(self.url.split('/')[:4]) + url |
OLD | NEW |