OLD | NEW |
1 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2010 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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 if self.relpath: | 103 if self.relpath: |
104 self.relpath = self.relpath.replace('/', os.sep) | 104 self.relpath = self.relpath.replace('/', os.sep) |
105 if self.relpath and self._root_dir: | 105 if self.relpath and self._root_dir: |
106 self.checkout_path = os.path.join(self._root_dir, self.relpath) | 106 self.checkout_path = os.path.join(self._root_dir, self.relpath) |
107 | 107 |
108 def RunCommand(self, command, options, args, file_list=None): | 108 def RunCommand(self, command, options, args, file_list=None): |
109 # file_list will have all files that are modified appended to it. | 109 # file_list will have all files that are modified appended to it. |
110 if file_list is None: | 110 if file_list is None: |
111 file_list = [] | 111 file_list = [] |
112 | 112 |
113 commands = ['cleanup', 'export', 'update', 'updatesingle', 'revert', | 113 commands = ['cleanup', 'update', 'updatesingle', 'revert', |
114 'revinfo', 'status', 'diff', 'pack', 'runhooks'] | 114 'revinfo', 'status', 'diff', 'pack', 'runhooks'] |
115 | 115 |
116 if not command in commands: | 116 if not command in commands: |
117 raise gclient_utils.Error('Unknown command %s' % command) | 117 raise gclient_utils.Error('Unknown command %s' % command) |
118 | 118 |
119 if not command in dir(self): | 119 if not command in dir(self): |
120 raise gclient_utils.Error('Command %s not implemented in %s wrapper' % ( | 120 raise gclient_utils.Error('Command %s not implemented in %s wrapper' % ( |
121 command, self.__class__.__name__)) | 121 command, self.__class__.__name__)) |
122 | 122 |
123 return getattr(self, command)(options, args, file_list) | 123 return getattr(self, command)(options, args, file_list) |
(...skipping 13 matching lines...) Expand all Loading... |
137 def cleanup(options, args, file_list): | 137 def cleanup(options, args, file_list): |
138 """'Cleanup' the repo. | 138 """'Cleanup' the repo. |
139 | 139 |
140 There's no real git equivalent for the svn cleanup command, do a no-op. | 140 There's no real git equivalent for the svn cleanup command, do a no-op. |
141 """ | 141 """ |
142 | 142 |
143 def diff(self, options, args, file_list): | 143 def diff(self, options, args, file_list): |
144 merge_base = self._Capture(['merge-base', 'HEAD', 'origin']) | 144 merge_base = self._Capture(['merge-base', 'HEAD', 'origin']) |
145 self._Run(['diff', merge_base], options) | 145 self._Run(['diff', merge_base], options) |
146 | 146 |
147 def export(self, options, args, file_list): | |
148 """Export a clean directory tree into the given path. | |
149 | |
150 Exports into the specified directory, creating the path if it does | |
151 already exist. | |
152 """ | |
153 assert len(args) == 1 | |
154 export_path = os.path.abspath(os.path.join(args[0], self.relpath)) | |
155 if not os.path.exists(export_path): | |
156 os.makedirs(export_path) | |
157 self._Run(['checkout-index', '-a', '--prefix=%s/' % export_path], | |
158 options) | |
159 | |
160 def pack(self, options, args, file_list): | 147 def pack(self, options, args, file_list): |
161 """Generates a patch file which can be applied to the root of the | 148 """Generates a patch file which can be applied to the root of the |
162 repository. | 149 repository. |
163 | 150 |
164 The patch file is generated from a diff of the merge base of HEAD and | 151 The patch file is generated from a diff of the merge base of HEAD and |
165 its upstream branch. | 152 its upstream branch. |
166 """ | 153 """ |
167 merge_base = self._Capture(['merge-base', 'HEAD', 'origin']) | 154 merge_base = self._Capture(['merge-base', 'HEAD', 'origin']) |
168 gclient_utils.CheckCallAndFilter( | 155 gclient_utils.CheckCallAndFilter( |
169 ['git', 'diff', merge_base], | 156 ['git', 'diff', merge_base], |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 """Cleanup working copy.""" | 681 """Cleanup working copy.""" |
695 self._Run(['cleanup'] + args, options) | 682 self._Run(['cleanup'] + args, options) |
696 | 683 |
697 def diff(self, options, args, file_list): | 684 def diff(self, options, args, file_list): |
698 # NOTE: This function does not currently modify file_list. | 685 # NOTE: This function does not currently modify file_list. |
699 if not os.path.isdir(self.checkout_path): | 686 if not os.path.isdir(self.checkout_path): |
700 raise gclient_utils.Error('Directory %s is not present.' % | 687 raise gclient_utils.Error('Directory %s is not present.' % |
701 self.checkout_path) | 688 self.checkout_path) |
702 self._Run(['diff'] + args, options) | 689 self._Run(['diff'] + args, options) |
703 | 690 |
704 def export(self, options, args, file_list): | |
705 """Export a clean directory tree into the given path.""" | |
706 assert len(args) == 1 | |
707 export_path = os.path.abspath(os.path.join(args[0], self.relpath)) | |
708 try: | |
709 os.makedirs(export_path) | |
710 except OSError: | |
711 pass | |
712 assert os.path.exists(export_path) | |
713 self._Run(['export', '--force', '.', export_path], options) | |
714 | |
715 def pack(self, options, args, file_list): | 691 def pack(self, options, args, file_list): |
716 """Generates a patch file which can be applied to the root of the | 692 """Generates a patch file which can be applied to the root of the |
717 repository.""" | 693 repository.""" |
718 if not os.path.isdir(self.checkout_path): | 694 if not os.path.isdir(self.checkout_path): |
719 raise gclient_utils.Error('Directory %s is not present.' % | 695 raise gclient_utils.Error('Directory %s is not present.' % |
720 self.checkout_path) | 696 self.checkout_path) |
721 gclient_utils.CheckCallAndFilter( | 697 gclient_utils.CheckCallAndFilter( |
722 ['svn', 'diff', '-x', '--ignore-eol-style'] + args, | 698 ['svn', 'diff', '-x', '--ignore-eol-style'] + args, |
723 cwd=self.checkout_path, | 699 cwd=self.checkout_path, |
724 print_stdout=False, | 700 print_stdout=False, |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 | 932 |
957 This method returns a new list to be used as a command.""" | 933 This method returns a new list to be used as a command.""" |
958 new_command = command[:] | 934 new_command = command[:] |
959 if revision: | 935 if revision: |
960 new_command.extend(['--revision', str(revision).strip()]) | 936 new_command.extend(['--revision', str(revision).strip()]) |
961 # --force was added to 'svn update' in svn 1.5. | 937 # --force was added to 'svn update' in svn 1.5. |
962 if ((options.force or options.manually_grab_svn_rev) and | 938 if ((options.force or options.manually_grab_svn_rev) and |
963 scm.SVN.AssertVersion("1.5")[0]): | 939 scm.SVN.AssertVersion("1.5")[0]): |
964 new_command.append('--force') | 940 new_command.append('--force') |
965 return new_command | 941 return new_command |
OLD | NEW |