diff -r 7699d3212994 -r 68822b7cdd01 hgext/extdiff.py --- a/hgext/extdiff.py Sat Jul 11 23:26:33 2015 -0400 +++ b/hgext/extdiff.py Wed Jul 11 20:48:51 2012 -0400 @@ -63,6 +63,7 @@ from mercurial.i18n import _ from mercurial.node import short, nullid from mercurial import cmdutil, scmutil, util, commands, encoding, filemerge +from mercurial import archival import os, shlex, shutil, tempfile, re cmdtable = {} @@ -84,33 +85,34 @@ dirname = '%s.%s' % (dirname, short(node)) base = os.path.join(tmproot, dirname) os.mkdir(base) + fns_and_mtime = [] + if node is not None: ui.note(_('making snapshot of %d files from rev %s\n') % (len(files), short(node))) else: ui.note(_('making snapshot of %d files from working directory\n') % (len(files))) - wopener = scmutil.opener(base) - fns_and_mtime = [] - ctx = repo[node] - for fn in sorted(files): - wfn = util.pconvert(fn) - if wfn not in ctx: - # File doesn't exist; could be a bogus modify - continue - ui.note(' %s\n' % wfn) - dest = os.path.join(base, wfn) - fctx = ctx[wfn] - data = repo.wwritedata(wfn, fctx.data()) - if 'l' in fctx.flags(): - wopener.symlink(data, wfn) - else: - wopener.write(wfn, data) - if 'x' in fctx.flags(): - util.setflags(dest, False, True) - if node is None: - fns_and_mtime.append((dest, repo.wjoin(fn), - os.lstat(dest).st_mtime)) + + if files: + repo.ui.setconfig("ui", "archivemeta", False) + + archival.archive(repo, base, node, 'files', + matchfn=scmutil.matchfiles(repo, files)) + + ctx = repo[node] + for fn in sorted(files): + wfn = util.pconvert(fn) + if wfn not in ctx: + # File doesn't exist; could be a bogus modify + continue + ui.note(' %s\n' % wfn) + + if node is None: + dest = os.path.join(base, wfn) + + fns_and_mtime.append((dest, repo.wjoin(fn), + os.lstat(dest).st_mtime)) return dirname, fns_and_mtime def dodiff(ui, repo, cmdline, pats, opts):