--- a/hgext/extdiff.py Wed Jul 11 20:48:51 2012 -0400
+++ b/hgext/extdiff.py Sun Jul 15 12:43:10 2012 -0400
@@ -74,7 +74,7 @@
# leave the attribute unspecified.
testedwith = 'internal'
-def snapshot(ui, repo, files, node, tmproot):
+def snapshot(ui, repo, files, node, tmproot, listsubrepos):
'''snapshot files as of some revision
if not using snapshot, -I/-X does not work and recursive diff
in tools like kdiff3 and meld displays too many files.'''
@@ -98,7 +98,8 @@
repo.ui.setconfig("ui", "archivemeta", False)
archival.archive(repo, base, node, 'files',
- matchfn=scmutil.matchfiles(repo, files))
+ matchfn=scmutil.matchfiles(repo, files),
+ subrepos=listsubrepos)
ctx = repo[node]
for fn in sorted(files):
@@ -146,10 +147,14 @@
if node1b == nullid:
do3way = False
+ subrepos=opts.get('subrepos')
+
matcher = scmutil.match(repo[node2], pats, opts)
- mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher)[:3])
+ mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher,
+ listsubrepos=subrepos)[:3])
if do3way:
- mod_b, add_b, rem_b = map(set, repo.status(node1b, node2, matcher)[:3])
+ mod_b, add_b, rem_b = map(set, repo.status(node1b, node2, matcher,
+ listsubrepos=subrepos)[:3])
else:
mod_b, add_b, rem_b = set(), set(), set()
modadd = mod_a | add_a | mod_b | add_b
@@ -161,11 +166,12 @@
try:
# 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)[0]
+ dir1a = snapshot(ui, repo, dir1a_files, node1a, tmproot, subrepos)[0]
rev1a = '@%d' % repo[node1a].rev()
if do3way:
dir1b_files = mod_b | rem_b | ((mod_a | add_a) - add_b)
- dir1b = snapshot(ui, repo, dir1b_files, node1b, tmproot)[0]
+ dir1b = snapshot(ui, repo, dir1b_files, node1b, tmproot,
+ subrepos)[0]
rev1b = '@%d' % repo[node1b].rev()
else:
dir1b = None
@@ -177,14 +183,15 @@
dir2root = ''
rev2 = ''
if node2:
- dir2 = snapshot(ui, repo, modadd, node2, tmproot)[0]
+ dir2 = snapshot(ui, repo, modadd, node2, tmproot, subrepos)[0]
rev2 = '@%d' % repo[node2].rev()
elif len(common) > 1:
#we only actually need to get the files to copy back to
#the working dir in this case (because the other cases
#are: diffing 2 revisions or single file -- in which case
#the file is already directly passed to the diff tool).
- dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot)
+ dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot,
+ subrepos)
else:
# This lets the diff tool open the changed file directly
dir2 = ''
@@ -252,7 +259,7 @@
_('pass option to comparison program'), _('OPT')),
('r', 'rev', [], _('revision'), _('REV')),
('c', 'change', '', _('change made by revision'), _('REV')),
- ] + commands.walkopts,
+ ] + commands.walkopts + commands.subrepoopts,
_('hg extdiff [OPT]... [FILE]...'),
inferrepo=True)
def extdiff(ui, repo, *pats, **opts):