Add an option to checkout the tree at a given timestamp
Test: use the --timestamp option and check the version it generates.
Also use --version=latest to check out the version it uses.
PRESUBMIT=passed
R=asharif
APPROVED=asharif
DELTA=49 (45 added, 2 deleted, 2 changed)
OCL=63008-p2
RCL=63033-p2
RDATE=2012/09/26 09:18:09
P4 change: 42793622
diff --git a/v14/setup_chromeos.py b/v14/setup_chromeos.py
index fb62436..2b252ab 100755
--- a/v14/setup_chromeos.py
+++ b/v14/setup_chromeos.py
@@ -12,7 +12,10 @@
import getpass
import optparse
+import os
import sys
+import tempfile
+import time
from utils import command_executer
from utils import logger
@@ -35,6 +38,29 @@
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:
+ return None
+ 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
+
+
def Main(argv):
"""Checkout the ChromeOS source."""
parser = optparse.OptionParser()
@@ -44,6 +70,10 @@
help="""ChromeOS version. Can be: (1) A release version
in the format: 'X.X.X.X' (2) 'latest' for the latest release version or (3)
'top' for top of trunk. Default is 'latest'""")
+ parser.add_option("--timestamp", dest="timestamp", default=None,
+ help="""Timestamps in epoch format. It will check out the
+latest LKGM version of ChromeOS before the timestamp. It will also overide
+the version option.""")
parser.add_option("--minilayout", dest="minilayout", default=False,
action="store_true",
help="""Whether to checkout the minilayout
@@ -62,6 +92,11 @@
else:
version = options.version.strip()
+ if not options.timestamp:
+ timestamp = ""
+ else:
+ timestamp = options.timestamp.strip()
+
if not options.directory:
parser.print_help()
logger.GetLogger().LogFatal("No directory specified.")
@@ -77,14 +112,22 @@
versions_repo = (
"ssh://gerrit-int.chromium.org:29419/chromeos/manifest-versions.git")
- if version in ["top", "latest"]:
+ if timestamp:
+ my_version = TimeToVersion(timestamp, versions_repo)
+ if my_version:
+ version = my_version
+
+ if version == "top":
init = "repo init -u %s" % manifest_repo
- if options.minilayout:
- init += " -m minilayout.xml"
else:
+ if version =="latest":
+ version = TimeToVersion(time.mktime(time.gmtime()), versions_repo)
version, manifest = version.split(".", 1)
init = ("repo init -u %s -m paladin/buildspecs/%s/%s.xml" % (
- versions_repo, version, manifest))
+ versions_repo, version, manifest))
+ if options.minilayout:
+ init += " -m minilayout.xml"
+
init += " --repo-url=http://git.chromium.org/external/repo.git"
commands = ["mkdir -p %s" % directory,