Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: gclient_scm.py

Issue 208025: Fix gclient revert for external, switched and conflicted directories. (Closed)
Patch Set: Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gclient.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and 12 # See the License for the specific language governing permissions and
13 # limitations under the License. 13 # limitations under the License.
14 14
15 15
16 import logging
16 import os 17 import os
17 import re 18 import re
18 import subprocess 19 import subprocess
19 import sys 20 import sys
20 import xml.dom.minidom 21 import xml.dom.minidom
21 22
22 import gclient_utils 23 import gclient_utils
23 24
24 SVN_COMMAND = "svn" 25 SVN_COMMAND = "svn"
25 26
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 doesn't know about them. 212 doesn't know about them.
212 """ 213 """
213 path = os.path.join(self._root_dir, self.relpath) 214 path = os.path.join(self._root_dir, self.relpath)
214 if not os.path.isdir(path): 215 if not os.path.isdir(path):
215 # svn revert won't work if the directory doesn't exist. It needs to 216 # svn revert won't work if the directory doesn't exist. It needs to
216 # checkout instead. 217 # checkout instead.
217 print("\n_____ %s is missing, synching instead" % self.relpath) 218 print("\n_____ %s is missing, synching instead" % self.relpath)
218 # Don't reuse the args. 219 # Don't reuse the args.
219 return self.update(options, [], file_list) 220 return self.update(options, [], file_list)
220 221
221 files = CaptureSVNStatus(path)
222 # Batch the command. 222 # Batch the command.
223 files_to_revert = [] 223 files_to_revert = []
224 for file in files: 224 for file in CaptureSVNStatus(path):
225 file_path = os.path.join(path, file[1]) 225 file_path = os.path.join(path, file[1])
226 if file_path[0][0] == 'X':
227 # Ignore externals.
228 continue
229
226 print(file_path) 230 print(file_path)
227 # Unversioned file or unexpected unversioned file. 231 # Unversioned file, unexpected unversioned files, switched directories
228 if file[0][0] in ('?', '~'): 232 # or conflicted trees.
229 # Remove extraneous file. Also remove unexpected unversioned 233 if file[0][0] in ('?', '~') or file[0][4] == 'S' or file[0][6] == 'C':
230 # directories. svn won't touch them but we want to delete these. 234 # Remove then since svn revert won't touch them.
231 file_list.append(file_path)
232 try: 235 try:
236 # TODO(maruel): Look if it is a file or a directory.
237 logging.info('os.remove(%s)' % file_path)
233 os.remove(file_path) 238 os.remove(file_path)
234 except EnvironmentError: 239 except EnvironmentError:
240 logging.info('gclient_utils.RemoveDirectory(%s)' % file_path)
235 gclient_utils.RemoveDirectory(file_path) 241 gclient_utils.RemoveDirectory(file_path)
236 242
237 if file[0][0] != '?': 243 if file[0][0] != '?':
238 # For any other status, svn revert will work. 244 # For any other status, svn revert will work.
239 file_list.append(file_path) 245 file_list.append(file_path)
240 files_to_revert.append(file[1]) 246 files_to_revert.append(file[1])
241 247
242 # Revert them all at once. 248 # Revert them all at once.
243 if files_to_revert: 249 if files_to_revert:
244 accumulated_paths = [] 250 accumulated_paths = []
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 xml_props_status) 574 xml_props_status)
569 # Col 2 575 # Col 2
570 if wc_status[0].getAttribute('wc-locked') == 'true': 576 if wc_status[0].getAttribute('wc-locked') == 'true':
571 statuses[2] = 'L' 577 statuses[2] = 'L'
572 # Col 3 578 # Col 3
573 if wc_status[0].getAttribute('copied') == 'true': 579 if wc_status[0].getAttribute('copied') == 'true':
574 statuses[3] = '+' 580 statuses[3] = '+'
575 item = (''.join(statuses), file) 581 item = (''.join(statuses), file)
576 results.append(item) 582 results.append(item)
577 return results 583 return results
OLDNEW
« no previous file with comments | « gclient.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698