Chromium Code Reviews| Index: checkout.py |
| diff --git a/checkout.py b/checkout.py |
| index e952b193c1889b930b06e0f5304894615ed37f9e..dc228b8a1134fb97c0b8b111626395c99bcec98e 100644 |
| --- a/checkout.py |
| +++ b/checkout.py |
| @@ -177,16 +177,17 @@ class SvnMixIn(object): |
| # configuration directory is not necessary. |
| non_interactive = False |
| - def _add_svn_flags(self, args, non_interactive): |
| + def _add_svn_flags(self, args, non_interactive, credentials=True): |
| args = ['svn'] + args |
| if not self.svn_config.default: |
| args.extend(['--config-dir', self.svn_config.svn_config_dir]) |
| if not self.svn_config.default or self.non_interactive or non_interactive: |
| args.append('--non-interactive') |
| - if self.commit_user: |
| - args.extend(['--username', self.commit_user]) |
| - if self.commit_pwd: |
| - args.extend(['--password', self.commit_pwd]) |
| + if credentials: |
| + if self.commit_user: |
| + args.extend(['--username', self.commit_user]) |
| + if self.commit_pwd: |
| + args.extend(['--password', self.commit_pwd]) |
| return args |
| def _check_call_svn(self, args, **kwargs): |
| @@ -196,13 +197,14 @@ class SvnMixIn(object): |
| return subprocess2.check_call_out( |
| self._add_svn_flags(args, False), **kwargs) |
| - def _check_output_svn(self, args, **kwargs): |
| + def _check_output_svn(self, args, credentials=True, **kwargs): |
| """Runs svn and throws an exception if the command failed. |
| Returns the output. |
| """ |
| kwargs.setdefault('cwd', self.project_path) |
| - return subprocess2.check_output(self._add_svn_flags(args, True), **kwargs) |
| + return subprocess2.check_output( |
| + self._add_svn_flags(args, True, credentials), **kwargs) |
| @staticmethod |
| def _parse_svn_info(output, key): |
| @@ -248,9 +250,12 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
| post_processor = post_processor or [] |
| for p in patches: |
| try: |
| + # It is important to use credentials=False otherwise it could leak in |
| + # the error message. It is not necessary here anyway. |
|
Dirk Pranke
2011/05/30 20:10:59
change "it" to "they" in "it could leak" and "it i
|
| stdout = '' |
| if p.is_delete: |
| - stdout += self._check_output_svn(['delete', p.filename, '--force']) |
| + stdout += self._check_output_svn( |
| + ['delete', p.filename, '--force'], credentials=False) |
| else: |
| new = not os.path.exists(p.filename) |
| @@ -266,7 +271,7 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
| for dir_to_create in reversed(dirs_to_create): |
| os.mkdir(os.path.join(self.project_path, dir_to_create)) |
| stdout += self._check_output_svn( |
| - ['add', dir_to_create, '--force']) |
| + ['add', dir_to_create, '--force'], credentials=False) |
| if p.is_binary: |
| with open(os.path.join(self.project_path, p.filename), 'wb') as f: |
| @@ -276,21 +281,29 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
| stdout += subprocess2.check_output( |
| cmd, stdin=p.get(), cwd=self.project_path) |
| if new: |
| - stdout += self._check_output_svn(['add', p.filename, '--force']) |
| + 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]) |
| - for prop, value in self.svn_config.auto_props.iteritems(): |
| + ['propset', prop[0], prop[1], p.filename], credentials=False) |
| + for prop, values in self.svn_config.auto_props.iteritems(): |
| if fnmatch.fnmatch(p.filename, prop): |
| - stdout += self._check_output_svn( |
| - ['propset'] + value.split('=', 1) + [p.filename]) |
| + for value in values.split(';'): |
| + if '=' not in value: |
| + params = [value, '*'] |
| + else: |
| + params = value.split('=', 1) |
| + stdout += self._check_output_svn( |
| + ['propset'] + params + [p.filename], credentials=False) |
| for post in post_processor: |
| post(self, p) |
| except OSError, e: |
| raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
| except subprocess.CalledProcessError, e: |
| raise PatchApplicationFailed( |
| - p.filename, '%s%s' % (stdout, getattr(e, 'stdout', ''))) |
| + p.filename, |
| + 'While running %s;\n%s%s' % ( |
| + ' '.join(e.cmd), stdout, getattr(e, 'stdout', ''))) |
| def commit(self, commit_message, user): |
| logging.info('Committing patch for %s' % user) |