| 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)
|
|
|
|
|