| Index: tools/push-to-trunk/push_to_trunk.py
|
| diff --git a/tools/push-to-trunk/push_to_trunk.py b/tools/push-to-trunk/push_to_trunk.py
|
| index fc8399a1ffad4add73f90c39f74277bbb70055e2..f5bda60c43859e9490556e3b99de8397641802e0 100755
|
| --- a/tools/push-to-trunk/push_to_trunk.py
|
| +++ b/tools/push-to-trunk/push_to_trunk.py
|
| @@ -51,6 +51,9 @@ CONFIG = {
|
| DEPS_FILE: "DEPS",
|
| }
|
|
|
| +PUSH_MESSAGE_SUFFIX = " (based on bleeding_edge revision r%d)"
|
| +PUSH_MESSAGE_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$")
|
| +
|
|
|
| class PushToTrunkOptions(CommonOptions):
|
| @staticmethod
|
| @@ -61,6 +64,7 @@ class PushToTrunkOptions(CommonOptions):
|
| options = Options()
|
| options.s = 0
|
| options.l = None
|
| + options.b = None
|
| options.f = True
|
| options.m = False
|
| options.c = chrome_path
|
| @@ -75,6 +79,7 @@ class PushToTrunkOptions(CommonOptions):
|
| self.l = options.l
|
| self.reviewer = options.reviewer
|
| self.c = options.c
|
| + self.b = getattr(options, 'b', None)
|
| self.author = getattr(options, 'a', None)
|
|
|
| class Preparation(Step):
|
| @@ -100,16 +105,42 @@ class DetectLastPush(Step):
|
| MESSAGE = "Detect commit ID of last push to trunk."
|
|
|
| def RunStep(self):
|
| - last_push = (self._options.l or
|
| - self.Git("log -1 --format=%H ChangeLog").strip())
|
| + last_push_trunk = self._options.l or self.FindLastTrunkPush()
|
| while True:
|
| # Print assumed commit, circumventing git's pager.
|
| - print self.Git("log -1 %s" % last_push)
|
| + print self.Git("log -1 %s" % last_push_trunk)
|
| if self.Confirm("Is the commit printed above the last push to trunk?"):
|
| break
|
| - args = "log -1 --format=%H %s^ ChangeLog" % last_push
|
| - last_push = self.Git(args).strip()
|
| - self["last_push"] = last_push
|
| + args = ("log -1 --format=%%H %s^ --grep=\"%s\""
|
| + % (last_push_trunk, push_pattern))
|
| + last_push_trunk = self.Git(args).strip()
|
| +
|
| + if self._options.b:
|
| + # Read the bleeding edge revision of the last push from a command-line
|
| + # option.
|
| + last_push_bleeding_edge = self._options.b
|
| + else:
|
| + # Retrieve the bleeding edge revision of the last push from the text in
|
| + # the push commit message.
|
| + args = "log -1 --format=%%s %s" % last_push_trunk
|
| + last_push_trunk_title = self.Git(args).strip()
|
| + last_push_be_svn = PUSH_MESSAGE_RE.match(last_push_trunk_title).group(1)
|
| + if not last_push_be_svn:
|
| + self.Die("Could not retrieve bleeding edge revision for trunk push %s"
|
| + % last_push_trunk)
|
| + args = "svn find-rev r%s" % last_push_be_svn
|
| + last_push_bleeding_edge = self.Git(args).strip()
|
| + if not last_push_bleeding_edge:
|
| + self.Die("Could not retrieve bleeding edge git hash for trunk push %s"
|
| + % last_push_trunk)
|
| +
|
| + # TODO(machenbach): last_push_trunk points to the svn revision on trunk.
|
| + # It is not used yet but we'll need it for retrieving the current version.
|
| + self["last_push_trunk"] = last_push_trunk
|
| + # TODO(machenbach): This currently points to the prepare push revision that
|
| + # will be deprecated soon. After the deprecation it will point to the last
|
| + # bleeding_edge revision that went into the last push.
|
| + self["last_push_bleeding_edge"] = last_push_bleeding_edge
|
|
|
|
|
| class PrepareChangeLog(Step):
|
| @@ -144,7 +175,7 @@ class PrepareChangeLog(Step):
|
| self["version"])
|
| TextToFile(output, self.Config(CHANGELOG_ENTRY_FILE))
|
|
|
| - args = "log %s..HEAD --format=%%H" % self["last_push"]
|
| + args = "log %s..HEAD --format=%%H" % self["last_push_bleeding_edge"]
|
| commits = self.Git(args).strip()
|
|
|
| # Cache raw commit messages.
|
| @@ -291,10 +322,8 @@ class SquashCommits(Step):
|
| # commit message.
|
| args = "svn find-rev %s" % self["prepare_commit_hash"]
|
| self["svn_revision"] = self.Git(args).strip()
|
| - text = MSub(r"^(Version \d+\.\d+\.\d+)$",
|
| - ("\\1 (based on bleeding_edge revision r%s)"
|
| - % self["svn_revision"]),
|
| - text)
|
| + suffix = PUSH_MESSAGE_SUFFIX % int(self["svn_revision"])
|
| + text = MSub(r"^(Version \d+\.\d+\.\d+)$", "\\1%s" % suffix, text)
|
|
|
| # Remove indentation and merge paragraphs into single long lines, keeping
|
| # empty lines between them.
|
| @@ -548,6 +577,11 @@ def BuildOptions():
|
| result = optparse.OptionParser()
|
| result.add_option("-a", "--author", dest="a",
|
| help=("Specify the author email used for rietveld."))
|
| + result.add_option("-b", "--last-bleeding-edge", dest="b",
|
| + help=("Manually specify the git commit ID of the last "
|
| + "bleeding edge revision that was pushed to trunk. "
|
| + "This is used for the auto-generated ChangeLog "
|
| + "entry."))
|
| result.add_option("-c", "--chromium", dest="c",
|
| help=("Specify the path to your Chromium src/ "
|
| "directory to automate the V8 roll."))
|
|
|