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

Unified Diff: build/util/lastchange.py

Issue 118192: Fetch last change (revision) info in a separate action that can run... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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 | « build/util/build_util.gyp ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/util/lastchange.py
===================================================================
--- build/util/lastchange.py (revision 0)
+++ build/util/lastchange.py (revision 0)
@@ -0,0 +1,121 @@
+#!/usr/bin/env python
+# Copyright (c) 2009 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+lastchange.py -- Chromium revision fetching utility.
+"""
+
+import optparse
+import os
+import re
+import subprocess
+import sys
+
+
+def svn_fetch_revision():
+ """
+ Fetch the Subversion revision for the local tree.
+
+ Errors are swallowed.
+ """
+ try:
+ p = subprocess.Popen(['svn', 'info'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ except OSError:
+ # 'svn' is apparently either not installed or not executable.
+ return None
+ revision = None
+ if p:
+ svn_re = re.compile('^Revision:\s+(\S+)$', re.M)
+ m = svn_re.search(p.stdout.read())
+ if m:
+ revision = m.group(1)
+ return revision
+
+
+def git_fetch_id():
+ """
+ Fetch the GIT identifier for the local tree.
+
+ Errors are swallowed.
+ """
+ try:
+ p = subprocess.Popen(['git', 'log', '-1'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ except OSError:
+ # 'git' is apparently either not installed or not executable.
+ return None
+ id = None
+ if p:
+ git_re = re.compile('^\s*git-svn-id:\s+(\S+)@(\d+)', re.M)
+ m = git_re.search(p.stdout.read())
+ if m:
+ id = m.group(1)
+ return id
+
+
+def fetch_change():
+ """
+ Returns the last change, from some appropriate revision control system.
+ """
+ change = svn_fetch_revision()
+ if not change and sys.platform in ('linux2',):
+ change = git_fetch_id()
+ if not change:
+ change = '0'
+ return change
+
+
+def write_if_changed(file_name, contents):
+ """
+ Writes the specified contents to the specified file_name
+ iff the contents are different than the current contents.
+ """
+ try:
+ old_contents = open(file_name, 'r').read()
+ except EnvironmentError:
+ pass
+ else:
+ if contents == old_contents:
+ return
+ os.unlink(file_name)
+ open(file_name, 'w').write(contents)
+
+
+def main(argv=None):
+ if argv is None:
+ argv = sys.argv
+
+ parser = optparse.OptionParser(usage="lastchange.py [-h] [[-o] FILE]")
+ parser.add_option("-o", "--output", metavar="FILE",
+ help="write last change to FILE")
+ opts, args = parser.parse_args(argv[1:])
+
+ out_file = opts.output
+
+ while len(args) and out_file is None:
+ if out_file is None:
+ out_file = args.pop(0)
+ if args:
+ sys.stderr.write('Unexpected arguments: %r\n\n' % args)
+ parser.print_help()
+ sys.exit(2)
+
+ change = fetch_change()
+
+ contents = "LASTCHANGE=%s\n" % change
+
+ if out_file:
+ write_if_changed(out_file, contents)
+ else:
+ sys.stdout.write(contents)
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())
Property changes on: build/util/lastchange.py
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « build/util/build_util.gyp ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698