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

Side by Side Diff: build/util/lastchange.py

Issue 6354014: webkit: expose webkit branch and revision number in about pages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: strip Created 9 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | webkit/build/webkit_version.py » ('j') | webkit/build/webkit_version.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 lastchange.py -- Chromium revision fetching utility. 7 lastchange.py -- Chromium revision fetching utility.
8 """ 8 """
9 9
10 import optparse 10 import optparse
11 import os 11 import os
12 import re
13 import subprocess 12 import subprocess
14 import sys 13 import sys
15 14
15 class VersionInfo(object):
16 def __init__(self, url, root, revision):
17 self.url = url
18 self.root = root
19 self.revision = revision
16 20
17 def FetchSVNRevision(command): 21
22 def FetchSVNRevision(command, directory):
18 """ 23 """
19 Fetch the Subversion revision for the local tree. 24 Fetch the Subversion branch and revision for the a given directory
25 by running the given command (e.g. "svn info").
20 26
21 Errors are swallowed. 27 Errors are swallowed.
28
29 Returns:
30 a tuple of (url, revision) or None on error.
tony 2011/01/21 22:59:58 Nit: comment is out of date
22 """ 31 """
23 try: 32 try:
24 proc = subprocess.Popen(command, 33 proc = subprocess.Popen(command,
25 stdout=subprocess.PIPE, 34 stdout=subprocess.PIPE,
26 stderr=subprocess.PIPE, 35 stderr=subprocess.PIPE,
36 cwd=directory,
27 shell=(sys.platform=='win32')) 37 shell=(sys.platform=='win32'))
28 except OSError: 38 except OSError:
29 # command is apparently either not installed or not executable. 39 # command is apparently either not installed or not executable.
30 return None 40 return None
31 if proc: 41 if not proc:
32 svn_re = re.compile('^Revision:\s+(\d+)', re.M) 42 return None
33 match = svn_re.search(proc.stdout.read()) 43
34 if match: 44 attrs = {}
35 return match.group(1) 45 for line in proc.stdout.read().strip().split('\n'):
36 return None 46 if not line:
47 continue
48 key, val = line.split(': ', 1)
49 attrs[key] = val
50
51 try:
52 url = attrs['URL']
53 root = attrs['Repository Root']
54 revision = attrs['Revision']
55 except KeyError:
56 return None
57
58 return VersionInfo(url, root, revision)
37 59
38 60
39 def FetchChange(default_lastchange): 61 def FetchVersionInfo(default_lastchange, directory=None):
40 """ 62 """
41 Returns the last change, from some appropriate revision control system. 63 Returns the last change (in the form of a branch, revision tuple),
64 from some appropriate revision control system.
42 """ 65 """
43 change = FetchSVNRevision(['svn', 'info']) 66 version_info = FetchSVNRevision(['svn', 'info'], directory)
44 if not change and sys.platform in ('linux2',): 67 if not version_info and sys.platform in ('linux2',):
45 change = FetchSVNRevision(['git', 'svn', 'info']) 68 version_info = FetchSVNRevision(['git', 'svn', 'info'], directory)
46 if not change: 69 if not version_info:
47 if default_lastchange and os.path.exists(default_lastchange): 70 if default_lastchange and os.path.exists(default_lastchange):
48 change = open(default_lastchange, 'r').read().strip() 71 revision = open(default_lastchange, 'r').read().strip()
72 version_info = VersionInfo(None, None, revision)
49 else: 73 else:
50 change = '0' 74 version_info = VersionInfo('', '', '0')
51 return change 75 return version_info
52 76
53 77
54 def WriteIfChanged(file_name, contents): 78 def WriteIfChanged(file_name, contents):
55 """ 79 """
56 Writes the specified contents to the specified file_name 80 Writes the specified contents to the specified file_name
57 iff the contents are different than the current contents. 81 iff the contents are different than the current contents.
58 """ 82 """
59 try: 83 try:
60 old_contents = open(file_name, 'r').read() 84 old_contents = open(file_name, 'r').read()
61 except EnvironmentError: 85 except EnvironmentError:
(...skipping 21 matching lines...) Expand all
83 out_file = opts.output 107 out_file = opts.output
84 108
85 while len(args) and out_file is None: 109 while len(args) and out_file is None:
86 if out_file is None: 110 if out_file is None:
87 out_file = args.pop(0) 111 out_file = args.pop(0)
88 if args: 112 if args:
89 sys.stderr.write('Unexpected arguments: %r\n\n' % args) 113 sys.stderr.write('Unexpected arguments: %r\n\n' % args)
90 parser.print_help() 114 parser.print_help()
91 sys.exit(2) 115 sys.exit(2)
92 116
93 change = FetchChange(opts.default_lastchange) 117 version_info = FetchVersionInfo(opts.default_lastchange)
94 118
95 if opts.revision_only: 119 if opts.revision_only:
96 print change 120 print version_info.revision
97 else: 121 else:
98 contents = "LASTCHANGE=%s\n" % change 122 contents = "LASTCHANGE=%s\n" % version_info.revision
99 if out_file: 123 if out_file:
100 WriteIfChanged(out_file, contents) 124 WriteIfChanged(out_file, contents)
101 else: 125 else:
102 sys.stdout.write(contents) 126 sys.stdout.write(contents)
103 127
104 return 0 128 return 0
105 129
106 130
107 if __name__ == '__main__': 131 if __name__ == '__main__':
108 sys.exit(main()) 132 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | webkit/build/webkit_version.py » ('j') | webkit/build/webkit_version.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698