Changeset 76926 in webkit


Ignore:
Timestamp:
Jan 28, 2011 2:14:13 AM (13 years ago)
Author:
abarth@webkit.org
Message:

2011-01-28 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

Add webkit-patch roll-chromium-deps
https://bugs.webkit.org/show_bug.cgi?id=53288

This command updates the Source/WebKit/chromium/DEPS file with the
last-known good revision of Chromium (or a revision specified on the
command line). I'd eventually like to turn this into a SheriffBot
command, but this is the first step.

This patch somewhat sprawled because I needed to move a bunch of code
out of ChangeLog that should never have been there in the first place.
Also, I had to fix a bug in MockUser in order to test the new command.

  • Scripts/webkitpy/common/checkout/api.py:
  • Scripts/webkitpy/common/checkout/changelog.py:
  • Scripts/webkitpy/common/checkout/changelog_unittest.py:
  • Scripts/webkitpy/common/checkout/deps.py: Added.
  • Scripts/webkitpy/common/config/urls.py:
  • Scripts/webkitpy/tool/commands/init.py:
  • Scripts/webkitpy/tool/commands/download_unittest.py:
  • Scripts/webkitpy/tool/commands/roll.py: Added.
  • Scripts/webkitpy/tool/commands/roll_unittest.py: Added.
  • Scripts/webkitpy/tool/commands/upload_unittest.py:
  • Scripts/webkitpy/tool/mocktool.py:
  • Scripts/webkitpy/tool/steps/init.py:
  • Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py: Added.
  • Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
  • Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py: Added.
  • Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
  • Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Added.
  • Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
