| OLD | NEW |
| 1 # coding=utf8 | 1 # coding=utf8 |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 """Manages a project checkout. | 5 """Manages a project checkout. |
| 6 | 6 |
| 7 Includes support for svn, git-svn and git. | 7 Includes support for svn, git-svn and git. |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 from __future__ import with_statement | 10 from __future__ import with_statement |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 try: | 116 try: |
| 117 stdout = '' | 117 stdout = '' |
| 118 filename = os.path.join(self.project_path, p.filename) | 118 filename = os.path.join(self.project_path, p.filename) |
| 119 if p.is_delete: | 119 if p.is_delete: |
| 120 os.remove(filename) | 120 os.remove(filename) |
| 121 else: | 121 else: |
| 122 dirname = os.path.dirname(p.filename) | 122 dirname = os.path.dirname(p.filename) |
| 123 full_dir = os.path.join(self.project_path, dirname) | 123 full_dir = os.path.join(self.project_path, dirname) |
| 124 if dirname and not os.path.isdir(full_dir): | 124 if dirname and not os.path.isdir(full_dir): |
| 125 os.makedirs(full_dir) | 125 os.makedirs(full_dir) |
| 126 |
| 127 filepath = os.path.join(self.project_path, p.filename) |
| 126 if p.is_binary: | 128 if p.is_binary: |
| 127 with open(os.path.join(filename), 'wb') as f: | 129 with open(filepath, 'wb') as f: |
| 128 f.write(p.get()) | 130 f.write(p.get()) |
| 129 else: | 131 else: |
| 130 if p.diff_hunks: | 132 if p.diff_hunks: |
| 131 stdout = subprocess2.check_output( | 133 stdout = subprocess2.check_output( |
| 132 ['patch', '-p%s' % p.patchlevel], | 134 ['patch', '-p%s' % p.patchlevel], |
| 133 stdin=p.get(), | 135 stdin=p.get(), |
| 134 cwd=self.project_path) | 136 cwd=self.project_path) |
| 135 elif p.is_new: | 137 elif p.is_new and not os.path.exists(filepath): |
| 136 # There is only a header. Just create the file. | 138 # There is only a header. Just create the file. |
| 137 open(os.path.join(self.project_path, p.filename), 'w').close() | 139 open(filepath, 'w').close() |
| 138 for post in post_processor: | 140 for post in post_processor: |
| 139 post(self, p) | 141 post(self, p) |
| 140 except OSError, e: | 142 except OSError, e: |
| 141 raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) | 143 raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
| 142 except subprocess.CalledProcessError, e: | 144 except subprocess.CalledProcessError, e: |
| 143 raise PatchApplicationFailed( | 145 raise PatchApplicationFailed( |
| 144 p.filename, '%s%s' % (stdout, getattr(e, 'stdout', None))) | 146 p.filename, '%s%s' % (stdout, getattr(e, 'stdout', None))) |
| 145 | 147 |
| 146 def commit(self, commit_message, user): | 148 def commit(self, commit_message, user): |
| 147 """Stubbed out.""" | 149 """Stubbed out.""" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 dirs_to_create = [] | 271 dirs_to_create = [] |
| 270 while (dirname and | 272 while (dirname and |
| 271 not os.path.isdir(os.path.join(self.project_path, dirname))): | 273 not os.path.isdir(os.path.join(self.project_path, dirname))): |
| 272 dirs_to_create.append(dirname) | 274 dirs_to_create.append(dirname) |
| 273 dirname = os.path.dirname(dirname) | 275 dirname = os.path.dirname(dirname) |
| 274 for dir_to_create in reversed(dirs_to_create): | 276 for dir_to_create in reversed(dirs_to_create): |
| 275 os.mkdir(os.path.join(self.project_path, dir_to_create)) | 277 os.mkdir(os.path.join(self.project_path, dir_to_create)) |
| 276 stdout += self._check_output_svn( | 278 stdout += self._check_output_svn( |
| 277 ['add', dir_to_create, '--force'], credentials=False) | 279 ['add', dir_to_create, '--force'], credentials=False) |
| 278 | 280 |
| 281 filepath = os.path.join(self.project_path, p.filename) |
| 279 if p.is_binary: | 282 if p.is_binary: |
| 280 with open(os.path.join(self.project_path, p.filename), 'wb') as f: | 283 with open(filepath, 'wb') as f: |
| 281 f.write(p.get()) | 284 f.write(p.get()) |
| 282 else: | 285 else: |
| 283 if p.diff_hunks: | 286 if p.diff_hunks: |
| 284 cmd = ['patch', '-p%s' % p.patchlevel, '--forward', '--force'] | 287 cmd = ['patch', '-p%s' % p.patchlevel, '--forward', '--force'] |
| 285 stdout += subprocess2.check_output( | 288 stdout += subprocess2.check_output( |
| 286 cmd, stdin=p.get(), cwd=self.project_path) | 289 cmd, stdin=p.get(), cwd=self.project_path) |
| 287 elif p.is_new: | 290 elif p.is_new and not os.path.exists(filepath): |
| 288 # There is only a header. Just create the file. | 291 # There is only a header. Just create the file if it doesn't |
| 289 open(os.path.join(self.project_path, p.filename), 'w').close() | 292 # exist. |
| 293 open(filepath, 'w').close() |
| 290 if p.is_new: | 294 if p.is_new: |
| 291 stdout += self._check_output_svn( | 295 stdout += self._check_output_svn( |
| 292 ['add', p.filename, '--force'], credentials=False) | 296 ['add', p.filename, '--force'], credentials=False) |
| 293 for prop in p.svn_properties: | 297 for prop in p.svn_properties: |
| 294 stdout += self._check_output_svn( | 298 stdout += self._check_output_svn( |
| 295 ['propset', prop[0], prop[1], p.filename], credentials=False) | 299 ['propset', prop[0], prop[1], p.filename], credentials=False) |
| 296 for prop, values in self.svn_config.auto_props.iteritems(): | 300 for prop, values in self.svn_config.auto_props.iteritems(): |
| 297 if fnmatch.fnmatch(p.filename, prop): | 301 if fnmatch.fnmatch(p.filename, prop): |
| 298 for value in values.split(';'): | 302 for value in values.split(';'): |
| 299 if '=' not in value: | 303 if '=' not in value: |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 user, message)) | 671 user, message)) |
| 668 return 'FAKE' | 672 return 'FAKE' |
| 669 | 673 |
| 670 @property | 674 @property |
| 671 def project_name(self): | 675 def project_name(self): |
| 672 return self.checkout.project_name | 676 return self.checkout.project_name |
| 673 | 677 |
| 674 @property | 678 @property |
| 675 def project_path(self): | 679 def project_path(self): |
| 676 return self.checkout.project_path | 680 return self.checkout.project_path |
| OLD | NEW |