diff mercurial/commands.py @ 9725:3f522d2fa633

diff: add --inverse option Most of the time, one can reverse a diff by swapping the revisions passed with -r but it happens that if you use the global -R, and diff against the tip of the current repo, you can't swap the revisions. One use-case for that is reviewing changes from a bundle before unbundling. One could also pipe the output of `hg diff` to a command line filter that reverses the diff, but that would remove the benefit from color diffs. Therefore, having an option in `hg diff` to reverse a diff is a good thing. The option flag selection was tricky. GNU patch uses -R/--reverse but -R is already used as a global option and --reverse would make --rev ambiguous.
author Yannick Gingras <ygingras@ygingras.net>
date Thu, 05 Nov 2009 15:18:56 +0100
parents fe1b19bfe75b
children 36c388a1aa51
line wrap: on
line diff
--- a/mercurial/commands.py	Thu Nov 05 15:06:35 2009 +0100
+++ b/mercurial/commands.py	Thu Nov 05 15:18:56 2009 +0100
@@ -1102,6 +1102,7 @@
     revs = opts.get('rev')
     change = opts.get('change')
     stat = opts.get('stat')
+    inv = opts.get('inverse')
 
     if revs and change:
         msg = _('cannot specify --rev and --change at the same time')
@@ -1112,6 +1113,9 @@
     else:
         node1, node2 = cmdutil.revpair(repo, revs)
 
+    if inv:
+        node1, node2 = node2, node1
+
     if stat:
         opts['unified'] = '0'
     diffopts = patch.diffopts(ui, opts)
@@ -3280,6 +3284,7 @@
 
 diffopts2 = [
     ('p', 'show-function', None, _('show which function each change is in')),
+    ('', 'inverse', None, _('produce a diff that undoes the changes')),
     ('w', 'ignore-all-space', None,
      _('ignore white space when comparing lines')),
     ('b', 'ignore-space-change', None,