Commit b6ffdaf3 authored by maruel@chromium.org's avatar maruel@chromium.org

Add support for executables in git-svn patches applied on svn.

R=dpranke@chromium.org
BUG=
TEST=

Review URL: http://codereview.chromium.org/7056045

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@87827 0039d316-1c4b-4281-b951-d872f2087c98
parent e4067ab7
......@@ -97,7 +97,6 @@ class FilePatchDiff(FilePatchBase):
self.patchlevel = 0
if self.is_git_diff:
self._verify_git_header()
assert not svn_properties
else:
self._verify_svn_header()
......@@ -197,6 +196,7 @@ class FilePatchDiff(FilePatchBase):
self._fail('Unexpected git diff; couldn\'t find git header.')
# Handle these:
# new file mode \d{6}
# rename from <>
# rename to <>
# copy from <>
......@@ -204,18 +204,26 @@ class FilePatchDiff(FilePatchBase):
while lines:
if lines[0].startswith('--- '):
break
match = re.match(r'^(rename|copy) from (.+)$', lines.pop(0))
if not match:
line = lines.pop(0)
match = re.match(r'^(rename|copy) from (.+)$', line)
if match:
if old != match.group(2):
self._fail('Unexpected git diff input name for %s.' % match.group(1))
if not lines:
self._fail('Missing git diff output name for %s.' % match.group(1))
match = re.match(r'^(rename|copy) to (.+)$', lines.pop(0))
if not match:
self._fail('Missing git diff output name for %s.' % match.group(1))
if new != match.group(2):
self._fail('Unexpected git diff output name for %s.' % match.group(1))
continue
if old != match.group(2):
self._fail('Unexpected git diff input name for %s.' % match.group(1))
if not lines:
self._fail('Missing git diff output name for %s.' % match.group(1))
match = re.match(r'^(rename|copy) to (.+)$', lines.pop(0))
if not match:
self._fail('Missing git diff output name for %s.' % match.group(1))
if new != match.group(2):
self._fail('Unexpected git diff output name for %s.' % match.group(1))
match = re.match(r'^new file mode (\d{6})$', line)
if match:
mode = match.group(1)
# Only look at owner ACL for executable.
if bool(int(mode[4]) & 4):
self.svn_properties.append(('svn:executable', '*'))
# Handle ---/+++
while lines:
......
......@@ -393,6 +393,18 @@ class PatchTest(unittest.TestCase):
p = patch.FilePatchDiff('wtf2', diff, [])
self.assertTrue(p)
def testGitExe(self):
diff = (
'diff --git a/natsort_test.py b/natsort_test.py\n'
'new file mode 100755\n'
'--- /dev/null\n'
'+++ b/natsort_test.py\n'
'@@ -0,0 +1,1 @@\n'
'+#!/usr/bin/env python\n')
self.assertEquals(
[('svn:executable', '*')],
patch.FilePatchDiff('natsort_test.py', diff, []).svn_properties)
if __name__ == '__main__':
unittest.main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment