| 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,
|
|
|