Changeset 55034 in webkit


Ignore:
Timestamp:
Feb 19, 2010 3:07:02 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-02-19 Eric Seidel <eric@webkit.org>

Reviewed by Adam Barth.

Split out "prepare-rollout" from "rollout" and make --complete-rollout default
https://bugs.webkit.org/show_bug.cgi?id=33745

  • Scripts/webkitpy/commands/download.py:
    • Add a new AbstractRolloutPrepCommand to share code between PrepareRollout and Rollout
    • Add PrepareRollout
  • Scripts/webkitpy/commands/download_unittest.py: Test PrepareRollout, remove CompleteRollout tests.
  • Scripts/webkitpy/steps/init.py: include ReopenBugAfterRollout step.
  • Scripts/webkitpy/steps/completerollout.py: Removed.
  • Scripts/webkitpy/steps/options.py: remove complete_rollout
  • Scripts/webkitpy/steps/reopenbugafterrollout.py: Added.
Location:
trunk/WebKitTools
Files:
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/WebKitTools/ChangeLog

    r55025 r55034  
     12010-02-19  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Split out "prepare-rollout" from "rollout" and make --complete-rollout default
     6        https://bugs.webkit.org/show_bug.cgi?id=33745
     7
     8        * Scripts/webkitpy/commands/download.py:
     9         - Add a new AbstractRolloutPrepCommand to share code between PrepareRollout and Rollout
     10         - Add PrepareRollout
     11        * Scripts/webkitpy/commands/download_unittest.py: Test PrepareRollout, remove CompleteRollout tests.
     12        * Scripts/webkitpy/steps/__init__.py: include ReopenBugAfterRollout step.
     13        * Scripts/webkitpy/steps/completerollout.py: Removed.
     14        * Scripts/webkitpy/steps/options.py: remove complete_rollout
     15        * Scripts/webkitpy/steps/reopenbugafterrollout.py: Added.
     16
    1172010-02-19  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>
    218
  • trunk/WebKitTools/Scripts/webkitpy/commands/download.py

    r53133 r55034  
    241241
    242242
    243 class Rollout(AbstractSequencedCommand):
     243class AbstractRolloutPrepCommand(AbstractSequencedCommand):
     244    argument_names = "REVISION REASON"
     245
     246    def _parse_bug_id_from_revision_diff(self, revision):
     247        original_diff = self.tool.scm().diff_for_revision(revision)
     248        return parse_bug_id(original_diff)
     249
     250    def _bug_id_for_revision(self, revision):
     251        raise NotImplementedError("subclasses must implement")
     252
     253    def _prepare_state(self, options, args, tool):
     254        revision = args[0]
     255        return {
     256            "revision" : revision,
     257            "bug_id" : self._bug_id_for_revision(revision),
     258            "reason" : args[1],
     259        }
     260
     261
     262class PrepareRollout(AbstractRolloutPrepCommand):
     263    name = "prepare-rollout"
     264    help_text = "Revert the given revision in the working copy and prepare ChangeLogs with revert reason"
     265    long_help = """Updates the working copy.
     266Applies the inverse diff for the provided revision.
     267Creates an appropriate rollout ChangeLog, including a trac link and bug link.
     268"""
     269    steps = [
     270        steps.CleanWorkingDirectory,
     271        steps.Update,
     272        steps.RevertRevision,
     273        steps.PrepareChangeLogForRevert,
     274    ]
     275
     276    def _bug_id_for_revision(self, revision):
     277        bug_id = self._parse_bug_id_from_revision_diff(revision)
     278        if bug_id:
     279            return bug_id
     280        log("Failed to parse bug number from diff.")
     281
     282
     283class Rollout(AbstractRolloutPrepCommand):
    244284    name = "rollout"
    245285    show_in_main_help = True
    246286    help_text = "Revert the given revision in the working copy and optionally commit the revert and re-open the original bug"
    247     argument_names = "REVISION REASON"
    248287    long_help = """Updates the working copy.
    249288Applies the inverse diff for the provided revision.
     
    259298        steps.EditChangeLog,
    260299        steps.ConfirmDiff,
    261         steps.CompleteRollout,
    262     ]
    263 
    264     @staticmethod
    265     def _parse_bug_id_from_revision_diff(tool, revision):
    266         original_diff = tool.scm().diff_for_revision(revision)
    267         return parse_bug_id(original_diff)
    268 
    269     def execute(self, options, args, tool):
    270         revision = args[0]
    271         reason = args[1]
    272         bug_id = self._parse_bug_id_from_revision_diff(tool, revision)
    273         if options.complete_rollout:
    274             if bug_id:
    275                 log("Will re-open bug %s after rollout." % bug_id)
    276             else:
    277                 log("Failed to parse bug number from diff.  No bugs will be updated/reopened after the rollout.")
    278 
    279         state = {
    280             "revision" : revision,
    281             "bug_id" : bug_id,
    282             "reason" : reason,
    283         }
    284         self._sequence.run_and_handle_errors(tool, options, state)
     300        steps.Build,
     301        steps.Commit,
     302        steps.ReopenBugAfterRollout,
     303    ]
     304
     305    def _bug_id_for_revision(self, revision):
     306        bug_id = self._parse_bug_id_from_revision_diff(revision)
     307        if bug_id:
     308            log("Will re-open bug %s after rollout." % bug_id)
     309            return bug_id
     310        log("Failed to parse bug number from diff.  No bugs will be updated/reopened after the rollout.")
  • trunk/WebKitTools/Scripts/webkitpy/commands/download_unittest.py

    r53925 r55034  
    4343        options.test = True
    4444        options.close_bug = True
    45         options.complete_rollout = False
    4645        return options
    4746
     
    117116        self.assert_execute_outputs(LandFromBug(), [42], options=self._default_options(), expected_stderr=expected_stderr)
    118117
     118    def test_prepare_rollout(self):
     119        expected_stderr="Updating working directory\nRunning prepare-ChangeLog\n"
     120        self.assert_execute_outputs(PrepareRollout(), [852, "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
     121
    119122    def test_rollout(self):
    120         expected_stderr = "Updating working directory\nRunning prepare-ChangeLog\n\nNOTE: Rollout support is experimental.\nPlease verify the rollout diff and use \"webkit-patch land 12345\" to commit the rollout.\n"
     123        expected_stderr = "Will re-open bug 12345 after rollout.\nUpdating working directory\nRunning prepare-ChangeLog\nBuilding WebKit\n"
    121124        self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
    122125
    123     def test_complete_rollout(self):
    124         options = self._default_options()
    125         options.complete_rollout = True
    126         expected_stderr = "Will re-open bug 12345 after rollout.\nUpdating working directory\nRunning prepare-ChangeLog\nBuilding WebKit\n"
    127         self.assert_execute_outputs(Rollout(), [852, "Reason"], options=options, expected_stderr=expected_stderr)
  • trunk/WebKitTools/Scripts/webkitpy/steps/__init__.py

    r53120 r55034  
    3838from webkitpy.steps.closepatch import ClosePatch
    3939from webkitpy.steps.commit import Commit
    40 from webkitpy.steps.completerollout import CompleteRollout
    4140from webkitpy.steps.confirmdiff import ConfirmDiff
    4241from webkitpy.steps.createbug import CreateBug
     
    5150from webkitpy.steps.preparechangelog import PrepareChangeLog
    5251from webkitpy.steps.promptforbugortitle import PromptForBugOrTitle
     52from webkitpy.steps.reopenbugafterrollout import ReopenBugAfterRollout
    5353from webkitpy.steps.revertrevision import RevertRevision
    5454from webkitpy.steps.runtests import RunTests
  • trunk/WebKitTools/Scripts/webkitpy/steps/options.py

    r52910 r55034  
    3737    clean = make_option("--no-clean", action="store_false", dest="clean", default=True, help="Don't check if the working directory is clean before applying patches")
    3838    close_bug = make_option("--no-close", action="store_false", dest="close_bug", default=True, help="Leave bug open after landing.")
    39     complete_rollout = make_option("--complete-rollout", action="store_true", dest="complete_rollout", help="Commit the revert and re-open the original bug.")
    4039    component = make_option("--component", action="store", type="string", dest="component", help="Component for the new bug.")
    4140    confirm = make_option("--no-confirm", action="store_false", dest="confirm", default=True, help="Skip confirmation steps.")
  • trunk/WebKitTools/Scripts/webkitpy/steps/reopenbugafterrollout.py

    r55032 r55034  
    2828
    2929from webkitpy.comments import bug_comment_from_commit_text
    30 from webkitpy.steps.build import Build
    31 from webkitpy.steps.commit import Commit
    32 from webkitpy.steps.metastep import MetaStep
    33 from webkitpy.steps.options import Options
     30from webkitpy.steps.abstractstep import AbstractStep
    3431from webkitpy.webkit_logging import log
    3532
    3633
    37 class CompleteRollout(MetaStep):
    38     substeps = [
    39         Build,
    40         Commit,
    41     ]
    42 
    43     @classmethod
    44     def options(cls):
    45         collected_options = cls._collect_options_from_steps(cls.substeps)
    46         collected_options.append(Options.complete_rollout)
    47         return collected_options
    48 
     34class ReopenBugAfterRollout(AbstractStep):
    4935    def run(self, state):
    50         bug_id = state["bug_id"]
    51         # FIXME: Fully automated rollout is not 100% idiot-proof yet, so for now just log with instructions on how to complete the rollout.
    52         # Once we trust rollout we will remove this option.
    53         if not self._options.complete_rollout:
    54             log("\nNOTE: Rollout support is experimental.\nPlease verify the rollout diff and use \"webkit-patch land %s\" to commit the rollout." % bug_id)
    55             return
    56 
    57         MetaStep.run(self, state)
    58 
    5936        commit_comment = bug_comment_from_commit_text(self._tool.scm(), state["commit_text"])
    6037        comment_text = "Reverted r%s for reason:\n\n%s\n\n%s" % (state["revision"], state["reason"], commit_comment)
    6138
     39        bug_id = state["bug_id"]
    6240        if not bug_id:
    6341            log(comment_text)
Note: See TracChangeset for help on using the changeset viewer.