<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[56034] trunk/WebKitTools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/56034">56034</a></dd>
<dt>Author</dt> <dd>abarth@webkit.org</dd>
<dt>Date</dt> <dd>2010-03-15 21:43:38 -0700 (Mon, 15 Mar 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>2010-03-15  Adam Barth  &lt;abarth@webkit.org&gt;

        Reviewed by Eric Seidel.

        Add webkit-patch post-rollout to upload rollouts to bugs.webkit.org for easy committing
        https://bugs.webkit.org/show_bug.cgi?id=36154

        This new command is a mashup of prepare-rollout and post.  This command
        will be used by an experimental bot to post rollouts of patches that
        break things to bugs.webkit.org where they can be landed with the
        greatest of ease.

        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/steps/__init__.py:
        * Scripts/webkitpy/steps/postdiffforrevert.py: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebKitToolsChangeLog">trunk/WebKitTools/ChangeLog</a></li>
<li><a href="#trunkWebKitToolsScriptswebkitpycommandsdownloadpy">trunk/WebKitTools/Scripts/webkitpy/commands/download.py</a></li>
<li><a href="#trunkWebKitToolsScriptswebkitpycommandsdownload_unittestpy">trunk/WebKitTools/Scripts/webkitpy/commands/download_unittest.py</a></li>
<li><a href="#trunkWebKitToolsScriptswebkitpysteps__init__py">trunk/WebKitTools/Scripts/webkitpy/steps/__init__.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkWebKitToolsScriptswebkitpystepspostdiffforrevertpy">trunk/WebKitTools/Scripts/webkitpy/steps/postdiffforrevert.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebKitToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/ChangeLog (56033 => 56034)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/ChangeLog        2010-03-16 04:41:27 UTC (rev 56033)
+++ trunk/WebKitTools/ChangeLog        2010-03-16 04:43:38 UTC (rev 56034)
</span><span class="lines">@@ -2,6 +2,23 @@
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Eric Seidel.
</span><span class="cx"> 
</span><ins>+        Add webkit-patch post-rollout to upload rollouts to bugs.webkit.org for easy committing
+        https://bugs.webkit.org/show_bug.cgi?id=36154
+
+        This new command is a mashup of prepare-rollout and post.  This command
+        will be used by an experimental bot to post rollouts of patches that
+        break things to bugs.webkit.org where they can be landed with the
+        greatest of ease.
+
+        * Scripts/webkitpy/commands/download.py:
+        * Scripts/webkitpy/commands/download_unittest.py:
+        * Scripts/webkitpy/steps/__init__.py:
+        * Scripts/webkitpy/steps/postdiffforrevert.py: Added.
+
+2010-03-15  Adam Barth  &lt;abarth@webkit.org&gt;
+
+        Reviewed by Eric Seidel.
+
</ins><span class="cx">         webkit-patch rollout should error out on conflicts
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=36151
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebKitToolsScriptswebkitpycommandsdownloadpy"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/Scripts/webkitpy/commands/download.py (56033 => 56034)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/Scripts/webkitpy/commands/download.py        2010-03-16 04:41:27 UTC (rev 56033)
+++ trunk/WebKitTools/Scripts/webkitpy/commands/download.py        2010-03-16 04:43:38 UTC (rev 56034)
</span><span class="lines">@@ -248,7 +248,11 @@
</span><span class="cx">         return parse_bug_id(original_diff)
</span><span class="cx"> 
</span><span class="cx">     def _bug_id_for_revision(self, revision):
</span><del>-        raise NotImplementedError(&quot;subclasses must implement&quot;)
</del><ins>+        bug_id = self._parse_bug_id_from_revision_diff(revision)
+        if bug_id:
+            log(&quot;Preparing rollout for bug %s.&quot; % bug_id)
+            return bug_id
+        log(&quot;Unable to parse bug number from diff.&quot;)
</ins><span class="cx"> 
</span><span class="cx">     def _prepare_state(self, options, args, tool):
</span><span class="cx">         revision = args[0]
</span><span class="lines">@@ -273,13 +277,20 @@
</span><span class="cx">         steps.PrepareChangeLogForRevert,
</span><span class="cx">     ]
</span><span class="cx"> 
</span><del>-    def _bug_id_for_revision(self, revision):
-        bug_id = self._parse_bug_id_from_revision_diff(revision)
-        if bug_id:
-            return bug_id
-        log(&quot;Failed to parse bug number from diff.&quot;)
</del><span class="cx"> 
</span><ins>+class PostRollout(AbstractRolloutPrepCommand):
+    name = &quot;post-rollout&quot;
+    help_text = &quot;Prepare a rollout of the given revision and upload it to the bug.&quot;
+    steps = [
+        steps.CleanWorkingDirectory,
+        steps.Update,
+        steps.RevertRevision,
+        steps.PrepareChangeLogForRevert,
+        # FIXME: If there's no bug number, we should make a new bug.
+        steps.PostDiffForRevert,
+    ]
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class Rollout(AbstractRolloutPrepCommand):
</span><span class="cx">     name = &quot;rollout&quot;
</span><span class="cx">     show_in_main_help = True
</span><span class="lines">@@ -301,10 +312,3 @@
</span><span class="cx">         steps.Commit,
</span><span class="cx">         steps.ReopenBugAfterRollout,
</span><span class="cx">     ]
</span><del>-
-    def _bug_id_for_revision(self, revision):
-        bug_id = self._parse_bug_id_from_revision_diff(revision)
-        if bug_id:
-            log(&quot;Will re-open bug %s after rollout.&quot; % bug_id)
-            return bug_id
-        log(&quot;Failed to parse bug number from diff.  No bugs will be updated/reopened after the rollout.&quot;)
</del></span></pre></div>
<a id="trunkWebKitToolsScriptswebkitpycommandsdownload_unittestpy"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/Scripts/webkitpy/commands/download_unittest.py (56033 => 56034)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/Scripts/webkitpy/commands/download_unittest.py        2010-03-16 04:41:27 UTC (rev 56033)
+++ trunk/WebKitTools/Scripts/webkitpy/commands/download_unittest.py        2010-03-16 04:43:38 UTC (rev 56034)
</span><span class="lines">@@ -117,10 +117,14 @@
</span><span class="cx">         self.assert_execute_outputs(LandFromBug(), [42], options=self._default_options(), expected_stderr=expected_stderr)
</span><span class="cx"> 
</span><span class="cx">     def test_prepare_rollout(self):
</span><del>-        expected_stderr=&quot;Updating working directory\nRunning prepare-ChangeLog\n&quot;
</del><ins>+        expected_stderr=&quot;Preparing rollout for bug 12345.\nUpdating working directory\nRunning prepare-ChangeLog\n&quot;
</ins><span class="cx">         self.assert_execute_outputs(PrepareRollout(), [852, &quot;Reason&quot;], options=self._default_options(), expected_stderr=expected_stderr)
</span><span class="cx"> 
</span><ins>+    def test_post_rollout(self):
+        expected_stderr=&quot;Preparing rollout for bug 12345.\nUpdating working directory\nRunning prepare-ChangeLog\n&quot;
+        self.assert_execute_outputs(PrepareRollout(), [852, &quot;Reason&quot;], options=self._default_options(), expected_stderr=expected_stderr)
+
</ins><span class="cx">     def test_rollout(self):
</span><del>-        expected_stderr = &quot;Will re-open bug 12345 after rollout.\nUpdating working directory\nRunning prepare-ChangeLog\nBuilding WebKit\n&quot;
</del><ins>+        expected_stderr = &quot;Preparing rollout for bug 12345.\nUpdating working directory\nRunning prepare-ChangeLog\nBuilding WebKit\n&quot;
</ins><span class="cx">         self.assert_execute_outputs(Rollout(), [852, &quot;Reason&quot;], options=self._default_options(), expected_stderr=expected_stderr)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebKitToolsScriptswebkitpysteps__init__py"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/Scripts/webkitpy/steps/__init__.py (56033 => 56034)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/Scripts/webkitpy/steps/__init__.py        2010-03-16 04:41:27 UTC (rev 56033)
+++ trunk/WebKitTools/Scripts/webkitpy/steps/__init__.py        2010-03-16 04:43:38 UTC (rev 56034)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx"> from webkitpy.steps.options import Options
</span><span class="cx"> from webkitpy.steps.postdiff import PostDiff
</span><span class="cx"> from webkitpy.steps.postdiffforcommit import PostDiffForCommit
</span><ins>+from webkitpy.steps.postdiffforrevert import PostDiffForRevert
</ins><span class="cx"> from webkitpy.steps.preparechangelogforrevert import PrepareChangeLogForRevert
</span><span class="cx"> from webkitpy.steps.preparechangelog import PrepareChangeLog
</span><span class="cx"> from webkitpy.steps.promptforbugortitle import PromptForBugOrTitle
</span></span></pre></div>
<a id="trunkWebKitToolsScriptswebkitpystepspostdiffforrevertpy"></a>
<div class="addfile"><h4>Added: trunk/WebKitTools/Scripts/webkitpy/steps/postdiffforrevert.py (0 => 56034)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/Scripts/webkitpy/steps/postdiffforrevert.py                                (rev 0)
+++ trunk/WebKitTools/Scripts/webkitpy/steps/postdiffforrevert.py        2010-03-16 04:43:38 UTC (rev 56034)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+# Copyright (C) 2010 Google Inc. All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import StringIO
+
+from webkitpy.steps.abstractstep import AbstractStep
+
+
+class PostDiffForRevert(AbstractStep):
+    def run(self, state):
+        self._tool.bugs.add_patch_to_bug(
+            state[&quot;bug_id&quot;],
+            StringIO.StringIO(self.cached_lookup(state, &quot;diff&quot;)),
+            &quot;ROLLOUT of r%s&quot; % state[&quot;revision&quot;],
+            mark_for_review=False,
+            mark_for_commit_queue=True)
</ins></span></pre>
</div>
</div>

</body>
</html>