Reviewers: tandrii(chromium),
Message:
PTAL
Description:
Refactor version increment in release scripts.
BUG=chromium:451975
[email protected]
NOTRY=true
LOG=n
Please review this at https://codereview.chromium.org/870903003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+38, -32 lines):
M tools/release/common_includes.py
M tools/release/push_to_candidates.py
M tools/release/test_scripts.py
Index: tools/release/common_includes.py
diff --git a/tools/release/common_includes.py
b/tools/release/common_includes.py
index
40c47b2871e40faac6b75daa8cbfe6ddfd30efc1..65cf8572bb8f204d715786816febda64a41d1016
100644
--- a/tools/release/common_includes.py
+++ b/tools/release/common_includes.py
@@ -47,6 +47,7 @@ from git_recipes import GitFailedException
CHANGELOG_FILE = "ChangeLog"
VERSION_FILE = os.path.join("src", "version.cc")
+VERSION_RE = re.compile(r"^\d+\.\d+\.\d+(?:\.\d+)?$")
# V8 base directory.
V8_BASE = os.path.dirname(
@@ -380,7 +381,7 @@ class Step(GitRecipesMixin):
def __getitem__(self, key):
# Convenience method to allow direct [] access on step classes for
# manipulating the backed state dict.
- return self._state[key]
+ return self._state.get(key)
def __setitem__(self, key, value):
# Convenience method to allow direct [] access on step classes for
@@ -589,6 +590,20 @@ class Step(GitRecipesMixin):
except GitFailedException:
self.WaitForResolvingConflicts(patch_file)
+ def GetLatestVersion(self):
+ # Use cached version if available.
+ if self["latest_version"]:
+ return self["latest_version"]
+
+ # Make sure tags are fetched.
+ self.Git("fetch origin +refs/tags/*:refs/tags/*")
+ version_parts = sorted(filter(VERSION_RE.match, self.vc.GetTags()),
+ key=SortingKey, reverse=True)[0].split(".")
+ if len(version_parts) == 3:
+ version_parts.append("0")
+ self["latest_version"] = ".".join(version_parts)
+ return self["latest_version"]
+
def FindLastCandidatesPush(
self, parent_hash="", branch="", include_patches=False):
push_pattern = "^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*"
Index: tools/release/push_to_candidates.py
diff --git a/tools/release/push_to_candidates.py
b/tools/release/push_to_candidates.py
index
9da0fde1a0a62a6132f8f37abad9f1f1eb032448..6f71a5b851ede917dcd2447f4ae2c2b90a1e5a1e
100755
--- a/tools/release/push_to_candidates.py
+++ b/tools/release/push_to_candidates.py
@@ -45,9 +45,6 @@ class Preparation(Step):
self.InitialEnvironmentChecks(self.default_cwd)
self.CommonPrepare()
- # Make sure tags are fetched.
- self.Git("fetch origin +refs/tags/*:refs/tags/*")
-
if(self["current_branch"] == self.Config("CANDIDATESBRANCH")
or self["current_branch"] == self.Config("BRANCHNAME")):
print "Warning: Script started on branch %s" % self["current_branch"]
@@ -114,37 +111,29 @@ class DetectLastPush(Step):
self["last_push_master"] = last_push_master
-class GetLatestVersion(Step):
- MESSAGE = "Get latest version from tags."
+class IncrementVersion(Step):
+ MESSAGE = "Increment version number."
def RunStep(self):
- versions = sorted(filter(VERSION_RE.match, self.vc.GetTags()),
- key=SortingKey, reverse=True)
- self.StoreVersion(versions[0], "latest_")
- self["latest_version"] = self.ArrayToVersion("latest_")
+ latest_version = self.GetLatestVersion()
# The version file on master can be used to bump up major/minor at
# branch time.
self.GitCheckoutFile(VERSION_FILE, self.vc.RemoteMasterBranch())
self.ReadAndPersistVersion("master_")
- self["master_version"] = self.ArrayToVersion("master_")
-
- if SortingKey(self["master_version"]) >
SortingKey(self["latest_version"]):
- self["latest_version"] = self["master_version"]
- self.StoreVersion(self["latest_version"], "latest_")
-
- print "Determined latest version %s" % self["latest_version"]
+ master_version = self.ArrayToVersion("master_")
+ # Use the highest version from master or from tags to determine the new
+ # version.
+ authoritative_version = sorted(
+ [master_version, latest_version], key=SortingKey)[1]
+ self.StoreVersion(authoritative_version, "authoritative_")
-class IncrementVersion(Step):
- MESSAGE = "Increment version number."
-
- def RunStep(self):
# Variables prefixed with 'new_' contain the new version numbers for
the
# ongoing candidates push.
- self["new_major"] = self["latest_major"]
- self["new_minor"] = self["latest_minor"]
- self["new_build"] = str(int(self["latest_build"]) + 1)
+ self["new_major"] = self["authoritative_major"]
+ self["new_minor"] = self["authoritative_minor"]
+ self["new_build"] = str(int(self["authoritative_build"]) + 1)
# Make sure patch level is 0 in a new push.
self["new_patch"] = "0"
@@ -153,6 +142,8 @@ class IncrementVersion(Step):
self["new_minor"],
self["new_build"])
+ print ("Incremented version to %s" % self["version"])
+
class PrepareChangeLog(Step):
MESSAGE = "Prepare raw ChangeLog entry."
@@ -429,7 +420,6 @@ class PushToCandidates(ScriptsBase):
FreshBranch,
PreparePushRevision,
DetectLastPush,
- GetLatestVersion,
IncrementVersion,
PrepareChangeLog,
EditChangeLog,
Index: tools/release/test_scripts.py
diff --git a/tools/release/test_scripts.py b/tools/release/test_scripts.py
index
d6378f1dd2631545aff505a38f912fa205492646..e4df4f5b5d32e4f63b64b6df4e2108abce861b43
100644
--- a/tools/release/test_scripts.py
+++ b/tools/release/test_scripts.py
@@ -623,19 +623,20 @@ test_tag
# Version as tag: 3.22.4.0. Version on master: 3.22.6.
# Make sure that the latest version is 3.22.6.0.
- def testGetLatestVersion(self):
+ def testIncrementVersion(self):
self.Expect([
+ Cmd("git fetch origin +refs/tags/*:refs/tags/*", ""),
Cmd("git tag", self.TAGS),
Cmd("git checkout -f origin/master -- src/version.cc",
"", cb=lambda: self.WriteFakeVersionFile(22, 6)),
])
- self.RunStep(PushToCandidates, GetLatestVersion)
+ self.RunStep(PushToCandidates, IncrementVersion)
- self.assertEquals("3", self._state["latest_major"])
- self.assertEquals("22", self._state["latest_minor"])
- self.assertEquals("6", self._state["latest_build"])
- self.assertEquals("0", self._state["latest_patch"])
+ self.assertEquals("3", self._state["new_major"])
+ self.assertEquals("22", self._state["new_minor"])
+ self.assertEquals("7", self._state["new_build"])
+ self.assertEquals("0", self._state["new_patch"])
def _TestSquashCommits(self, change_log, expected_msg):
TEST_CONFIG["CHANGELOG_ENTRY_FILE"] = self.MakeEmptyTempFile()
@@ -778,7 +779,6 @@ Performance and stability improvements on all
platforms."""
Cmd("git status -s -uno", ""),
Cmd("git status -s -b -uno", "## some_branch\n"),
Cmd("git fetch", ""),
- Cmd("git fetch origin +refs/tags/*:refs/tags/*", ""),
Cmd("git branch", " branch1\n* branch2\n"),
Cmd("git branch", " branch1\n* branch2\n"),
Cmd(("git new-branch %s --upstream origin/master" %
@@ -794,6 +794,7 @@ Performance and stability improvements on all
platforms."""
expectations += [
Cmd("git log -1 --format=%s hash2",
"Version 3.4.5 (based on abc3)\n"),
+ Cmd("git fetch origin +refs/tags/*:refs/tags/*", ""),
Cmd("git tag", self.TAGS),
Cmd("git checkout -f origin/master -- src/version.cc",
"", cb=self.WriteFakeVersionFile),
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.