Location:
trunk/Tools
Files:
6 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r76916 r76926  
     12011-01-28  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Add webkit-patch roll-chromium-deps
     6        https://bugs.webkit.org/show_bug.cgi?id=53288
     7
     8        This command updates the Source/WebKit/chromium/DEPS file with the
     9        last-known good revision of Chromium (or a revision specified on the
     10        command line).  I'd eventually like to turn this into a SheriffBot
     11        command, but this is the first step.
     12
     13        This patch somewhat sprawled because I needed to move a bunch of code
     14        out of ChangeLog that should never have been there in the first place.
     15        Also, I had to fix a bug in MockUser in order to test the new command.
     16
     17        * Scripts/webkitpy/common/checkout/api.py:
     18        * Scripts/webkitpy/common/checkout/changelog.py:
     19        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
     20        * Scripts/webkitpy/common/checkout/deps.py: Added.
     21        * Scripts/webkitpy/common/config/urls.py:
     22        * Scripts/webkitpy/tool/commands/__init__.py:
     23        * Scripts/webkitpy/tool/commands/download_unittest.py:
     24        * Scripts/webkitpy/tool/commands/roll.py: Added.
     25        * Scripts/webkitpy/tool/commands/roll_unittest.py: Added.
     26        * Scripts/webkitpy/tool/commands/upload_unittest.py:
     27        * Scripts/webkitpy/tool/mocktool.py:
     28        * Scripts/webkitpy/tool/steps/__init__.py:
     29        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py: Added.
     30        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
     31        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py: Added.
     32        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
     33        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Added.
     34        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
     35
    1362011-01-27  Greg Coletta  <greg.coletta@nokia.com>
    237
  • trunk/Tools/Scripts/webkitpy/common/checkout/api.py

    r75769 r76926  
    3434from webkitpy.common.checkout.commitinfo import CommitInfo
    3535from webkitpy.common.checkout.scm import CommitMessage
     36from webkitpy.common.checkout.deps import DEPS
    3637from webkitpy.common.memoized import memoized
    3738from webkitpy.common.net.bugzilla import parse_bug_id
     
    149150            pass # We might not have ChangeLogs.
    150151
     152    def chromium_deps(self):
     153        return DEPS(os.path.join(self._scm.checkout_root, "Source", "WebKit", "chromium", "DEPS"))
     154
    151155    def apply_patch(self, patch, force=False):
    152156        # It's possible that the patch was not made from the root directory.
  • trunk/Tools/Scripts/webkitpy/common/checkout/changelog.py

    r73951 r76926  
    3737from webkitpy.common.system.deprecated_logging import log
    3838from webkitpy.common.config.committers import CommitterList
    39 from webkitpy.common.config import urls
    4039from webkitpy.common.net.bugzilla import parse_bug_id
    41 from webkitpy.tool.grammar import join_with_separators
    4240
    4341
     
    146144        return "\n".join(lines)
    147145
    148     # This probably does not belong in changelogs.py
    149     def _message_for_revert(self, revision_list, reason, bug_url):
    150         message = "Unreviewed, rolling out %s.\n" % join_with_separators(['r' + str(revision) for revision in revision_list])
    151         for revision in revision_list:
    152             message += "%s\n" % urls.view_revision_url(revision)
    153         if bug_url:
    154             message += "%s\n" % bug_url
    155         # Add an extra new line after the rollout links, before any reason.
    156         message += "\n"
    157         if reason:
    158             message += "%s\n\n" % reason
    159         return self._wrap_lines(message)
    160 
    161     def update_for_revert(self, revision_list, reason, bug_url=None):
     146    def update_with_unreviewed_message(self, message):
    162147        reviewed_by_regexp = re.compile(
    163148                "%sReviewed by NOBODY \(OOPS!\)\." % self._changelog_indent)
     
    166151        for line in fileinput.FileInput(self.path, inplace=1):
    167152            if reviewed_by_regexp.search(line):
    168                 message_lines = self._message_for_revert(revision_list,
    169                                                          reason,
    170                                                          bug_url)
     153                message_lines = self._wrap_lines(message)
    171154                print reviewed_by_regexp.sub(message_lines, line),
    172155                # Remove all the ChangeLog boilerplate between the Reviewed by
  • trunk/Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py

    r73951 r76926  
    143143        os.remove(changelog_path)
    144144        self.assertEquals(actual_contents, expected_contents)
    145 
    146     _revert_message = """        Unreviewed, rolling out r12345.
    147         http://trac.webkit.org/changeset/12345
    148         http://example.com/123
    149 
    150         This is a very long reason which should be long enough so that
    151         _message_for_revert will need to wrap it.  We'll also include
    152         a
    153         https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354
    154         link so that we can make sure we wrap that right too.
    155 """
    156 
    157     def test_message_for_revert(self):
    158         changelog = ChangeLog("/fake/path")
    159         long_reason = "This is a very long reason which should be long enough so that _message_for_revert will need to wrap it.  We'll also include a https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354 link so that we can make sure we wrap that right too."
    160         message = changelog._message_for_revert([12345], long_reason, "http://example.com/123")
    161         self.assertEquals(message, self._revert_message)
    162 
    163     _revert_entry_with_bug_url = '''2009-08-19  Eric Seidel  <eric@webkit.org>
    164 
    165         Unreviewed, rolling out r12345.
    166         http://trac.webkit.org/changeset/12345
    167         http://example.com/123
    168 
    169         Reason
    170 
    171         * Scripts/bugzilla-tool:
    172 '''
    173 
    174     _revert_entry_without_bug_url = '''2009-08-19  Eric Seidel  <eric@webkit.org>
    175 
    176         Unreviewed, rolling out r12345.
    177         http://trac.webkit.org/changeset/12345
    178 
    179         Reason
    180 
    181         * Scripts/bugzilla-tool:
    182 '''
    183 
    184     _multiple_revert_entry_with_bug_url = '''2009-08-19  Eric Seidel  <eric@webkit.org>
    185 
    186         Unreviewed, rolling out r12345, r12346, and r12347.
    187         http://trac.webkit.org/changeset/12345
    188         http://trac.webkit.org/changeset/12346
    189         http://trac.webkit.org/changeset/12347
    190         http://example.com/123
    191 
    192         Reason
    193 
    194         * Scripts/bugzilla-tool:
    195 '''
    196 
    197     _multiple_revert_entry_without_bug_url = '''2009-08-19  Eric Seidel  <eric@webkit.org>
    198 
    199         Unreviewed, rolling out r12345, r12346, and r12347.
    200         http://trac.webkit.org/changeset/12345
    201         http://trac.webkit.org/changeset/12346
    202         http://trac.webkit.org/changeset/12347
    203 
    204         Reason
    205 
    206         * Scripts/bugzilla-tool:
    207 '''
    208 
    209     def _assert_update_for_revert_output(self, args, expected_entry):
    210         changelog_contents = u"%s\n%s" % (self._new_entry_boilerplate, self._example_changelog)
    211         changelog_path = self._write_tmp_file_with_contents(changelog_contents.encode("utf-8"))
    212         changelog = ChangeLog(changelog_path)
    213         changelog.update_for_revert(*args)
    214         actual_entry = changelog.latest_entry()
    215         os.remove(changelog_path)
    216         self.assertEquals(actual_entry.contents(), expected_entry)
    217         self.assertEquals(actual_entry.reviewer_text(), None)
    218         # These checks could be removed to allow this to work on other entries:
    219         self.assertEquals(actual_entry.author_name(), "Eric Seidel")
    220         self.assertEquals(actual_entry.author_email(), "eric@webkit.org")
    221 
    222     def test_update_for_revert(self):
    223         self._assert_update_for_revert_output([[12345], "Reason"], self._revert_entry_without_bug_url)
    224         self._assert_update_for_revert_output([[12345], "Reason", "http://example.com/123"], self._revert_entry_with_bug_url)
    225         self._assert_update_for_revert_output([[12345, 12346, 12347], "Reason"], self._multiple_revert_entry_without_bug_url)
    226         self._assert_update_for_revert_output([[12345, 12346, 12347], "Reason", "http://example.com/123"], self._multiple_revert_entry_with_bug_url)
    227 
    228 
    229 if __name__ == '__main__':
    230     unittest.main()
  • trunk/Tools/Scripts/webkitpy/common/config/urls.py

    r73691 r76926  
    3535    return "http://trac.webkit.org/changeset/%s" % revision_number
    3636
     37chromium_lkgr_url = "http://chromium-status.appspot.com/lkgr"
    3738
    3839contribution_guidelines = "http://webkit.org/coding/contributing.html"
  • trunk/Tools/Scripts/webkitpy/tool/commands/__init__.py

    r73991 r76926  
    1111from webkitpy.tool.commands.rebaseline import Rebaseline
    1212from webkitpy.tool.commands.rebaselineserver import RebaselineServer
     13from webkitpy.tool.commands.roll import *
    1314from webkitpy.tool.commands.sheriffbot import *
    1415from webkitpy.tool.commands.upload import *
  • trunk/Tools/Scripts/webkitpy/tool/commands/commandtest.py

    r73827 r76926  
    3333
    3434class CommandsTest(unittest.TestCase):
    35     def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", options=MockOptions(), tool=MockTool()):
     35    def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", expected_exception=None, options=MockOptions(), tool=MockTool()):
    3636        options.blocks = None
    3737        options.cc = 'MOCK cc'
     
    4646        options.reviewer = 'MOCK reviewer'
    4747        command.bind_to_tool(tool)
    48         OutputCapture().assert_outputs(self, command.execute, [options, args, tool], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
     48        OutputCapture().assert_outputs(self, command.execute, [options, args, tool], expected_stdout=expected_stdout, expected_stderr=expected_stderr, expected_exception=expected_exception)
  • trunk/Tools/Scripts/webkitpy/tool/commands/download_unittest.py

    r74639 r76926  
    201201
    202202    def test_rollout(self):
    203         expected_stderr = "Preparing rollout for bug 42.\nUpdating working directory\nRunning prepare-ChangeLog\nMOCK: user.open_url: file://...\nBuilding WebKit\nCommitted r49824: <http://trac.webkit.org/changeset/49824>\n"
    204         expected_stdout = "Was that diff correct?\n"
    205         self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stdout=expected_stdout, expected_stderr=expected_stderr)
    206 
     203        expected_stderr = """Preparing rollout for bug 42.
     204Updating working directory
     205Running prepare-ChangeLog
     206MOCK: user.open_url: file://...
     207Was that diff correct?
     208Building WebKit
     209Committed r49824: <http://trac.webkit.org/changeset/49824>
     210"""
     211        self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
     212
  • trunk/Tools/Scripts/webkitpy/tool/commands/upload_unittest.py

    r74373 r76926  
    6262        expected_stderr = """Running check-webkit-style
    6363MOCK: user.open_url: file://...
     64Was that diff correct?
    6465Obsoleting 2 old patches on bug 42
    6566MOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
    6667MOCK: user.open_url: http://example.com/42
    6768"""
    68         expected_stdout = "Was that diff correct?\n"
    69         self.assert_execute_outputs(Post(), [42], options=options, expected_stdout=expected_stdout, expected_stderr=expected_stderr)
     69        self.assert_execute_outputs(Post(), [42], options=options, expected_stderr=expected_stderr)
    7070
    7171    def test_land_safely(self):
     
    9191        expected_stderr = """Running check-webkit-style
    9292MOCK: user.open_url: file://...
     93Was that diff correct?
    9394Obsoleting 2 old patches on bug 42
    9495MOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
    9596MOCK: user.open_url: http://example.com/42
    9697"""
    97         expected_stdout = "Was that diff correct?\n"
    98         self.assert_execute_outputs(Upload(), [42], options=options, expected_stdout=expected_stdout, expected_stderr=expected_stderr)
     98        self.assert_execute_outputs(Upload(), [42], options=options, expected_stderr=expected_stderr)
    9999
    100100    def test_mark_bug_fixed(self):
     
    107107Revision: 9876
    108108MOCK: user.open_url: http://example.com/42
     109Is this correct?
    109110Adding comment to Bug 42.
    110111MOCK bug comment: bug_id=42, cc=None
     
    116117
    117118"""
    118         expected_stdout = "Is this correct?\n"
    119         self.assert_execute_outputs(MarkBugFixed(), [], expected_stdout=expected_stdout, expected_stderr=expected_stderr, tool=tool, options=options)
     119        self.assert_execute_outputs(MarkBugFixed(), [], expected_stderr=expected_stderr, tool=tool, options=options)
    120120
    121121    def test_edit_changelog(self):
  • trunk/Tools/Scripts/webkitpy/tool/mocktool.py

    r76642 r76926  
    496496
    497497
     498class MockDEPS(object):
     499    def read_variable(self, name):
     500        return 6564
     501
     502    def write_variable(self, name, value):
     503        log("MOCK: MockDEPS.write_variable(%s, %s)" % (name, value))
     504
     505
    498506class MockCheckout(object):
    499507
     
    529537        return commit_message
    530538
     539    def chromium_deps(self):
     540        return MockDEPS()
     541
    531542    def apply_patch(self, patch, force=False):
    532543        pass
     
    562573
    563574    def confirm(self, message=None, default='y'):
    564         print message
     575        log(message)
    565576        return default == 'y'
    566577
  • trunk/Tools/Scripts/webkitpy/tool/steps/__init__.py

    r74639 r76926  
    4848from webkitpy.tool.steps.postdiffforcommit import PostDiffForCommit
    4949from webkitpy.tool.steps.postdiffforrevert import PostDiffForRevert
     50from webkitpy.tool.steps.preparechangelogfordepsroll import PrepareChangeLogForDEPSRoll
    5051from webkitpy.tool.steps.preparechangelogforrevert import PrepareChangeLogForRevert
    5152from webkitpy.tool.steps.preparechangelog import PrepareChangeLog
     
    5657from webkitpy.tool.steps.suggestreviewers import SuggestReviewers
    5758from webkitpy.tool.steps.updatechangelogswithreviewer import UpdateChangeLogsWithReviewer
     59from webkitpy.tool.steps.updatechromiumdeps import UpdateChromiumDEPS
    5860from webkitpy.tool.steps.update import Update
    5961from webkitpy.tool.steps.validatechangelogs import ValidateChangeLogs
  • trunk/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py

    r73951 r76926  
    3030
    3131from webkitpy.common.checkout.changelog import ChangeLog
     32from webkitpy.common.config import urls
     33from webkitpy.tool.grammar import join_with_separators
    3234from webkitpy.tool.steps.abstractstep import AbstractStep
    3335
    3436
    3537class PrepareChangeLogForRevert(AbstractStep):
     38    @classmethod
     39    def _message_for_revert(cls, revision_list, reason, bug_url=None):
     40        message = "Unreviewed, rolling out %s.\n" % join_with_separators(['r' + str(revision) for revision in revision_list])
     41        for revision in revision_list:
     42            message += "%s\n" % urls.view_revision_url(revision)
     43        if bug_url:
     44            message += "%s\n" % bug_url
     45        # Add an extra new line after the rollout links, before any reason.
     46        message += "\n"
     47        if reason:
     48            message += "%s\n\n" % reason
     49        return message
     50
    3651    def run(self, state):
    3752        # This could move to prepare-ChangeLog by adding a --revert= option.
     
    3954        changelog_paths = self._tool.checkout().modified_changelogs(git_commit=None)
    4055        bug_url = self._tool.bugs.bug_url_for_bug_id(state["bug_id"]) if state["bug_id"] else None
     56        message = self._message_for_revert(state["revision_list"], state["reason"], bug_url)
    4157        for changelog_path in changelog_paths:
    4258            # FIXME: Seems we should prepare the message outside of changelogs.py and then just pass in
    4359            # text that we want to use to replace the reviewed by line.
    44             ChangeLog(changelog_path).update_for_revert(state["revision_list"], state["reason"], bug_url)
     60            ChangeLog(changelog_path).update_with_unreviewed_message(message)
  • trunk/Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py

    r70274 r76926  
    4242        capture = OutputCapture()
    4343        step = SuggestReviewers(MockTool(), MockOptions(suggest_reviewers=True, git_commit=None))
    44         expected_stdout = "The following reviewers have recently modified files in your patch:\nFoo Bar\nWould you like to CC them?\n"
    45         capture.assert_outputs(self, step.run, [{"bug_id": "123"}], expected_stdout=expected_stdout)
     44        expected_stdout = "The following reviewers have recently modified files in your patch:\nFoo Bar\n"
     45        expected_stderr = "Would you like to CC them?\n"
     46        capture.assert_outputs(self, step.run, [{"bug_id": "123"}], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
  • trunk/Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py

    r75328 r76926  
    4646        expected_stdout = expected_stderr = ""
    4747        if should_fail and not non_interactive:
    48             expected_stdout = "OK to continue?\n"
    49             expected_stderr = "The diff to mock/ChangeLog looks wrong.  Are you sure your ChangeLog entry is at the top of the file?\n"
    50         result = OutputCapture().assert_outputs(self, step._check_changelog_diff, [diff_file], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
     48            expected_stderr = "The diff to mock/ChangeLog looks wrong.  Are you sure your ChangeLog entry is at the top of the file?\nOK to continue?\n"
     49        result = OutputCapture().assert_outputs(self, step._check_changelog_diff, [diff_file], expected_stderr=expected_stderr)
    5150        self.assertEqual(not result, should_fail)
    5251
Note: See TracChangeset for help on using the changeset viewer.