Changeset 140775 in webkit


Ignore:
Timestamp:
Jan 24, 2013 9:06:31 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Fixing the diff_parser to correctly identify git diffs even with leading comments.
https://bugs.webkit.org/show_bug.cgi?id=107871

Patch by Tim 'mithro' Ansell <mithro@mithis.com> on 2013-01-24
Reviewed by Eric Seidel.

  • Scripts/webkitpy/common/checkout/diff_parser.py:
  • Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
  • Scripts/webkitpy/tool/steps/haslanded.py:
Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r140774 r140775  
     12013-01-24  Tim 'mithro' Ansell  <mithro@mithis.com>
     2
     3        Fixing the diff_parser to correctly identify git diffs even with leading comments.
     4        https://bugs.webkit.org/show_bug.cgi?id=107871
     5
     6        Reviewed by Eric Seidel.
     7
     8        * Scripts/webkitpy/common/checkout/diff_parser.py:
     9        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
     10        * Scripts/webkitpy/tool/steps/haslanded.py:
     11
    1122013-01-24  James Robinson  <jamesr@chromium.org>
    213
  • trunk/Tools/Scripts/webkitpy/common/checkout/diff_parser.py

    r140301 r140775  
    7070
    7171
     72# This function exists so we can unittest get_diff_converter function
     73def svn_diff_to_svn_diff(line):
     74    return line
     75
     76
    7277# FIXME: This method belongs on DiffParser
    73 def get_diff_converter(first_diff_line):
     78def get_diff_converter(lines):
    7479    """Gets a converter function of diff lines.
    7580
    7681    Args:
    77       first_diff_line: The first filename line of a diff file.
    78                        If this line is git formatted, we'll return a
    79                        converter from git to SVN.
     82      lines: The lines of a diff file.
     83             If this line is git formatted, we'll return a
     84             converter from git to SVN.
    8085    """
    81     if match(r"^diff --git \w/", first_diff_line):
    82         return git_diff_to_svn_diff
    83     return lambda input: input
    84 
     86    for i, line in enumerate(lines[:-1]):
     87        # Stop when we find the first patch
     88        if line[:3] == "+++" and lines[i + 1] == "---":
     89            break
     90        if match(r"^diff --git \w/", line):
     91            return git_diff_to_svn_diff
     92    return svn_diff_to_svn_diff
    8593
    8694_INITIAL_STATE = 1
     
    143151        old_diff_line = None
    144152        new_diff_line = None
     153        transform_line = get_diff_converter(diff_input)
    145154        for line in diff_input:
    146155            line = line.rstrip("\n")
    147             if state == _INITIAL_STATE:
    148                 transform_line = get_diff_converter(line)
    149156            line = transform_line(line)
    150157
  • trunk/Tools/Scripts/webkitpy/common/checkout/diff_parser_unittest.py

    r140301 r140775  
    7979        self.assertEqual((0, 1), diff.lines[0][0:2])
    8080
     81    def test_diff_converter(self):
     82        comment_lines = [
     83            "Hey guys,\n",
     84            "\n",
     85            "See my awesome patch below!\n",
     86            "\n",
     87            " - Cool Hacker\n",
     88            "\n",
     89            ]
     90
     91        revision_lines = [
     92            "Subversion Revision 289799\n",
     93            ]
     94
     95        svn_diff_lines = [
     96            "Index: Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     97            "===================================================================\n",
     98            "--- Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     99            "+++ Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     100            "@@ -59,6 +59,7 @@ def git_diff_to_svn_diff(line):\n",
     101            ]
     102        self.assertEqual(diff_parser.get_diff_converter(svn_diff_lines), diff_parser.svn_diff_to_svn_diff)
     103        self.assertEqual(diff_parser.get_diff_converter(comment_lines + svn_diff_lines), diff_parser.svn_diff_to_svn_diff)
     104        self.assertEqual(diff_parser.get_diff_converter(revision_lines + svn_diff_lines), diff_parser.svn_diff_to_svn_diff)
     105
     106        git_diff_lines = [
     107            "diff --git a/Tools/Scripts/webkitpy/common/checkout/diff_parser.py b/Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     108            "index 3c5b45b..0197ead 100644\n",
     109            "--- a/Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     110            "+++ b/Tools/Scripts/webkitpy/common/checkout/diff_parser.py\n",
     111            "@@ -59,6 +59,7 @@ def git_diff_to_svn_diff(line):\n",
     112            ]
     113        self.assertEqual(diff_parser.get_diff_converter(git_diff_lines), diff_parser.git_diff_to_svn_diff)
     114        self.assertEqual(diff_parser.get_diff_converter(comment_lines + git_diff_lines), diff_parser.git_diff_to_svn_diff)
     115        self.assertEqual(diff_parser.get_diff_converter(revision_lines + git_diff_lines), diff_parser.git_diff_to_svn_diff)
     116
    81117    def test_git_mnemonicprefix(self):
    82118        p = re.compile(r' ([a|b])/')
  • trunk/Tools/Scripts/webkitpy/tool/steps/haslanded.py

    r140674 r140775  
    4747    def convert_to_svn(cls, diff):
    4848        lines = StringIO.StringIO(diff).readlines()
    49         convert = diff_parser.get_diff_converter(lines[0])
     49        convert = diff_parser.get_diff_converter(lines)
    5050        return "".join(convert(x) for x in lines)
    5151
Note: See TracChangeset for help on using the changeset viewer.