annotate hgext/extdiff.py @ 3330:49966b5ab16f

fix traceback of extdiff after a merge - files that comes from a different branch are marked as modified but aren't present in the original manifest - add a testcase for extdiff and for regular diff
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Wed, 11 Oct 2006 16:35:09 +0200
parents f145d04899d2
children 67f44b825784
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1 # extdiff.py - external diff program support for mercurial
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
2 #
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
3 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
4 #
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
6 # of the GNU General Public License, incorporated herein by reference.
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
7 #
2913
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
8 # The `extdiff' Mercurial extension allows you to use external programs
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
9 # to compare revisions, or revision with working dir. The external diff
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
10 # programs are called with a configurable set of options and two
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
11 # non-option arguments: paths to directories containing snapshots of
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
12 # files to compare.
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
13 #
2913
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
14 # To enable this extension:
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
15 #
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
16 # [extensions]
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
17 # hgext.extdiff =
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
18 #
2913
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
19 # The `extdiff' extension also allows to configure new diff commands, so
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
20 # you do not need to type "hg extdiff -p kdiff3" always.
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
21 #
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
22 # [extdiff]
2913
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
23 # # add new command that runs GNU diff(1) in 'context diff' mode
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
24 # cmd.cdiff = gdiff
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
25 # opts.cdiff = -Nprc5
3127
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
26
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
27 # # add new command called vdiff, runs kdiff3
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
28 # cmd.vdiff = kdiff3
3127
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
29
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
30 # # add new command called meld, runs meld (no need to name twice)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
31 # cmd.meld =
3127
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
32
2675
d99a92b7acad extdiff : add comment on how to use vim for doing directoy diff
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2338
diff changeset
33 # # add new command called vimdiff, runs gvimdiff with DirDiff plugin
d99a92b7acad extdiff : add comment on how to use vim for doing directoy diff
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2338
diff changeset
34 # #(see http://www.vim.org/scripts/script.php?script_id=102)
3127
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
35 # # Non english user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
36 # # your .vimrc
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
37 # cmd.vimdiff = gvim
8e8deb8035a4 Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 3090
diff changeset
38 # opts.vimdiff = -f '+next' '+execute "DirDiff" argv(0) argv(1)'
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
39 #
2913
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
40 # Each custom diff commands can have two parts: a `cmd' and an `opts'
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
41 # part. The cmd.xxx option defines the name of an executable program
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
42 # that will be run, and opts.xxx defines a set of command-line options
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
43 # which will be inserted to the command between the program name and
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
44 # the files/directories to diff (i.e. the cdiff example above).
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
45 #
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
46 # You can use -I/-X and list of file or directory names like normal
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
47 # "hg diff" command. The `extdiff' extension makes snapshots of only
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
48 # needed files, so running the external diff program will actually be
05f357b70cb0 Tune a bit the extdiff toplevel comments/samples.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2906
diff changeset
49 # pretty fast (at least faster than having to compare the entire tree).
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
50
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
51 from mercurial.demandload import demandload
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
52 from mercurial.i18n import gettext as _
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
53 from mercurial.node import *
3090
eeaf9bcdfa25 Move revision parsing into cmdutil.
Brendan Cully <brendan@kublai.com>
parents: 3074
diff changeset
54 demandload(globals(), 'mercurial:cmdutil,util os shutil tempfile')
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
55
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
56 def dodiff(ui, repo, diffcmd, diffopts, pats, opts):
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
57 def snapshot_node(files, node):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
58 '''snapshot files as of some revision'''
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
59 changes = repo.changelog.read(node)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
60 mf = repo.manifest.read(changes[0])
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
61 dirname = '%s.%s' % (os.path.basename(repo.root), short(node))
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
62 base = os.path.join(tmproot, dirname)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
63 os.mkdir(base)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
64 if not ui.quiet:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
65 ui.write_err(_('making snapshot of %d files from rev %s\n') %
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
66 (len(files), short(node)))
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
67 for fn in files:
3330
49966b5ab16f fix traceback of extdiff after a merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3129
diff changeset
68 if not fn in mf:
49966b5ab16f fix traceback of extdiff after a merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3129
diff changeset
69 # skipping new file after a merge ?
49966b5ab16f fix traceback of extdiff after a merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3129
diff changeset
70 continue
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
71 wfn = util.pconvert(fn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
72 ui.note(' %s\n' % wfn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
73 dest = os.path.join(base, wfn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
74 destdir = os.path.dirname(dest)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
75 if not os.path.isdir(destdir):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
76 os.makedirs(destdir)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
77 repo.wwrite(wfn, repo.file(fn).read(mf[fn]), open(dest, 'w'))
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
78 return dirname
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
79
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
80 def snapshot_wdir(files):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
81 '''snapshot files from working directory.
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
82 if not using snapshot, -I/-X does not work and recursive diff
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
83 in tools like kdiff3 and meld displays too many files.'''
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
84 dirname = os.path.basename(repo.root)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
85 base = os.path.join(tmproot, dirname)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
86 os.mkdir(base)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
87 if not ui.quiet:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
88 ui.write_err(_('making snapshot of %d files from working dir\n') %
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
89 (len(files)))
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
90 for fn in files:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
91 wfn = util.pconvert(fn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
92 ui.note(' %s\n' % wfn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
93 dest = os.path.join(base, wfn)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
94 destdir = os.path.dirname(dest)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
95 if not os.path.isdir(destdir):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
96 os.makedirs(destdir)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
97 fp = open(dest, 'w')
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
98 for chunk in util.filechunkiter(repo.wopener(wfn)):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
99 fp.write(chunk)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
100 return dirname
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
101
3090
eeaf9bcdfa25 Move revision parsing into cmdutil.
Brendan Cully <brendan@kublai.com>
parents: 3074
diff changeset
102 node1, node2 = cmdutil.revpair(ui, repo, opts['rev'])
2902
2fe4d99ae726 Update extdiff for recent refactoring
Brendan Cully <brendan@kublai.com>
parents: 2875
diff changeset
103 files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2675
diff changeset
104 modified, added, removed, deleted, unknown = repo.status(
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2675
diff changeset
105 node1, node2, files, match=matchfn)[:5]
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
106 if not (modified or added or removed):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
107 return 0
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
108
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
109 tmproot = tempfile.mkdtemp(prefix='extdiff.')
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
110 try:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
111 dir1 = snapshot_node(modified + removed, node1)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
112 if node2:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
113 dir2 = snapshot_node(modified + added, node2)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
114 else:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
115 dir2 = snapshot_wdir(modified + added)
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
116 cmdline = ('%s %s %s %s' %
3074
be98c5ce4022 extdiff: do not shell-quote options to new commands
TK Soh <teekaysoh@yahoo.com>
parents: 2959
diff changeset
117 (util.shellquote(diffcmd), ' '.join(diffopts),
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
118 util.shellquote(dir1), util.shellquote(dir2)))
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
119 ui.debug('running %r in %s\n' % (cmdline, tmproot))
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
120 util.system(cmdline, cwd=tmproot)
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
121 return 1
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
122 finally:
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
123 ui.note(_('cleaning up temp directory\n'))
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
124 shutil.rmtree(tmproot)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
125
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
126 def extdiff(ui, repo, *pats, **opts):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
127 '''use external program to diff repository (or selected files)
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
128
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
129 Show differences between revisions for the specified files, using
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
130 an external program. The default program used is diff, with
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
131 default options "-Npru".
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
132
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
133 To select a different program, use the -p option. The program
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
134 will be passed the names of two directories to compare. To pass
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
135 additional options to the program, use the -o option. These will
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
136 be passed before the names of the directories to compare.
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
137
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
138 When two revision arguments are given, then changes are
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
139 shown between those revisions. If only one revision is
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
140 specified then that revision is compared to the working
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
141 directory, and, when no revisions are specified, the
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
142 working directory files are compared to its parent.'''
3129
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
143 program = opts['program'] or 'diff'
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
144 if opts['program']:
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
145 option = opts['option']
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
146 else:
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
147 option = opts['option'] or ['-Npru']
f145d04899d2 extdiff: use the default option only if the default program is used
TK Soh <teekaysoh@yahoo.com>
parents: 3127
diff changeset
148 return dodiff(ui, repo, program, option, pats, opts)
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
149
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
150 cmdtable = {
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
151 "extdiff":
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
152 (extdiff,
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
153 [('p', 'program', '', _('comparison program to run')),
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
154 ('o', 'option', [], _('pass option to comparison program')),
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
155 ('r', 'rev', [], _('revision')),
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
156 ('I', 'include', [], _('include names matching the given patterns')),
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
157 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
158 _('hg extdiff [OPT]... [FILE]...')),
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
159 }
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
160
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
161 def uisetup(ui):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
162 for cmd, path in ui.configitems('extdiff'):
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
163 if not cmd.startswith('cmd.'): continue
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
164 cmd = cmd[4:]
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
165 if not path: path = cmd
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
166 diffopts = ui.config('extdiff', 'opts.' + cmd, '')
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
167 diffopts = diffopts and [diffopts] or []
2959
7f5fc4b347de extdiff: make new diff commands pick up their options correctly
TK Soh <teekaysoh@yahoo.com>
parents: 2913
diff changeset
168 def save(cmd, path, diffopts):
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
169 '''use closure to save diff command to use'''
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
170 def mydiff(ui, repo, *pats, **opts):
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
171 return dodiff(ui, repo, path, diffopts, pats, opts)
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
172 mydiff.__doc__ = '''use %(path)r to diff repository (or selected files)
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
173
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
174 Show differences between revisions for the specified
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
175 files, using the %(path)r program.
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
176
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
177 When two revision arguments are given, then changes are
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
178 shown between those revisions. If only one revision is
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
179 specified then that revision is compared to the working
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
180 directory, and, when no revisions are specified, the
2906
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
181 working directory files are compared to its parent.''' % {
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
182 'path': path,
453097750fbf extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2903
diff changeset
183 }
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
184 return mydiff
2959
7f5fc4b347de extdiff: make new diff commands pick up their options correctly
TK Soh <teekaysoh@yahoo.com>
parents: 2913
diff changeset
185 cmdtable[cmd] = (save(cmd, path, diffopts),
2333
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
186 cmdtable['extdiff'][1][1:],
de0c05afa511 new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
187 _('hg %s [OPT]... [FILE]...') % cmd)