From d67872d2f47b2f09a0e2aa4adfd62e6f69154c9b Mon Sep 17 00:00:00 2001 From: pelya Date: Wed, 28 Mar 2012 14:49:58 +0300 Subject: [PATCH] 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 Tested-by: Shawn Pearce --- project.py | 5 ++++- subcmds/diff.py | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/project.py b/project.py index 946a6ac3..303abe33 100644 --- a/project.py +++ b/project.py @@ -749,7 +749,7 @@ class Project(object): 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 @@ class Project(object): 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 e0247140..f233f690 100644 --- a/subcmds/diff.py +++ b/subcmds/diff.py @@ -20,8 +20,21 @@ class Diff(PagedCommand): helpSummary = "Show changes between commit and working tree" helpUsage = """ %prog [...] + +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)