Chromium Code Reviews| Index: build/util/lastchange.py |
| diff --git a/build/util/lastchange.py b/build/util/lastchange.py |
| index 1846babac8d76c87976b562726a337c98da399f9..ef20797af237d5eca5765368ac0f8d15707b9c68 100755 |
| --- a/build/util/lastchange.py |
| +++ b/build/util/lastchange.py |
| @@ -14,40 +14,56 @@ import subprocess |
| import sys |
| -def FetchSVNRevision(command): |
| +def FetchSVNRevision(command, directory): |
| """ |
| - Fetch the Subversion revision for the local tree. |
| + Fetch the Subversion branch and revision for the a given directory |
| + by running the given command (e.g. "svn info"). |
| Errors are swallowed. |
| + |
| + Returns: |
| + a tuple of (url, revision) or None on error. |
| """ |
| try: |
| proc = subprocess.Popen(command, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| + cwd=directory, |
| shell=(sys.platform=='win32')) |
| except OSError: |
| # command is apparently either not installed or not executable. |
| return None |
| if proc: |
| - svn_re = re.compile('^Revision:\s+(\d+)', re.M) |
| - match = svn_re.search(proc.stdout.read()) |
| - if match: |
| - return match.group(1) |
| + output = proc.stdout.read() |
| + match = re.search('^Revision:\s+(\d+)', output, re.M) |
| + if not match: |
| + return None |
| + revision = match.group(1) |
| + |
| + match = re.search('^Repository Root:\s+(\S+)', output, re.M) |
| + if not match: |
| + return None |
| + url = match.group(1) |
| + |
| + return (url, revision) |
|
tony
2011/01/21 21:18:24
Down with returning tuples! Can you make this a s
|
| + |
| return None |
| -def FetchChange(default_lastchange): |
| +def FetchChange(default_lastchange, directory=None): |
| """ |
| - Returns the last change, from some appropriate revision control system. |
| + Returns the last change (in the form of a branch, revision tuple), |
| + from some appropriate revision control system. |
| """ |
| - change = FetchSVNRevision(['svn', 'info']) |
| + change = FetchSVNRevision(['svn', 'info'], directory) |
| if not change and sys.platform in ('linux2',): |
| - change = FetchSVNRevision(['git', 'svn', 'info']) |
| + change = FetchSVNRevision(['git', 'svn', 'info'], directory) |
| if not change: |
| if default_lastchange and os.path.exists(default_lastchange): |
| - change = open(default_lastchange, 'r').read().strip() |
| + revision = open(default_lastchange, 'r').read().strip() |
| + change = (None, revision) |
| else: |
| - change = '0' |
| + change = ('', '0') |
| return change |
| @@ -90,12 +106,12 @@ def main(argv=None): |
| parser.print_help() |
| sys.exit(2) |
| - change = FetchChange(opts.default_lastchange) |
| + url, revision = FetchChange(opts.default_lastchange) |
| if opts.revision_only: |
| - print change |
| + print revision |
| else: |
| - contents = "LASTCHANGE=%s\n" % change |
| + contents = "LASTCHANGE=%s\n" % revision |
| if out_file: |
| WriteIfChanged(out_file, contents) |
| else: |