OLD | NEW |
1 # Copyright 2009 Google Inc. All Rights Reserved. | 1 # Copyright 2009 Google Inc. All Rights Reserved. |
2 # | 2 # |
3 # Licensed under the Apache License, Version 2.0 (the "License"); | 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
4 # you may not use this file except in compliance with the License. | 4 # you may not use this file except in compliance with the License. |
5 # You may obtain a copy of the License at | 5 # You may obtain a copy of the License at |
6 # | 6 # |
7 # http://www.apache.org/licenses/LICENSE-2.0 | 7 # http://www.apache.org/licenses/LICENSE-2.0 |
8 # | 8 # |
9 # Unless required by applicable law or agreed to in writing, software | 9 # Unless required by applicable law or agreed to in writing, software |
10 # distributed under the License is distributed on an "AS IS" BASIS, | 10 # distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 71 |
72 def FullUrlForRelativeUrl(self, url): | 72 def FullUrlForRelativeUrl(self, url): |
73 # Find the forth '/' and strip from there. A bit hackish. | 73 # Find the forth '/' and strip from there. A bit hackish. |
74 return '/'.join(self.url.split('/')[:4]) + url | 74 return '/'.join(self.url.split('/')[:4]) + url |
75 | 75 |
76 def RunCommand(self, command, options, args, file_list=None): | 76 def RunCommand(self, command, options, args, file_list=None): |
77 # file_list will have all files that are modified appended to it. | 77 # file_list will have all files that are modified appended to it. |
78 if file_list is None: | 78 if file_list is None: |
79 file_list = [] | 79 file_list = [] |
80 | 80 |
81 commands = ['cleanup', 'export', 'update', 'revert', | 81 commands = ['cleanup', 'export', 'update', 'revert', 'revinfo', |
82 'status', 'diff', 'pack', 'runhooks'] | 82 'status', 'diff', 'pack', 'runhooks'] |
83 | 83 |
84 if not command in commands: | 84 if not command in commands: |
85 raise gclient_utils.Error('Unknown command %s' % command) | 85 raise gclient_utils.Error('Unknown command %s' % command) |
86 | 86 |
87 if not command in dir(self): | 87 if not command in dir(self): |
88 raise gclient_utils.Error('Command %s not implemnted in %s wrapper' % ( | 88 raise gclient_utils.Error('Command %s not implemnted in %s wrapper' % ( |
89 command, self.scm_name)) | 89 command, self.scm_name)) |
90 | 90 |
91 return getattr(self, command)(options, args, file_list) | 91 return getattr(self, command)(options, args, file_list) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 # revert won't work if the directory doesn't exist. It needs to | 160 # revert won't work if the directory doesn't exist. It needs to |
161 # checkout instead. | 161 # checkout instead. |
162 print("\n_____ %s is missing, synching instead" % self.relpath) | 162 print("\n_____ %s is missing, synching instead" % self.relpath) |
163 # Don't reuse the args. | 163 # Don't reuse the args. |
164 return self.update(options, [], file_list) | 164 return self.update(options, [], file_list) |
165 merge_base = self._RunGit(['merge-base', 'HEAD', 'origin']) | 165 merge_base = self._RunGit(['merge-base', 'HEAD', 'origin']) |
166 files = self._RunGit(['diff', merge_base, '--name-only']).split() | 166 files = self._RunGit(['diff', merge_base, '--name-only']).split() |
167 self._RunGit(['reset', '--hard', merge_base], redirect_stdout=False) | 167 self._RunGit(['reset', '--hard', merge_base], redirect_stdout=False) |
168 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) | 168 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) |
169 | 169 |
| 170 def revinfo(self, options, args, file_list): |
| 171 """Display revision""" |
| 172 return self._RunGit(['rev-parse', 'HEAD']) |
| 173 |
170 def runhooks(self, options, args, file_list): | 174 def runhooks(self, options, args, file_list): |
171 self.status(options, args, file_list) | 175 self.status(options, args, file_list) |
172 | 176 |
173 def status(self, options, args, file_list): | 177 def status(self, options, args, file_list): |
174 """Display status information.""" | 178 """Display status information.""" |
175 if not os.path.isdir(self.checkout_path): | 179 if not os.path.isdir(self.checkout_path): |
176 print('\n________ couldn\'t run status in %s:\nThe directory ' | 180 print('\n________ couldn\'t run status in %s:\nThe directory ' |
177 'does not exist.' % checkout_path) | 181 'does not exist.' % checkout_path) |
178 else: | 182 else: |
179 merge_base = self._RunGit(['merge-base', 'HEAD', 'origin']) | 183 merge_base = self._RunGit(['merge-base', 'HEAD', 'origin']) |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 try: | 392 try: |
389 # svn revert is so broken we don't even use it. Using | 393 # svn revert is so broken we don't even use it. Using |
390 # "svn up --revision BASE" achieve the same effect. | 394 # "svn up --revision BASE" achieve the same effect. |
391 RunSVNAndGetFileList(options, ['update', '--revision', 'BASE'], path, | 395 RunSVNAndGetFileList(options, ['update', '--revision', 'BASE'], path, |
392 file_list) | 396 file_list) |
393 except OSError, e: | 397 except OSError, e: |
394 # Maybe the directory disapeared meanwhile. We don't want it to throw an | 398 # Maybe the directory disapeared meanwhile. We don't want it to throw an |
395 # exception. | 399 # exception. |
396 logging.error('Failed to update:\n%s' % str(e)) | 400 logging.error('Failed to update:\n%s' % str(e)) |
397 | 401 |
| 402 def revinfo(self, options, args, file_list): |
| 403 """Display revision""" |
| 404 return CaptureSVNHeadRevision(self.url) |
| 405 |
398 def runhooks(self, options, args, file_list): | 406 def runhooks(self, options, args, file_list): |
399 self.status(options, args, file_list) | 407 self.status(options, args, file_list) |
400 | 408 |
401 def status(self, options, args, file_list): | 409 def status(self, options, args, file_list): |
402 """Display status information.""" | 410 """Display status information.""" |
403 path = os.path.join(self._root_dir, self.relpath) | 411 path = os.path.join(self._root_dir, self.relpath) |
404 command = ['status'] | 412 command = ['status'] |
405 command.extend(args) | 413 command.extend(args) |
406 if not os.path.isdir(path): | 414 if not os.path.isdir(path): |
407 # svn status won't work if the directory doesn't exist. | 415 # svn status won't work if the directory doesn't exist. |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 # Col 3 | 777 # Col 3 |
770 if wc_status[0].getAttribute('copied') == 'true': | 778 if wc_status[0].getAttribute('copied') == 'true': |
771 statuses[3] = '+' | 779 statuses[3] = '+' |
772 # Col 4 | 780 # Col 4 |
773 if wc_status[0].getAttribute('switched') == 'true': | 781 if wc_status[0].getAttribute('switched') == 'true': |
774 statuses[4] = 'S' | 782 statuses[4] = 'S' |
775 # TODO(maruel): Col 5 and 6 | 783 # TODO(maruel): Col 5 and 6 |
776 item = (''.join(statuses), file) | 784 item = (''.join(statuses), file) |
777 results.append(item) | 785 results.append(item) |
778 return results | 786 return results |
OLD | NEW |