def apply_patch(self, patch_file, base_path=None, base_dir=None, p=None, revert=False): """Apply the given patch to index. This will take the given patch file and apply it to the index, scheduling all changes for commit. """ cmd = ['git', 'apply', '-3'] if revert: cmd.append('-R') if p: cmd += ['-p', p] cmd.append(patch_file) rc, data = self._execute(cmd, with_errors=True, return_error_code=True) if rc == 0: return PatchResult(applied=True, patch_output=data) elif 'with conflicts' in data: return PatchResult( applied=True, has_conflicts=True, conflicting_files=[ line.split(' ', 1)[1] for line in data.splitlines() if line.startswith('U') ], patch_output=data) else: return PatchResult(applied=False, patch_output=data)
def apply_patch(self, patch_file, base_path=None, base_dir=None, p=None, revert=False): """Apply the given patch to index. This will take the given patch file and apply it to the index, scheduling all changes for commit. Args: patch_file (unicode): The name of the patch file to apply. base_path (unicode, unused): The base path that the diff was generated in. All git diffs are absolute to the repository root, so this is unused. base_dir (unicode, unused): The path of the current working directory relative to the root of the repository. All git diffs are absolute to the repository root, so this is unused. p (unicode, optional): The prefix level of the diff. revert (bool, optional): Whether the patch should be reverted rather than applied. Returns: rbtools.clients.PatchResult: The result of the patch operation. """ cmd = ['git', 'apply', '-3'] if revert: cmd.append('-R') if p: cmd += ['-p', p] cmd.append(patch_file) rc, data = self._execute(cmd, ignore_errors=True, with_errors=True, return_error_code=True) if rc == 0: return PatchResult(applied=True, patch_output=data) elif 'with conflicts' in data: return PatchResult( applied=True, has_conflicts=True, conflicting_files=[ line.split(' ', 1)[1] for line in data.splitlines() if line.startswith('U') ], patch_output=data) else: return PatchResult(applied=False, patch_output=data)
def apply_patch(self, patch_file, base_path, base_dir, p=None, revert=False): """Apply the patch and return a PatchResult indicating its success.""" if not is_valid_version(self.subversion_client_version, self.PATCH_MIN_VERSION): raise MinimumVersionError( 'Using "rbt patch" with the SVN backend requires at least ' 'svn 1.7.0') if base_dir and not base_dir.startswith(base_path): # The patch was created in either a higher level directory or a # directory not under this one. We should exclude files from the # patch that are not under this directory. excluded, empty = self._exclude_files_not_in_tree( patch_file, base_path) if excluded: logging.warn('This patch was generated in a different ' 'directory. To prevent conflicts, all files ' 'not under the current directory have been ' 'excluded. To apply all files in this ' 'patch, apply this patch from the %s directory.' % base_dir) if empty: logging.warn('All files were excluded from the patch.') cmd = ['patch'] p_num = p or self._get_p_number(base_path, base_dir) if p_num >= 0: cmd.append('--strip=%s' % p_num) if revert: cmd.append('--reverse-diff') cmd.append(six.text_type(patch_file)) rc, patch_output = self._run_svn(cmd, return_error_code=True) if self.supports_empty_files(): try: with open(patch_file, 'rb') as f: patch = f.read() except IOError as e: logging.error('Unable to read file %s: %s', patch_file, e) return self.apply_patch_for_empty_files(patch, p_num, revert=revert) # TODO: What is svn's equivalent of a garbage patch message? return PatchResult(applied=(rc == 0), patch_output=patch_output)
def apply_patch(self, patch_file, base_path=None, base_dir=None, p=None): """Import the given patch. This will take the given patch file and apply it to the working directory. """ cmd = ['hg', 'patch', '--no-commit'] if p: cmd += ['-p', p] cmd.append(patch_file) rc, data = self._execute(cmd, with_errors=True, return_error_code=True) return PatchResult(applied=(rc == 0), patch_output=data)
def apply_patch(self, patch_file, base_path=None, base_dir=None, p=None, revert=False): """Apply the given patch. This will take the given patch file and apply it to the working directory. Args: patch_file (unicode): The name of the patch file to apply. base_path (unicode, unused): The base path that the diff was generated in. All hg diffs are absolute to the repository root, so this is unused. base_dir (unicode, unused): The path of the current working directory relative to the root of the repository. All hg diffs are absolute to the repository root, so this is unused. p (unicode, optional): The prefix level of the diff. revert (bool, optional): Whether the patch should be reverted rather than applied. Returns: rbtools.clients.PatchResult: The result of the patch operation. """ cmd = [self._exe, 'patch', '--no-commit'] if p: cmd += ['-p', p] cmd.append(patch_file) rc, data = self._execute(cmd, with_errors=True, return_error_code=True, results_unicode=False) return PatchResult(applied=(rc == 0), patch_output=data)