| 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)
|
| +
|
| 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:
|
|
|