| Index: patch.py
|
| diff --git a/patch.py b/patch.py
|
| index bac992d43603fafb68cf7585f11f17b61e4ef3dc..c627f48c85b79a8ab1c65da9b30e654d012d4db1 100644
|
| --- a/patch.py
|
| +++ b/patch.py
|
| @@ -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:
|
|
|