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 |