Option for 'repo diff' to generate output suitable for 'patch' cmd The -u option causes 'repo diff' to generate diff output with file paths relative to the repository root, so the output can be applied to the Unix 'patch' command. The name '-u' was selected for convenience, because both 'diff' and 'git diff' accept the option with the same name to generate an 'unified diff' output suitable for 'patch' command. Change-Id: I79c8356db4ed20ecaccc258b3ba139db76666fe0 Reviewed-on: https://gerrit-review.googlesource.com/34380 Reviewed-by: Shawn Pearce <sop@google.com> Tested-by: Shawn Pearce <sop@google.com>
diff --git a/project.py b/project.py index 946a6ac..303abe3 100644 --- a/project.py +++ b/project.py
@@ -749,7 +749,7 @@ return 'DIRTY' - def PrintWorkTreeDiff(self): + def PrintWorkTreeDiff(self, absolute_paths=False): """Prints the status of the repository to stdout. """ out = DiffColoring(self.config) @@ -757,6 +757,9 @@ if out.is_on: cmd.append('--color') cmd.append(HEAD) + if absolute_paths: + cmd.append('--src-prefix=a/%s/' % self.relpath) + cmd.append('--dst-prefix=b/%s/' % self.relpath) cmd.append('--') p = GitCommand(self, cmd,
diff --git a/subcmds/diff.py b/subcmds/diff.py index e024714..f233f69 100644 --- a/subcmds/diff.py +++ b/subcmds/diff.py
@@ -20,8 +20,21 @@ helpSummary = "Show changes between commit and working tree" helpUsage = """ %prog [<project>...] + +The -u option causes '%prog' to generate diff output with file paths +relative to the repository root, so the output can be applied +to the Unix 'patch' command. """ + def _Options(self, p): + def cmd(option, opt_str, value, parser): + setattr(parser.values, option.dest, list(parser.rargs)) + while parser.rargs: + del parser.rargs[0] + p.add_option('-u', '--absolute', + dest='absolute', action='store_true', + help='Paths are relative to the repository root') + def Execute(self, opt, args): for project in self.GetProjects(args): - project.PrintWorkTreeDiff() + project.PrintWorkTreeDiff(opt.absolute)