diff --git a/checkout.py b/checkout.py index c61552f32..c6743479d 100644 --- a/checkout.py +++ b/checkout.py @@ -357,9 +357,13 @@ class SvnCheckout(CheckoutBase, SvnMixIn): # using above. stdout += self._check_output_svn( ['add', p.filename, '--force'], credentials=False) - for prop in p.svn_properties: - stdout += self._check_output_svn( - ['propset', prop[0], prop[1], p.filename], credentials=False) + for name, value in p.svn_properties: + if value is None: + stdout += self._check_output_svn( + ['propdel', '--quiet', name, p.filename], credentials=False) + else: + stdout += self._check_output_svn( + ['propset', name, value, p.filename], credentials=False) for prop, values in self.svn_config.auto_props.iteritems(): if fnmatch.fnmatch(p.filename, prop): for value in values.split(';'): @@ -528,18 +532,18 @@ class GitCheckoutBase(CheckoutBase): # p.diff_hunks. git apply manages all that already. stdout += self._check_output_git( ['apply', '--index', '-p%s' % p.patchlevel], stdin=p.get(True)) - for prop in p.svn_properties: + for name, _ in p.svn_properties: # Ignore some known auto-props flags through .subversion/config, # bails out on the other ones. # TODO(maruel): Read ~/.subversion/config and detect the rules that # applies here to figure out if the property will be correctly # handled. - if not prop[0] in ( + if not name in ( 'svn:eol-style', 'svn:executable', 'svn:mime-type'): raise patch.UnsupportedPatchFormat( p.filename, 'Cannot apply svn property %s to file %s.' % ( - prop[0], p.filename)) + name, p.filename)) for post in post_processors: post(self, p) except OSError, e: diff --git a/patch.py b/patch.py index b8325da48..e7bf56648 100644 --- a/patch.py +++ b/patch.py @@ -404,9 +404,10 @@ class FilePatchDiff(FilePatchBase): if match: mode = match.group(2) # Only look at owner ACL for executable. - # TODO(maruel): Add support to remove a property. if bool(int(mode[4]) & 1): self.svn_properties.append(('svn:executable', '*')) + else: + self.svn_properties.append(('svn:executable', None)) return match = re.match(r'^--- (.*)$', line)