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

Unified Diff: build/util/lastchange.py

Issue 7104106: Unify the version string to be displayed on "About Chromium" dialog. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Reuse the original lastchange.py as much as possible Created 9 years, 6 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 | « no previous file | chrome/app/nibs/About.xib » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/util/lastchange.py
diff --git a/build/util/lastchange.py b/build/util/lastchange.py
index 4d7a1fe808d4a2707c0378ddef54d3f41a267144..31821ce7d3b9e07c50c71d9556658a7e430f4a14 100755
--- a/build/util/lastchange.py
+++ b/build/util/lastchange.py
@@ -102,98 +102,80 @@ def FetchGitRevision(directory):
return None
-def IsGitSVN(directory):
+def FetchGitSVNRoot(directory):
"""
- Checks whether git-svn has been set up.
+ Fetch the SVN root repository through Git.
Errors are swallowed.
Returns:
- whether git-svn has been set up.
+ the SVN root repository or 'git-svn' on error.
"""
- # To test whether git-svn has been set up, query the config for any
- # svn-related configuration. This command exits with an error code
- # if there aren't any matches, so ignore its output.
- proc = RunGitCommand(directory, ['config', '--get-regexp', '^svn'])
+ proc = RunGitCommand(directory,
+ ['config', '--get-regexp', '^svn-remote.svn.url$'])
if proc:
- return (proc.wait() == 0)
- return False
-
-
-def FetchGitSVNURL(directory):
- """
- Fetch URL of SVN repository bound to git.
-
- Errors are swallowed.
-
- Returns:
- SVN URL.
- """
- if IsGitSVN(directory):
- proc = RunGitCommand(directory, ['svn', 'info', '--url'])
- if proc:
- output = proc.communicate()[0].strip()
- if proc.returncode == 0:
- match = re.search(r'^\w+://.*$', output, re.M)
- if match:
- return match.group(0)
- return ''
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0 and output:
+ # Zero return code implies presence of requested configuration variable.
+ # Its value is second (last) field of output.
+ match = re.search(r'\S+$', output)
+ if match:
+ return match.group(0)
+ return 'git-svn'
-def FetchGitSVNRoot(directory):
+def FetchGitSVNURLAndRevision(directory):
"""
- Fetch root of SVN repository bound to git.
+ Fetch the SVN URL and revision through Git.
Errors are swallowed.
Returns:
- SVN root repository.
- """
- if IsGitSVN(directory):
- git_command = ['config', '--get-regexp', '^svn-remote.svn.url$']
- proc = RunGitCommand(directory, git_command)
- if proc:
- output = proc.communicate()[0].strip()
- if proc.returncode == 0:
- # Zero return code implies presence of requested configuration variable.
- # Its value is second (last) field of output.
- match = re.search(r'\S+$', output)
- if match:
- return match.group(0)
- return ''
-
-
-def LookupGitSVNRevision(directory, depth):
- """
- Fetch the Git-SVN identifier for the local tree.
- Parses first |depth| commit messages.
-
- Errors are swallowed.
+ the SVN URL and revision.
"""
- if not IsGitSVN(directory):
- return None
- git_re = re.compile(r'^\s*git-svn-id:\s+(\S+)@(\d+)')
- proc = RunGitCommand(directory, ['log', '-' + str(depth)])
+ proc = RunGitCommand(directory, ['log', '-1',
+ '--grep=git-svn-id', '--format=%b'])
if proc:
- for line in proc.stdout:
- match = git_re.match(line)
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0 and output:
+ # Extract the latest SVN revision and the SVN URL.
+ # The target line is the last "git-svn-id: ..." line like this:
+ #
+ # git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85528 0039d316....
+ match = re.search(r'.*git-svn-id:\s*([^@]*)@([0-9]+)', output, re.DOTALL)
if match:
- id = match.group(2)
- if id:
- proc.stdout.close() # Cut pipe for fast exit.
- return id
- return None
+ return match.group(1), match.group(2)
+ return None, None
def IsGitSVNDirty(directory):
"""
- Checks whether our git-svn tree contains clean trunk or some branch.
+ Checks whether our git-svn tree contains clean trunk or any local changes.
Errors are swallowed.
"""
- # For git branches the last commit message is either
- # some local commit or a merge.
- return LookupGitSVNRevision(directory, 1) is None
+ proc = RunGitCommand(directory, ['log', '-1'])
+ if proc:
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0 and output:
+ # Check if there are any local commits.
+ # We check if the "git-svn-id: ..." line appears or not
+ # after "Review URL: ..." line, like this:
+ #
+ # Review URL: http://codereview.chromium.org/7057025
+ # git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85528 0039d316...
+ match = re.search(r'^Review URL:', output, re.MULTILINE)
Denis Lagno 2011/06/17 11:01:27 since now you extract last match of 'git-svn-id' t
haraken1 2011/06/17 13:45:08 Done.
+ if match:
+ match = re.search(r'^git-svn-id:\s*([^@]*)@([0-9]+)',
+ output[match.end():], re.MULTILINE)
+ if match:
+ # Check if there are any local uncommitted changes.
+ proc = RunGitCommand(directory, ['checkout'])
+ if proc:
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0 and not output:
+ return False
+ return True
def FetchGitSVNRevision(directory):
@@ -202,15 +184,13 @@ def FetchGitSVNRevision(directory):
Errors are swallowed.
"""
- # We assume that at least first 999 commit messages contain svn evidence.
- revision = LookupGitSVNRevision(directory, 999)
- if not revision:
- return None
- if IsGitSVNDirty(directory):
- revision = revision + '-dirty'
- url = FetchGitSVNURL(directory)
- root = FetchGitSVNRoot(directory)
- return VersionInfo(url, root, revision)
+ url, revision = FetchGitSVNURLAndRevision(directory)
+ if url and revision:
+ root = FetchGitSVNRoot(directory)
+ if IsGitSVNDirty(directory):
+ revision = revision + '-dirty'
+ return VersionInfo(url, root, revision)
+ return None
def FetchVersionInfo(default_lastchange, directory=None):
« no previous file with comments | « no previous file | chrome/app/nibs/About.xib » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698