Teach releases script to read bleeding_edge tags.

The command 'git svn log' does unfortunately not provide the tag-revision relation. We therefore use 'svn log' to retrieve it from the remote repository.

BUG=
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/421553002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22646 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
machenbach@chromium.org 2014-07-28 13:49:07 +00:00
parent afcfa7d2b7
commit e251f91f0c
2 changed files with 91 additions and 17 deletions

View File

@ -52,6 +52,11 @@ DEPS_RE = re.compile(r'^\s*(?:"v8_revision": "'
'|"http\:\/\/v8\.googlecode\.com\/svn\/trunk@)'
'([0-9]+)".*$', re.M)
# Expression to pick tag and revision for bleeding edge tags. To be used with
# output of 'svn log'.
BLEEDING_EDGE_TAGS_RE = re.compile(
r"A \/tags\/([^\s]+) \(from \/branches\/bleeding_edge\:(\d+)\)")
def SortBranches(branches):
"""Sort branches with version number names."""
@ -140,24 +145,14 @@ class RetrieveV8Releases(Step):
patches = "-%s" % patches
return patches
def GetRelease(self, git_hash, branch):
self.ReadAndPersistVersion()
base_version = [self["major"], self["minor"], self["build"]]
version = ".".join(base_version)
body = self.GitLog(n=1, format="%B", git_hash=git_hash)
patches = ""
if self["patch"] != "0":
version += ".%s" % self["patch"]
patches = self.GetMergedPatches(body)
title = self.GitLog(n=1, format="%s", git_hash=git_hash)
def GetReleaseDict(
self, git_hash, bleeding_edge_rev, branch, version, patches, cl_body):
revision = self.GitSVNFindSVNRev(git_hash)
return {
# The SVN revision on the branch.
"revision": revision,
# The SVN revision on bleeding edge (only for newer trunk pushes).
"bleeding_edge": self.GetBleedingEdgeFromPush(title),
"bleeding_edge": bleeding_edge_rev,
# The branch name.
"branch": branch,
# The version for displaying in the form 3.26.3 or 3.26.3.12.
@ -172,14 +167,45 @@ class RetrieveV8Releases(Step):
"chromium_branch": "",
# Link to the CL on code review. Trunk pushes are not uploaded, so this
# field will be populated below with the recent roll CL link.
"review_link": MatchSafe(REVIEW_LINK_RE.search(body)),
"review_link": MatchSafe(REVIEW_LINK_RE.search(cl_body)),
# Link to the commit message on google code.
"revision_link": ("https://code.google.com/p/v8/source/detail?r=%s"
% revision),
}, self["patch"]
}
def GetRelease(self, git_hash, branch):
self.ReadAndPersistVersion()
base_version = [self["major"], self["minor"], self["build"]]
version = ".".join(base_version)
body = self.GitLog(n=1, format="%B", git_hash=git_hash)
patches = ""
if self["patch"] != "0":
version += ".%s" % self["patch"]
patches = self.GetMergedPatches(body)
title = self.GitLog(n=1, format="%s", git_hash=git_hash)
return self.GetReleaseDict(
git_hash, self.GetBleedingEdgeFromPush(title), branch, version,
patches, body), self["patch"]
def GetReleasesFromBleedingEdge(self):
tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20")
releases = []
for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text):
git_hash = self.GitSVNFindGitHash(revision)
# Add bleeding edge release. It does not contain patches or a code
# review link, as tags are not uploaded.
releases.append(self.GetReleaseDict(
git_hash, revision, "bleeding_edge", tag, "", ""))
return releases
def GetReleasesFromBranch(self, branch):
self.GitReset("svn/%s" % branch)
if branch == 'bleeding_edge':
return self.GetReleasesFromBleedingEdge()
releases = []
try:
for git_hash in self.GitLog(format="%H").splitlines():
@ -225,14 +251,16 @@ class RetrieveV8Releases(Step):
releases += self.GetReleasesFromBranch(stable)
releases += self.GetReleasesFromBranch(beta)
releases += self.GetReleasesFromBranch("trunk")
releases += self.GetReleasesFromBranch("bleeding_edge")
elif self._options.branch == 'all': # pragma: no cover
# Retrieve the full release history.
for branch in branches:
releases += self.GetReleasesFromBranch(branch)
releases += self.GetReleasesFromBranch("trunk")
releases += self.GetReleasesFromBranch("bleeding_edge")
else: # pragma: no cover
# Retrieve history for a specified branch.
assert self._options.branch in branches + ["trunk"]
assert self._options.branch in branches + ["trunk", "bleeding_edge"]
releases += self.GetReleasesFromBranch(self._options.branch)
self["releases"] = sorted(releases,

View File

@ -1167,6 +1167,33 @@ LOG=N
MergeToBranch(TEST_CONFIG, self).Run(args)
def testReleases(self):
tag_response_text = """
------------------------------------------------------------------------
r22631 | author1@chromium.org | 2014-07-28 02:05:29 +0200 (Mon, 28 Jul 2014)
Changed paths:
A /tags/3.28.43 (from /trunk:22630)
Tagging version 3.28.43
------------------------------------------------------------------------
r22629 | author2@chromium.org | 2014-07-26 05:09:29 +0200 (Sat, 26 Jul 2014)
Changed paths:
A /tags/3.28.41 (from /branches/bleeding_edge:22626)
Tagging version 3.28.41
------------------------------------------------------------------------
r22556 | author3@chromium.org | 2014-07-23 13:31:59 +0200 (Wed, 23 Jul 2014)
Changed paths:
A /tags/3.27.34.7 (from /branches/3.27:22555)
Tagging version 3.27.34.7
------------------------------------------------------------------------
r22627 | author4@chromium.org | 2014-07-26 01:39:15 +0200 (Sat, 26 Jul 2014)
Changed paths:
A /tags/3.28.40 (from /branches/bleeding_edge:22624)
Tagging version 3.28.40
------------------------------------------------------------------------
"""
json_output = self.MakeEmptyTempFile()
csv_output = self.MakeEmptyTempFile()
TEST_CONFIG[VERSION_FILE] = self.MakeEmptyTempFile()
@ -1230,6 +1257,15 @@ LOG=N
Git("log -1 --format=%ci hash6", ""),
Git("checkout -f HEAD -- %s" % TEST_CONFIG[VERSION_FILE], "",
cb=ResetVersion(22, 5)),
Git("reset --hard svn/bleeding_edge", ""),
Git("log https://v8.googlecode.com/svn/tags -v --limit 20",
tag_response_text),
Git("svn find-rev r22626", "hash_22626"),
Git("svn find-rev hash_22626", "22626"),
Git("log -1 --format=%ci hash_22626", "01:23"),
Git("svn find-rev r22624", "hash_22624"),
Git("svn find-rev hash_22624", "22624"),
Git("log -1 --format=%ci hash_22624", "02:34"),
Git("status -s -uno", ""),
Git("checkout -f master", ""),
Git("pull", ""),
@ -1260,12 +1296,22 @@ LOG=N
Releases(TEST_CONFIG, self).Run(args)
# Check expected output.
csv = ("3.22.3,trunk,345,4567,\r\n"
csv = ("3.28.41,bleeding_edge,22626,,\r\n"
"3.28.40,bleeding_edge,22624,,\r\n"
"3.22.3,trunk,345,4567,\r\n"
"3.21.2,3.21,123,,\r\n"
"3.3.1.1,3.3,234,,12\r\n")
self.assertEquals(csv, FileToText(csv_output))
expected_json = [
{"bleeding_edge": "22626", "patches_merged": "", "version": "3.28.41",
"chromium_revision": "", "branch": "bleeding_edge", "revision": "22626",
"review_link": "", "date": "01:23", "chromium_branch": "",
"revision_link": "https://code.google.com/p/v8/source/detail?r=22626"},
{"bleeding_edge": "22624", "patches_merged": "", "version": "3.28.40",
"chromium_revision": "", "branch": "bleeding_edge", "revision": "22624",
"review_link": "", "date": "02:34", "chromium_branch": "",
"revision_link": "https://code.google.com/p/v8/source/detail?r=22624"},
{"bleeding_edge": "", "patches_merged": "", "version": "3.22.3",
"chromium_revision": "4567", "branch": "trunk", "revision": "345",
"review_link": "", "date": "", "chromium_branch": "7",