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

Unified Diff: gclient.py

Issue 115264: Deprecate gcl.GetSVNStatus() for gclient.CaptureSVNStatus() and fix some stat... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 11 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gcl.py ('k') | tests/gcl_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient.py
===================================================================
--- gclient.py (revision 15891)
+++ gclient.py (working copy)
@@ -612,30 +612,40 @@
return int(dom.getElementsByTagName('entry')[0].getAttribute('revision'))
-class FileStatus:
- def __init__(self, path, text_status, props, lock, history):
- self.path = path
- self.text_status = text_status
- self.props = props
- self.lock = lock
- self.history = history
+def CaptureSVNStatus(files):
+ """Returns the svn 1.5 svn status emulated output.
- def __str__(self):
- # Emulate svn status 1.5 output.
- return (self.text_status + self.props + self.lock + self.history + ' ' +
- self.path)
+ @file can be a string (one file) or a list of files.
+ Returns an array of (status, file) tupple."""
+ command = ["status", "--xml"]
+ if files is None:
+ pass
+ elif isinstance(files, basestring):
+ command.append(files)
+ else:
+ command.extend(files)
-def CaptureSVNStatus(path):
- """Runs 'svn status' on an existing path.
-
- Args:
- path: The directory to run svn status.
-
- Returns:
- An array of FileStatus corresponding to the emulated output of 'svn status'
- version 1.5."""
- dom = ParseXML(CaptureSVN(["status", "--xml"], path))
+ status_letter = {
+ None: ' ',
+ '': ' ',
+ 'added': 'A',
+ 'conflicted': 'C',
+ 'deleted': 'D',
+ 'external': 'X',
+ 'ignored': 'I',
+ 'incomplete': '!',
+ 'merged': 'G',
+ 'missing': '!',
+ 'modified': 'M',
+ 'none': ' ',
+ 'normal': ' ',
+ 'obstructed': '~',
+ 'replaced': 'R',
+ 'unversioned': '?',
+ # TODO(maruel): Find the corresponding strings for X, ~
+ }
+ dom = ParseXML(CaptureSVN(command))
results = []
if dom:
# /status/target/entry/(wc-status|commit|author|date)
@@ -649,18 +659,8 @@
statuses = [' ' for i in range(7)]
# Col 0
xml_item_status = wc_status[0].getAttribute('item')
- if xml_item_status == 'unversioned':
- statuses[0] = '?'
- elif xml_item_status == 'modified':
- statuses[0] = 'M'
- elif xml_item_status == 'added':
- statuses[0] = 'A'
- elif xml_item_status == 'conflicted':
- statuses[0] = 'C'
- elif xml_item_status in ('incomplete', 'missing'):
- statuses[0] = '!'
- elif not xml_item_status:
- pass
+ if xml_item_status in status_letter:
+ statuses[0] = status_letter[xml_item_status]
else:
raise Exception('Unknown item status "%s"; please implement me!' %
xml_item_status)
@@ -682,8 +682,7 @@
# Col 3
if wc_status[0].getAttribute('copied') == 'true':
statuses[3] = '+'
- item = FileStatus(file, statuses[0], statuses[1], statuses[2],
- statuses[3])
+ item = (''.join(statuses), file)
results.append(item)
return results
@@ -856,10 +855,10 @@
# Batch the command.
files_to_revert = []
for file in files:
- file_path = os.path.join(path, file.path)
+ file_path = os.path.join(path, file[1])
print(file_path)
# Unversioned file or unexpected unversioned file.
- if file.text_status in ('?', '~'):
+ if file[0][0] in ('?', '~'):
# Remove extraneous file. Also remove unexpected unversioned
# directories. svn won't touch them but we want to delete these.
file_list.append(file_path)
@@ -868,10 +867,10 @@
except EnvironmentError:
RemoveDirectory(file_path)
- if file.text_status != '?':
+ if file[0][0] != '?':
# For any other status, svn revert will work.
file_list.append(file_path)
- files_to_revert.append(file.path)
+ files_to_revert.append(file[1])
# Revert them all at once.
if files_to_revert:
« no previous file with comments | « gcl.py ('k') | tests/gcl_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698