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

Side by Side Diff: bin/cbuildbot.py

Issue 3174021: Add a flag to pick up timestamp of commits and print information if found. (Closed) Base URL: ssh://git@chromiumos-git//crosutils.git
Patch Set: Created 10 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 import errno 7 import errno
8 import optparse 8 import optparse
9 import os 9 import os
10 import shutil 10 import shutil
11 import subprocess 11 import subprocess
12 import sys 12 import sys
13 13
14 from cbuildbot_config import config 14 from cbuildbot_config import config
15 15
16 _DEFAULT_RETRIES=3 16 _DEFAULT_RETRIES=3
17 17
18 # Utility functions 18 # Utility functions
19 19
20 def RunCommand(cmd, error_ok=False, error_message=None, exit_code=False, 20 def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
21 redirect_stdout=False, redirect_stderr=False, cwd=None, 21 exit_code=False, redirect_stdout=False, redirect_stderr=False,
22 input=None): 22 cwd=None, input=None):
23 # Print out the command before running. 23 # Print out the command before running.
24 print >>sys.stderr, "CBUILDBOT -- RunCommand:", ' '.join(cmd) 24 if print_cmd:
25 print >> sys.stderr, "CBUILDBOT -- RunCommand:", ' '.join(cmd)
25 if redirect_stdout: 26 if redirect_stdout:
26 stdout = subprocess.PIPE 27 stdout = subprocess.PIPE
27 else: 28 else:
28 stdout = None 29 stdout = None
29 if redirect_stderr: 30 if redirect_stderr:
30 stderr = subprocess.PIPE 31 stderr = subprocess.PIPE
31 else: 32 else:
32 stderr = None 33 stderr = None
33 if input: 34 if input:
34 stdin = subprocess.PIPE 35 stdin = subprocess.PIPE
35 else: 36 else:
36 stdin = None 37 stdin = None
37 proc = subprocess.Popen(cmd, cwd=cwd, stdin=stdin, 38 proc = subprocess.Popen(cmd, cwd=cwd, stdin=stdin,
38 stdout=stdout, stderr=stderr) 39 stdout=stdout, stderr=stderr)
39 (output, error) = proc.communicate(input) 40 (output, error) = proc.communicate(input)
40 if exit_code: 41 if exit_code:
41 return proc.returncode 42 return proc.returncode
42 if not error_ok and proc.returncode != 0: 43 if not error_ok and proc.returncode != 0:
43 raise Exception('Command "%s" failed.\n' % (' '.join(cmd)) + 44 raise Exception('Command "%s" failed.\n' % (' '.join(cmd)) +
44 (error_message or error or output or '')) 45 (error_message or error or output or ''))
45 return output 46 return output
46 47
47 def MakeDir(path, parents=False): 48 def MakeDir(path, parents=False):
48 try: 49 try:
49 os.makedirs(path) 50 os.makedirs(path)
50 except OSError,e: 51 except OSError, e:
51 if e.errno == errno.EEXIST and parents: 52 if e.errno == errno.EEXIST and parents:
52 pass 53 pass
53 else: 54 else:
54 raise 55 raise
55 56
56 def RepoSync(buildroot, retries=_DEFAULT_RETRIES): 57 def RepoSync(buildroot, retries=_DEFAULT_RETRIES):
57 while retries > 0: 58 while retries > 0:
58 try: 59 try:
59 RunCommand(['repo', 'sync'], cwd=buildroot) 60 RunCommand(['repo', 'sync'], cwd=buildroot)
60 retries = 0 61 retries = 0
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 94
94 def _SetupBoard(buildroot, board='x86-generic'): 95 def _SetupBoard(buildroot, board='x86-generic'):
95 cwd = os.path.join(buildroot, 'src', 'scripts') 96 cwd = os.path.join(buildroot, 'src', 'scripts')
96 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board], 97 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board],
97 cwd=cwd) 98 cwd=cwd)
98 99
99 def _Build(buildroot): 100 def _Build(buildroot):
100 cwd = os.path.join(buildroot, 'src', 'scripts') 101 cwd = os.path.join(buildroot, 'src', 'scripts')
101 RunCommand(['./build_packages'], cwd=cwd) 102 RunCommand(['./build_packages'], cwd=cwd)
102 103
103 def _UprevPackages(buildroot): 104 def _UprevAllPackages(buildroot):
104 cwd = os.path.join(buildroot, 'src', 'scripts') 105 cwd = os.path.join(buildroot, 'src', 'scripts')
105 RunCommand(['./enter_chroot.sh', '--', './cros_mark_all_as_stable', 106 RunCommand(['./enter_chroot.sh', '--', './cros_mark_all_as_stable',
106 '--tracking_branch="cros/master"'], 107 '--tracking_branch="cros/master"'],
107 cwd=cwd) 108 cwd=cwd)
108 109
110 def _UprevPackages(buildroot, revisionfile):
111 revisions = None
112 if (revision_file):
113 rev_file = revisionfile.open(revisionfile)
114 revisions = rev_file.read()
115 rev_file.close()
116
117 # Note: Revisions == "None" indicates a Force Build.
118 if revisions and revisions != 'None':
119 print 'CBUILDBOT - Revision list found %s' % revisions
120 print 'Revision list not yet propagating to build, marking all instead'
121
122 _UprevAllPackages(buildroot)
123
109 def _UprevCleanup(buildroot): 124 def _UprevCleanup(buildroot):
110 cwd = os.path.join(buildroot, 'src', 'scripts') 125 cwd = os.path.join(buildroot, 'src', 'scripts')
111 RunCommand(['./cros_mark_as_stable', '--srcroot=..', 126 RunCommand(['./cros_mark_as_stable', '--srcroot=..',
112 '--tracking_branch="cros/master"', 'clean'], 127 '--tracking_branch="cros/master"', 'clean'],
113 cwd=cwd) 128 cwd=cwd)
114 129
115 def _UprevPush(buildroot): 130 def _UprevPush(buildroot):
116 cwd = os.path.join(buildroot, 'src', 'scripts') 131 cwd = os.path.join(buildroot, 'src', 'scripts')
117 RunCommand(['./cros_mark_as_stable', '--srcroot=..', 132 RunCommand(['./cros_mark_as_stable', '--srcroot=..',
118 '--tracking_branch="cros/master"', 133 '--tracking_branch="cros/master"',
(...skipping 11 matching lines...) Expand all
130 return buildconfig 145 return buildconfig
131 146
132 def main(): 147 def main():
133 # Parse options 148 # Parse options
134 usage = "usage: %prog [options] cbuildbot_config" 149 usage = "usage: %prog [options] cbuildbot_config"
135 parser = optparse.OptionParser(usage=usage) 150 parser = optparse.OptionParser(usage=usage)
136 parser.add_option('-r', '--buildroot', 151 parser.add_option('-r', '--buildroot',
137 help='root directory where build occurs', default=".") 152 help='root directory where build occurs', default=".")
138 parser.add_option('-n', '--buildnumber', 153 parser.add_option('-n', '--buildnumber',
139 help='build number', type='int', default=0) 154 help='build number', type='int', default=0)
155 parser.add_option('-f', '--revisionfile',
156 help='file where new revisions are stored')
157 parser.add_option('--noclobber', action='store_false', dest='clobber',
158 default=True,
159 help='Disables clobbering the buildroot on failure')
140 (options, args) = parser.parse_args() 160 (options, args) = parser.parse_args()
141 161
142 buildroot = options.buildroot 162 buildroot = options.buildroot
163 revisionfile = options.revisionfile
164 clobber = options.clobber
165
143 if len(args) == 1: 166 if len(args) == 1:
144 buildconfig = _GetConfig(args[0]) 167 buildconfig = _GetConfig(args[0])
145 else: 168 else:
146 print >>sys.stderr, "Missing configuration description" 169 print >> sys.stderr, "Missing configuration description"
147 parser.print_usage() 170 parser.print_usage()
148 sys.exit(1) 171 sys.exit(1)
149 try: 172 try:
150 if not os.path.isdir(buildroot): 173 if not os.path.isdir(buildroot):
151 _FullCheckout(buildroot) 174 _FullCheckout(buildroot)
152 else: 175 else:
153 _IncrementalCheckout(buildroot) 176 _IncrementalCheckout(buildroot)
154 chroot_path = os.path.join(buildroot, 'chroot') 177 chroot_path = os.path.join(buildroot, 'chroot')
155 if not os.path.isdir(chroot_path): 178 if not os.path.isdir(chroot_path):
156 _MakeChroot(buildroot) 179 _MakeChroot(buildroot)
157 boardpath = os.path.join(chroot_path, 'build', buildconfig['board']) 180 boardpath = os.path.join(chroot_path, 'build', buildconfig['board'])
158 if not os.path.isdir(boardpath): 181 if not os.path.isdir(boardpath):
159 _SetupBoard(buildroot, board=buildconfig['board']) 182 _SetupBoard(buildroot, board=buildconfig['board'])
160 if buildconfig['uprev']: 183 if buildconfig['uprev']:
161 _UprevPackages(buildroot) 184 _UprevPackages(buildroot, revisionfile)
162 _Build(buildroot) 185 _Build(buildroot)
163 if buildconfig['uprev']: 186 if buildconfig['uprev']:
164 _UprevPush(buildroot) 187 _UprevPush(buildroot)
165 _UprevCleanup(buildroot) 188 _UprevCleanup(buildroot)
166 except: 189 except:
167 # something went wrong, cleanup (being paranoid) for next build 190 # something went wrong, cleanup (being paranoid) for next build
168 RunCommand(['sudo', 'rm', '-rf', buildroot]) 191 if clobber:
192 RunCommand(['sudo', 'rm', '-rf', buildroot], print_cmd=False)
169 raise 193 raise
170 194
171 if __name__ == '__main__': 195 if __name__ == '__main__':
172 main() 196 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698