Index: gclient.py |
=================================================================== |
--- gclient.py (revision 15777) |
+++ gclient.py (working copy) |
@@ -475,7 +475,7 @@ |
# SVN utils: |
-def RunSVN(options, args, in_directory): |
+def RunSVN(args, in_directory): |
"""Runs svn, sending output to stdout. |
Args: |
@@ -491,7 +491,7 @@ |
SubprocessCall(c, in_directory, options.stdout) |
-def CaptureSVN(options, args, in_directory): |
+def CaptureSVN(args, in_directory=None, print_error=True): |
"""Runs svn, capturing output sent to stdout as a string. |
Args: |
@@ -508,8 +508,14 @@ |
# the svn.exe executable, but shell=True makes subprocess on Linux fail |
# when it's called with a list because it only tries to execute the |
# first string ("svn"). |
- return subprocess.Popen(c, cwd=in_directory, shell=(sys.platform == 'win32'), |
- stdout=subprocess.PIPE).communicate()[0] |
+ stderr = None |
+ if print_error: |
+ stderr = subprocess.PIPE |
+ return subprocess.Popen(c, |
+ cwd=in_directory, |
+ shell=(sys.platform == 'win32'), |
+ stdout=subprocess.PIPE, |
+ stderr=stderr).communicate()[0] |
def RunSVNAndGetFileList(options, args, in_directory, file_list): |
@@ -556,7 +562,7 @@ |
pattern=pattern, capture_list=file_list) |
-def CaptureSVNInfo(options, relpath, in_directory): |
+def CaptureSVNInfo(relpath, in_directory=None, print_error=True): |
"""Returns a dictionary from the svn info output for the given file. |
Args: |
@@ -564,7 +570,8 @@ |
the directory given by in_directory. |
in_directory: The directory where svn is to be run. |
""" |
- dom = ParseXML(CaptureSVN(options, ["info", "--xml", relpath], in_directory)) |
+ output = CaptureSVN(["info", "--xml", relpath], in_directory, print_error) |
+ dom = ParseXML(output) |
result = {} |
if dom: |
def C(item, f): |
@@ -592,13 +599,13 @@ |
return result |
-def CaptureSVNHeadRevision(options, url): |
+def CaptureSVNHeadRevision(url): |
"""Get the head revision of a SVN repository. |
Returns: |
Int head revision |
""" |
- info = CaptureSVN(options, ["info", "--xml", url], os.getcwd()) |
+ info = CaptureSVN(["info", "--xml", url], os.getcwd()) |
dom = xml.dom.minidom.parseString(info) |
return int(dom.getElementsByTagName('entry')[0].getAttribute('revision')) |
@@ -617,7 +624,7 @@ |
self.path) |
-def CaptureSVNStatus(options, path): |
+def CaptureSVNStatus(path): |
"""Runs 'svn status' on an existing path. |
Args: |
@@ -626,7 +633,7 @@ |
Returns: |
An array of FileStatus corresponding to the emulated output of 'svn status' |
version 1.5.""" |
- dom = ParseXML(CaptureSVN(options, ["status", "--xml"], path)) |
+ dom = ParseXML(CaptureSVN(["status", "--xml"], path)) |
results = [] |
if dom: |
# /status/target/entry/(wc-status|commit|author|date) |
@@ -728,13 +735,13 @@ |
"""Cleanup working copy.""" |
command = ['cleanup'] |
command.extend(args) |
- RunSVN(options, command, os.path.join(self._root_dir, self.relpath)) |
+ RunSVN(command, os.path.join(self._root_dir, self.relpath)) |
def diff(self, options, args, file_list): |
# NOTE: This function does not currently modify file_list. |
command = ['diff'] |
command.extend(args) |
- RunSVN(options, command, os.path.join(self._root_dir, self.relpath)) |
+ RunSVN(command, os.path.join(self._root_dir, self.relpath)) |
def update(self, options, args, file_list): |
"""Runs SCM to update or transparently checkout the working copy. |
@@ -780,19 +787,18 @@ |
return |
# Get the existing scm url and the revision number of the current checkout. |
- from_info = CaptureSVNInfo(options, |
- os.path.join(self._root_dir, self.relpath, '.'), |
+ from_info = CaptureSVNInfo(os.path.join(self._root_dir, self.relpath, '.'), |
'.') |
if options.manually_grab_svn_rev: |
# Retrieve the current HEAD version because svn is slow at null updates. |
if not revision: |
- from_info_live = CaptureSVNInfo(options, from_info['URL'], '.') |
+ from_info_live = CaptureSVNInfo(from_info['URL'], '.') |
revision = int(from_info_live['Revision']) |
rev_str = ' at %d' % revision |
if from_info['URL'] != components[0]: |
- to_info = CaptureSVNInfo(options, url, '.') |
+ to_info = CaptureSVNInfo(url, '.') |
if from_info['Repository Root'] != to_info['Repository Root']: |
# We have different roots, so check if we can switch --relocate. |
# Subversion only permits this if the repository UUIDs match. |
@@ -814,7 +820,7 @@ |
from_info['Repository Root'], |
to_info['Repository Root'], |
self.relpath] |
- RunSVN(options, command, self._root_dir) |
+ RunSVN(command, self._root_dir) |
from_info['URL'] = from_info['URL'].replace( |
from_info['Repository Root'], |
to_info['Repository Root']) |
@@ -847,7 +853,7 @@ |
# Don't reuse the args. |
return self.update(options, [], file_list) |
- files = CaptureSVNStatus(options, path) |
+ files = CaptureSVNStatus(path) |
# Batch the command. |
files_to_revert = [] |
for file in files: |
@@ -876,7 +882,7 @@ |
for p in files_to_revert: |
# Some shell have issues with command lines too long. |
if accumulated_length and accumulated_length + len(p) > 3072: |
- RunSVN(options, command + accumulated_paths, |
+ RunSVN(command + accumulated_paths, |
os.path.join(self._root_dir, self.relpath)) |
accumulated_paths = [] |
accumulated_length = 0 |
@@ -884,7 +890,7 @@ |
accumulated_paths.append(p) |
accumulated_length += len(p) |
if accumulated_paths: |
- RunSVN(options, command + accumulated_paths, |
+ RunSVN(command + accumulated_paths, |
os.path.join(self._root_dir, self.relpath)) |
def status(self, options, args, file_list): |
@@ -1325,7 +1331,7 @@ |
for entry in prev_entries: |
e_dir = os.path.join(self._root_dir, entry) |
if entry not in entries and self._options.path_exists(e_dir): |
- if CaptureSVNStatus(self._options, e_dir): |
+ if CaptureSVNStatus(e_dir): |
# There are modified files in this entry |
entries[entry] = None # Keep warning until removed. |
print >> self._options.stdout, ( |
@@ -1383,8 +1389,7 @@ |
return (original_url, int(revision_overrides[name])) |
else: |
# TODO(aharper): SVN/SCMWrapper cleanup (non-local commandset) |
- return (original_url, CaptureSVNHeadRevision(self._options, |
- original_url)) |
+ return (original_url, CaptureSVNHeadRevision(original_url)) |
else: |
url_components = original_url.split("@") |
if revision_overrides.has_key(name): |
@@ -1401,7 +1406,6 @@ |
entries[name] = "%s@%d" % (url, rev) |
# TODO(aharper): SVN/SCMWrapper cleanup (non-local commandset) |
entries_deps_content[name] = CaptureSVN( |
- self._options, |
["cat", |
"%s/%s@%d" % (url, |
self._options.deps_file, |
@@ -1429,7 +1433,6 @@ |
deps_parent_url_components = deps_parent_url.split("@") |
# TODO(aharper): SVN/SCMWrapper cleanup (non-local commandset) |
deps_parent_content = CaptureSVN( |
- self._options, |
["cat", |
"%s/%s@%s" % (deps_parent_url_components[0], |
self._options.deps_file, |