hgext/extdiff.py
changeset 26228 0fd20a71abdb
parent 26227 611ba118ebfc
child 26229 d1530c6e8613
--- a/hgext/extdiff.py	Wed Sep 09 20:48:09 2015 -0400
+++ b/hgext/extdiff.py	Wed Sep 09 21:07:38 2015 -0400
@@ -147,7 +147,12 @@
 
     matcher = scmutil.match(repo[node2], pats, opts)
 
-    if True:
+    if opts.get('patch'):
+        if subrepos:
+            raise util.Abort(_('--patch cannot be used with --subrepos'))
+        if node2 is None:
+            raise util.Abort(_('--patch requires two revisions'))
+    else:
         mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher,
                                                    listsubrepos=subrepos)[:3])
         if do3way:
@@ -163,7 +168,7 @@
 
     tmproot = tempfile.mkdtemp(prefix='extdiff.')
     try:
-        if True:
+        if not opts.get('patch'):
             # Always make a copy of node1a (and node1b, if applicable)
             dir1a_files = mod_a | rem_a | ((mod_b | add_b) - add_a)
             dir1a = snapshot(ui, repo, dir1a_files, node1a, tmproot,
@@ -217,6 +222,18 @@
                         dir1b = os.devnull
                 dir2 = os.path.join(dir2root, dir2, common_file)
                 label2 = common_file + rev2
+        else:
+            # XXX: export doesn't support -I/-X like extdiff does
+            template = 'hg-%h.patch'
+            cmdutil.export(repo, [repo[node1a].rev(), repo[node2].rev()],
+                           template=repo.vfs.reljoin(tmproot, template))
+            label1a = cmdutil.makefilename(repo, template, node1a)
+            label2 = cmdutil.makefilename(repo, template, node2)
+            dir1a = repo.vfs.reljoin(tmproot, label1a)
+            dir2 = repo.vfs.reljoin(tmproot, label2)
+            dir1b = None
+            label1b = None
+            fns_and_mtime = []
 
         # Function to quote file/dir names in the argument string.
         # When not operating in 3-way mode, an empty string is
@@ -260,6 +277,7 @@
      _('pass option to comparison program'), _('OPT')),
     ('r', 'rev', [], _('revision'), _('REV')),
     ('c', 'change', '', _('change made by revision'), _('REV')),
+    ('', 'patch', None, _('compare patches for two revisions'))
     ] + commands.walkopts + commands.subrepoopts,
     _('hg extdiff [OPT]... [FILE]...'),
     inferrepo=True)