aboutsummaryrefslogtreecommitdiff
path: root/setup_chromeos.py
diff options
context:
space:
mode:
authorLuis Lozano <llozano@chromium.org>2013-03-15 14:44:13 -0700
committerChromeBot <chrome-bot@google.com>2013-03-15 15:51:37 -0700
commitf81680c018729fd4499e1e200d04b48c4b90127c (patch)
tree940608da8374604b82edfdb2d7df55d065f05d4c /setup_chromeos.py
parent2296ee0b914aba5bba07becab4ff68884ce9b8a5 (diff)
downloadtoolchain-utils-f81680c018729fd4499e1e200d04b48c4b90127c.tar.gz
Cleaned up directory after copy of tools from perforce directory
Got rid of stale copies of some tools like "crosperf" and moved all files under v14 directory (that came from perforce) into the top directory. BUG=None TEST=None Change-Id: I408d17a36ceb00e74db71403d2351fd466a14f8e Reviewed-on: https://gerrit-int.chromium.org/33887 Tested-by: Luis Lozano <llozano@chromium.org> Reviewed-by: Yunlian Jiang <yunlian@google.com> Commit-Queue: Luis Lozano <llozano@chromium.org>
Diffstat (limited to 'setup_chromeos.py')
-rwxr-xr-xsetup_chromeos.py254
1 files changed, 254 insertions, 0 deletions
diff --git a/setup_chromeos.py b/setup_chromeos.py
new file mode 100755
index 00000000..7d3c22da
--- /dev/null
+++ b/setup_chromeos.py
@@ -0,0 +1,254 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Script to checkout the ChromeOS source.
+
+This script sets up the ChromeOS source in the given directory, matching a
+particular release of ChromeOS.
+"""
+
+__author__ = "raymes@google.com (Raymes Khoury)"
+
+from datetime import datetime
+import getpass
+import optparse
+import os
+import pickle
+import sys
+import tempfile
+import time
+from utils import command_executer
+from utils import logger
+
+GCLIENT_FILE = """solutions = [
+ { "name" : "CHROME_DEPS",
+ "url" :
+ "svn://svn.chromium.org/chrome-internal/trunk/tools/buildspec/releases/%s",
+ "custom_deps" : {
+ "src/third_party/WebKit/LayoutTests": None,
+ "src-pdf": None,
+ "src/pdf": None,
+ },
+ "safesync_url": "",
+ },
+]
+"""
+
+# List of stable versions used for common team image
+# Sheriff must update this list when a new common version becomes available
+COMMON_VERSIONS = "/home/mobiletc-prebuild/common_images/common_list.txt"
+
+def Usage(parser):
+ parser.print_help()
+ sys.exit(0)
+
+
+def TimeToVersion(my_time, versions_git):
+ """Convert timestamp to version number."""
+ cur_time = time.mktime(time.gmtime())
+ des_time = float(my_time)
+ if cur_time - des_time > 7000000:
+ logger.GetLogger().LogFatal("The time you specify is too early.")
+ temp = tempfile.mkdtemp()
+ commands = ["cd {0}".format(temp), "git clone {0}".format(versions_git),
+ "cd manifest-versions", "git checkout -f $(git rev-list" +
+ " --max-count=1 --before={0} origin/master)".format(my_time)]
+ cmd_executer = command_executer.GetCommandExecuter()
+ ret = cmd_executer.RunCommands(commands)
+ if ret:
+ logger.GetLogger().LogFatal("Failed to checkout manifest-versions.")
+ path = os.path.realpath("{0}/manifest-versions/LKGM/lkgm.xml".format(temp))
+ pp = path.split("/")
+ small = os.path.basename(path).split(".xml")[0]
+ version = pp[-2] + "." + small
+ commands = ["rm -rf {0}".format(temp)]
+ cmd_executer.RunCommands(commands)
+ return version
+
+# Get version spec file, either from "paladin" or "buildspec" directory.
+def GetVersionSpecFile(version, versions_git):
+ temp = tempfile.mkdtemp()
+ commands = ["cd {0}".format(temp), \
+ "git clone {0} versions".format(versions_git)]
+ cmd_executer = command_executer.GetCommandExecuter()
+ ret = cmd_executer.RunCommands(commands)
+ err_msg = None
+ if ret:
+ err_msg = "Failed to checkout versions_git - {0}".format(versions_git)
+ ret = None
+ else:
+ v, m = version.split(".", 1)
+ paladin_spec = "paladin/buildspecs/{0}/{1}.xml".format(v, m)
+ generic_spec = "buildspecs/{0}/{1}.xml".format(v, m)
+ paladin_path = "{0}/versions/{1}".format(temp, paladin_spec)
+ generic_path = "{0}/versions/{1}".format(temp, generic_spec)
+ if os.path.exists(paladin_path):
+ ret = paladin_spec
+ elif os.path.exists(generic_path):
+ ret = generic_spec
+ else:
+ err_msg = "No spec found for version {0}".format(version)
+ ret = None
+ # Fall through to clean up.
+
+ commands = ["rm -rf {0}".format(temp)]
+ cmd_executer.RunCommands(commands)
+ if err_msg:
+ logger.GetLogger().LogFatal(err_msg)
+ return ret
+
+def TimeToCommonVersion(timestamp):
+ """Convert timestamp to common image version."""
+ tdt = datetime.fromtimestamp(float(timestamp))
+ with open(COMMON_VERSIONS, "r") as f:
+ common_list = pickle.load(f)
+ for sv in common_list:
+ sdt = datetime.strptime(sv["date"], "%Y-%m-%d %H:%M:%S.%f")
+ if tdt >= sdt:
+ return "%s.%s" % (sv["chrome_major_version"], sv["chromeos_version"])
+ # should never reach here
+ logger.GetLogger().LogFatal("No common version for timestamp")
+ return None
+
+
+def Main(argv):
+ """Checkout the ChromeOS source."""
+ parser = optparse.OptionParser()
+ parser.add_option("--dir", dest="directory",
+ help="Target directory for ChromeOS installation.")
+ parser.add_option("--version", dest="version", default="latest_lkgm",
+ help="""ChromeOS version. Can be:
+(1) A release version in the format: 'X.X.X.X'
+(2) 'top' for top of trunk
+(3) 'latest_lkgm' for the latest lkgm version
+(4) 'lkgm' for the lkgm release before timestamp
+(5) 'latest_common' for the latest team common stable version
+(6) 'common' for the team common stable version before timestamp
+Default is 'latest_lkgm'.""")
+ parser.add_option("--timestamp", dest="timestamp", default=None,
+ help="""Timestamps in epoch format. It will check out the
+latest LKGM or the latest COMMON version of ChromeOS before the timestamp.
+Use in combination with --version=latest or --version=common. Use
+'date -d <date string> +%s' to find epoch time""")
+ parser.add_option("--minilayout", dest="minilayout", default=False,
+ action="store_true",
+ help="""Whether to checkout the minilayout
+(smaller checkout).'""")
+ parser.add_option("--jobs", "-j", dest="jobs", default="1",
+ help="Number of repo sync threads to use.")
+ parser.add_option("--public", "-p", dest="public", default=False,
+ action="store_true",
+ help="Use the public checkout instead of the private one.")
+
+ options = parser.parse_args(argv)[0]
+
+ if not options.version:
+ parser.print_help()
+ logger.GetLogger().LogFatal("No version specified.")
+ else:
+ version = options.version.strip()
+
+ if not options.timestamp:
+ timestamp = ""
+ else:
+ timestamp = options.timestamp.strip()
+ if version not in ("lkgm", "common"):
+ parser.print_help()
+ logger.GetLogger().LogFatal("timestamp option only applies for "
+ "versions \"lkgm\" or \"common\"")
+
+ if not options.directory:
+ parser.print_help()
+ logger.GetLogger().LogFatal("No directory specified.")
+
+ directory = options.directory.strip()
+
+ if options.public:
+ manifest_repo = "http://git.chromium.org/chromiumos/manifest.git"
+ versions_repo = "http://git.chromium.org/chromiumos/manifest-versions.git"
+ else:
+ manifest_repo = (
+ "ssh://gerrit-int.chromium.org:29419/chromeos/manifest-internal.git")
+ versions_repo = (
+ "ssh://gerrit-int.chromium.org:29419/chromeos/manifest-versions.git")
+
+ if version == "top":
+ init = "repo init -u %s" % manifest_repo
+ elif version == "latest_lkgm":
+ version = TimeToVersion(time.mktime(time.gmtime()), versions_repo)
+ version, manifest = version.split(".", 1)
+ logger.GetLogger().LogOutput("found version %s.%s for latest LKGM" % (
+ version, manifest))
+ init = ("repo init -u %s -m paladin/buildspecs/%s/%s.xml" % (
+ versions_repo, version, manifest))
+ elif version == "lkgm":
+ if not timestamp:
+ parser.print_help()
+ logger.GetLogger().LogFatal("No timestamp specified for version=lkgm")
+ version = TimeToVersion(timestamp, versions_repo)
+ version, manifest = version.split(".", 1)
+ logger.GetLogger().LogOutput("found version %s.%s for LKGM at timestamp %s"
+ % (version, manifest, timestamp))
+ init = ("repo init -u %s -m paladin/buildspecs/%s/%s.xml" % (
+ versions_repo, version, manifest))
+ elif version == "latest_common":
+ version = TimeToCommonVersion(time.mktime(time.gmtime()))
+ version, manifest = version.split(".", 1)
+ logger.GetLogger().LogOutput("found version %s.%s for latest Common image" %
+ (version, manifest))
+ init = ("repo init -u %s -m buildspecs/%s/%s.xml" % (
+ versions_repo, version, manifest))
+ elif version == "common":
+ if not timestamp:
+ parser.print_help()
+ logger.GetLogger().LogFatal("No timestamp specified for version=lkgm")
+ version = TimeToCommonVersion(timestamp)
+ version, manifest = version.split(".", 1)
+ logger.GetLogger().LogOutput("found version %s.%s for latest common image "
+ "at timestamp %s" % (
+ version, manifest, timestamp))
+ init = ("repo init -u %s -m buildspecs/%s/%s.xml" % (
+ versions_repo, version, manifest))
+ else:
+ # user specified a specific version number
+ version_spec_file = GetVersionSpecFile(version, versions_repo)
+ if not version_spec_file:
+ return 1
+ init = "repo init -u %s -m %s" % (versions_repo, version_spec_file)
+
+ if options.minilayout:
+ init += " -g minilayout"
+
+ init += " --repo-url=http://git.chromium.org/external/repo.git"
+
+ commands = ["mkdir -p %s" % directory,
+ "cd %s" % directory,
+ init,
+ # crosbug#31837 - "Sources need to be world-readable to properly
+ # function inside the chroot"
+ "umask 022 && repo sync -j %s" % options.jobs]
+ cmd_executer = command_executer.GetCommandExecuter()
+ ret = cmd_executer.RunCommands(commands)
+ if ret:
+ return ret
+
+ # Setup svn credentials for use inside the chroot
+ if getpass.getuser() == "mobiletc-prebuild":
+ chromium_username = "raymes"
+ else:
+ chromium_username = "$USER"
+
+ return cmd_executer.RunCommand(
+ "svn ls --config-option config:auth:password-stores= "
+ "--config-option "
+ "servers:global:store-plaintext-passwords=yes "
+ "--username " + chromium_username + "@google.com "
+ "svn://svn.chromium.org/leapfrog-internal "
+ "svn://svn.chromium.org/chrome "
+ "svn://svn.chromium.org/chrome-internal > /dev/null")
+
+
+if __name__ == "__main__":
+ retval = Main(sys.argv)
+ sys.exit(retval)