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

Unified Diff: bin/cbuildbot.py

Issue 5689003: Add ability to store the manifest in the manifest directory. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Move manifest printing to func and deal with nit Created 10 years 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 | bin/cbuildbot_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/cbuildbot.py
diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py
index 8b44fdf2539105737e7d1470221c66f8849a61be..c332a50aae97c84b00705d07f6ff167daac9f520 100755
--- a/bin/cbuildbot.py
+++ b/bin/cbuildbot.py
@@ -25,6 +25,8 @@ _DEFAULT_RETRIES = 3
_PACKAGE_FILE = '%(buildroot)s/src/scripts/cbuildbot_package.list'
ARCHIVE_BASE = '/var/www/archive'
ARCHIVE_COUNT = 10
+PUBLIC_OVERLAY = '%(buildroot)s/src/third_party/chromiumos-overlay'
+PRIVATE_OVERLAY = '%(buildroot)s/src/private-overlays/chromeos-overlay'
# Currently, both the full buildbot and the preflight buildbot store their
# data in a variable named PORTAGE_BINHOST, but they're in different files.
@@ -35,6 +37,14 @@ _PREFLIGHT_BINHOST = 'PORTAGE_BINHOST'
# ======================== Utility functions ================================
+def _PrintFile(path):
+ """Prints out the contents of a file to stderr."""
+ file_handle = open(path)
+ print >> sys.stderr, file_handle.read()
+ file_handle.close()
+ sys.stderr.flush()
+
+
def MakeDir(path, parents=False):
"""Basic wrapper around os.mkdirs.
@@ -76,9 +86,6 @@ def RepoSync(buildroot, retries=_DEFAULT_RETRIES):
Warning('CBUILDBOT -- Retries exhausted')
raise
- # Output manifest
- RunCommand(['repo', 'manifest', '-r', '-o', '-'], cwd=buildroot)
-
# =========================== Command Helpers =================================
def _GetAllGitRepos(buildroot, debug=False):
@@ -278,6 +285,31 @@ def _WipeOldOutput(buildroot):
RunCommand(['rm', '-rf', 'src/build/images'], cwd=buildroot)
+def _GetChromeOSVersion(buildroot):
+ """Returns the tuple version of the Chrome OS version of the buildroot."""
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ version_cmd = './chromeos_version.sh'
+ output = RunCommand(version_cmd, cwd=cwd, redirect_stdout=True,
+ redirect_stderr=True)
+ version_re = re.compile('\s+CHROMEOS_VERSION_STRING='
+ '(\d+)\.(\d+)\.(\d+)\.(\w+)')
+ for line in output.splitlines():
+ match = version_re.match(line)
+ if match:
+ return match.group(1), match.group(2), match.group(3), match.group(4)
+
+ raise Exception('Chrome OS version not found.')
+
+
+def _GetManifestPath(buildroot):
+ """Returns the relative path that a manifest should be saved into."""
+ version_tuple = _GetChromeOSVersion(buildroot)
+ (major, minor, branch, patch) = version_tuple
+ relative_path = os.path.join('.'.join([major, minor]),
+ '%s.xml' % '.'.join(version_tuple))
+ return relative_path
+
+
# =========================== Main Commands ===================================
@@ -306,6 +338,36 @@ def _IncrementalCheckout(buildroot, retries=_DEFAULT_RETRIES):
RepoSync(buildroot, retries)
+def _DumpManifest(buildroot, url):
+ """Stores the manifest in the public | private overlay depending on url."""
+ public_overlay = PUBLIC_OVERLAY % {'buildroot': buildroot}
+ private_overlay = PRIVATE_OVERLAY % {'buildroot': buildroot}
+ if url.endswith('manifest-internal'):
+ overlay = PRIVATE_OVERLAY % {'buildroot': buildroot}
+ else:
+ overlay = PUBLIC_OVERLAY % {'buildroot': buildroot}
+
+ # Generate paths for manifests.
+ relative_path = _GetManifestPath(buildroot)
+ manifest_path = os.path.join(overlay, 'manifests', relative_path)
+ symlink_path = os.path.join(overlay, 'manifests', 'LATEST')
+ if not os.path.isdir(os.path.dirname(manifest_path)):
+ os.makedirs(os.path.dirname(manifest_path))
+
+ # Dump the manifest and create a symlink to it.
+ RunCommand(['repo', 'manifest', '-r', '-o', manifest_path], cwd=buildroot)
+ if os.path.exists(symlink_path):
+ os.unlink(symlink_path)
+
+ os.symlink(relative_path, symlink_path)
+
+ # Add it to git and print it to stderr.
+ RunCommand(['git', 'add', os.path.join('manifests', relative_path)],
+ cwd=overlay)
+ RunCommand(['git', 'add', os.path.join('manifests', 'LATEST')], cwd=overlay)
+ _PrintFile(manifest_path)
+
+
def _MakeChroot(buildroot):
"""Wrapper around make_chroot."""
cwd = os.path.join(buildroot, 'src', 'scripts')
@@ -527,8 +589,8 @@ def _ResolveOverlays(buildroot, overlays):
'public': Just the public overlay.
'both': Both the public and private overlays.
"""
- public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot
- private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot
+ public_overlay = PUBLIC_OVERLAY % {'buildroot': buildroot}
+ private_overlay = PRIVATE_OVERLAY % {'buildroot': buildroot}
if overlays == 'private':
paths = [private_overlay]
elif overlays == 'public':
@@ -657,6 +719,8 @@ def main():
if not os.path.isdir(path):
Die('Missing overlay: %s' % path)
+ _DumpManifest(buildroot, options.url)
+
if not os.path.isdir(chroot_path):
_MakeChroot(buildroot)
« no previous file with comments | « no previous file | bin/cbuildbot_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698