Index: tools/push-to-trunk/auto_tag.py |
diff --git a/tools/push-to-trunk/auto_tag.py b/tools/push-to-trunk/auto_tag.py |
deleted file mode 100755 |
index a52a02869756f26131ee6ec45ae8ee73dc630f97..0000000000000000000000000000000000000000 |
--- a/tools/push-to-trunk/auto_tag.py |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2014 the V8 project authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import argparse |
-import sys |
- |
-from common_includes import * |
- |
- |
-class Preparation(Step): |
- MESSAGE = "Preparation." |
- |
- def RunStep(self): |
- # TODO(machenbach): Remove after the git switch. |
- if self.Config("PERSISTFILE_BASENAME") == "/tmp/v8-auto-tag-tempfile": |
- print "This script is disabled until after the v8 git migration." |
- return True |
- |
- self.CommonPrepare() |
- self.PrepareBranch() |
- self.GitCheckout("master") |
- self.vc.Pull() |
- |
- |
-class GetTags(Step): |
- MESSAGE = "Get all V8 tags." |
- |
- def RunStep(self): |
- self.GitCreateBranch(self._config["BRANCHNAME"]) |
- self["tags"] = self.vc.GetTags() |
- |
- |
-class GetOldestUntaggedVersion(Step): |
- MESSAGE = "Check if there's a version on bleeding edge without a tag." |
- |
- def RunStep(self): |
- tags = set(self["tags"]) |
- self["candidate"] = None |
- self["candidate_version"] = None |
- self["next"] = None |
- self["next_version"] = None |
- |
- # Iterate backwards through all automatic version updates. |
- for git_hash in self.GitLog( |
- format="%H", grep="\\[Auto\\-roll\\] Bump up version to").splitlines(): |
- |
- # Get the version. |
- if not self.GitCheckoutFileSafe(VERSION_FILE, git_hash): |
- continue |
- |
- self.ReadAndPersistVersion() |
- version = self.ArrayToVersion("") |
- |
- # Strip off trailing patch level (tags don't include tag level 0). |
- if version.endswith(".0"): |
- version = version[:-2] |
- |
- # Clean up checked-out version file. |
- self.GitCheckoutFileSafe(VERSION_FILE, "HEAD") |
- |
- if version in tags: |
- if self["candidate"]: |
- # Revision "git_hash" is tagged already and "candidate" was the next |
- # newer revision without a tag. |
- break |
- else: |
- print("Stop as %s is the latest version and it has been tagged." % |
- version) |
- self.CommonCleanup() |
- return True |
- else: |
- # This is the second oldest version without a tag. |
- self["next"] = self["candidate"] |
- self["next_version"] = self["candidate_version"] |
- |
- # This is the oldest version without a tag. |
- self["candidate"] = git_hash |
- self["candidate_version"] = version |
- |
- if not self["candidate"] or not self["candidate_version"]: |
- print "Nothing found to tag." |
- self.CommonCleanup() |
- return True |
- |
- print("Candidate for tagging is %s with version %s" % |
- (self["candidate"], self["candidate_version"])) |
- |
- |
-class GetLKGRs(Step): |
- MESSAGE = "Get the last lkgrs." |
- |
- def RunStep(self): |
- revision_url = "https://v8-status.appspot.com/revisions?format=json" |
- status_json = self.ReadURL(revision_url, wait_plan=[5, 20]) |
- self["lkgrs"] = [entry["revision"] |
- for entry in json.loads(status_json) if entry["status"]] |
- |
- |
-class CalculateTagRevision(Step): |
- MESSAGE = "Calculate the revision to tag." |
- |
- def LastLKGR(self, min_rev, max_rev): |
- """Finds the newest lkgr between min_rev (inclusive) and max_rev |
- (exclusive). |
- """ |
- for lkgr in self["lkgrs"]: |
- # LKGRs are reverse sorted. |
- if int(min_rev) <= int(lkgr) and int(lkgr) < int(max_rev): |
- return lkgr |
- return None |
- |
- def RunStep(self): |
- # Get the lkgr after the tag candidate and before the next tag candidate. |
- candidate_svn = self.vc.GitSvn(self["candidate"]) |
- if self["next"]: |
- next_svn = self.vc.GitSvn(self["next"]) |
- else: |
- # Don't include the version change commit itself if there is no upper |
- # limit yet. |
- candidate_svn = str(int(candidate_svn) + 1) |
- next_svn = sys.maxint |
- lkgr_svn = self.LastLKGR(candidate_svn, next_svn) |
- |
- if not lkgr_svn: |
- print "There is no lkgr since the candidate version yet." |
- self.CommonCleanup() |
- return True |
- |
- # Let's check if the lkgr is at least three hours old. |
- self["lkgr"] = self.vc.SvnGit(lkgr_svn) |
- if not self["lkgr"]: |
- print "Couldn't find git hash for lkgr %s" % lkgr_svn |
- self.CommonCleanup() |
- return True |
- |
- lkgr_utc_time = int(self.GitLog(n=1, format="%at", git_hash=self["lkgr"])) |
- current_utc_time = self._side_effect_handler.GetUTCStamp() |
- |
- if current_utc_time < lkgr_utc_time + 10800: |
- print "Candidate lkgr %s is too recent for tagging." % lkgr_svn |
- self.CommonCleanup() |
- return True |
- |
- print "Tagging revision %s with %s" % (lkgr_svn, self["candidate_version"]) |
- |
- |
-class MakeTag(Step): |
- MESSAGE = "Tag the version." |
- |
- def RunStep(self): |
- if not self._options.dry_run: |
- self.GitReset(self["lkgr"]) |
- # FIXME(machenbach): Make this work with the git repo. |
- self.vc.Tag(self["candidate_version"], |
- "svn/bleeding_edge", |
- "This won't work!") |
- |
- |
-class CleanUp(Step): |
- MESSAGE = "Clean up." |
- |
- def RunStep(self): |
- self.CommonCleanup() |
- |
- |
-class AutoTag(ScriptsBase): |
- def _PrepareOptions(self, parser): |
- parser.add_argument("--dry_run", help="Don't tag the new version.", |
- default=False, action="store_true") |
- |
- def _ProcessOptions(self, options): # pragma: no cover |
- if not options.dry_run and not options.author: |
- print "Specify your chromium.org email with -a" |
- return False |
- options.wait_for_lgtm = False |
- options.force_readline_defaults = True |
- options.force_upload = True |
- return True |
- |
- def _Config(self): |
- return { |
- "BRANCHNAME": "auto-tag-v8", |
- "PERSISTFILE_BASENAME": "/tmp/v8-auto-tag-tempfile", |
- } |
- |
- def _Steps(self): |
- return [ |
- Preparation, |
- GetTags, |
- GetOldestUntaggedVersion, |
- GetLKGRs, |
- CalculateTagRevision, |
- MakeTag, |
- CleanUp, |
- ] |
- |
- |
-if __name__ == "__main__": # pragma: no cover |
- sys.exit(AutoTag().Run()) |