From d7ca616cf184242d51de584c8fc3fa4af133799f Mon Sep 17 00:00:00 2001 From: "maruel@chromium.org" Date: Wed, 29 Aug 2012 17:22:22 +0000 Subject: [PATCH] Enable support to remove the executable bit on the CQ. R=petermayo@chromium.org BUG=124817 Review URL: https://chromiumcodereview.appspot.com/10890039 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@153908 0039d316-1c4b-4281-b951-d872f2087c98 --- checkout.py | 16 ++++++++++------ patch.py | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) 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)