Mercurial > hg
annotate hgext/extdiff.py @ 30545:f3cff00c7a00
crecord: make _getstatuslines update numstatuslines
We are going to make the text in the status window dynamically generated,
so its size would be dynamic. Change getstatuslines to update
"numstatuslines" automatically. Fix an issue where "numstatuslines" being 1
makes the chunkpad disappear.
author | Jun Wu <quark@fb.com> |
---|---|
date | Wed, 23 Nov 2016 22:23:15 +0000 |
parents | d5883fd055c6 |
children | caf7e1c5efe4 |
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 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8076
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
7 |
8934
9dda4c73fc3b
extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8873
diff
changeset
|
8 '''command to allow external programs to compare revisions |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8866
diff
changeset
|
9 |
9286
a8fdcec4ab34
doc: fix quotes mismatches affecting rst
Cédric Duval <cedricduval@free.fr>
parents:
9257
diff
changeset
|
10 The extdiff Mercurial extension allows you to use external programs |
9257
50ebe8845a1b
extdiff: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9207
diff
changeset
|
11 to compare revisions, or revision with working directory. The external |
50ebe8845a1b
extdiff: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9207
diff
changeset
|
12 diff programs are called with a configurable set of options and two |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
13 non-option arguments: paths to directories containing snapshots of |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
14 files to compare. |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
15 |
14327
d943412e2fba
extdiff: grammar "allows to" -> "allows one to"
Javi Merino <cibervicho@gmail.com>
parents:
14322
diff
changeset
|
16 The extdiff extension also allows you to configure new diff commands, so |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
17 you do not need to type :hg:`extdiff -p kdiff3` always. :: |
3127
8e8deb8035a4
Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents:
3090
diff
changeset
|
18 |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
19 [extdiff] |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
20 # add new command that runs GNU diff(1) in 'context diff' mode |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
21 cdiff = gdiff -Nprc5 |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
22 ## or the old way: |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
23 #cmd.cdiff = gdiff |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
24 #opts.cdiff = -Nprc5 |
3127
8e8deb8035a4
Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents:
3090
diff
changeset
|
25 |
23150
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
26 # add new command called meld, runs meld (no need to name twice). If |
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
27 # the meld executable is not available, the meld tool in [merge-tools] |
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
28 # will be used, if available |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
29 meld = |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
30 |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
31 # add new command called vimdiff, runs gvimdiff with DirDiff plugin |
9257
50ebe8845a1b
extdiff: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9207
diff
changeset
|
32 # (see http://www.vim.org/scripts/script.php?script_id=102) Non |
50ebe8845a1b
extdiff: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9207
diff
changeset
|
33 # English user, be sure to put "let g:DirDiffDynamicDiffText = 1" in |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
34 # your .vimrc |
16242
55174ab81973
extdiff: escape filenames with vim/DirDiff and make quoting work with Windows
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14739
diff
changeset
|
35 vimdiff = gvim -f "+next" \\ |
55174ab81973
extdiff: escape filenames with vim/DirDiff and make quoting work with Windows
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14739
diff
changeset
|
36 "+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))" |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
37 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
38 Tool arguments can include variables that are expanded at runtime:: |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
39 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
40 $parent1, $plabel1 - filename, descriptive label of first parent |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
41 $child, $clabel - filename, descriptive label of child revision |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
42 $parent2, $plabel2 - filename, descriptive label of second parent |
14045
1c38777f7b8a
extdiff: add repository root as a variable
Steven Stallion <sstallion@gmail.com>
parents:
14024
diff
changeset
|
43 $root - repository root |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
44 $parent is an alias for $parent1. |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
45 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
46 The extdiff extension will look in your [diff-tools] and [merge-tools] |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
47 sections for diff tool arguments, when none are specified in [extdiff]. |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
48 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
49 :: |
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
50 |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
51 [extdiff] |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
52 kdiff3 = |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
53 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
54 [diff-tools] |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
55 kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
56 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
57 You can use -I/-X and list of file or directory names like normal |
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
58 :hg:`diff` command. The extdiff extension makes snapshots of only |
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
59 needed files, so running the external diff program will actually be |
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
60 pretty fast (at least faster than having to compare the entire tree). |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
61 ''' |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
62 |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
63 from __future__ import absolute_import |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
64 |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
65 import os |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
66 import re |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
67 import shlex |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
68 import shutil |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
69 import tempfile |
3891 | 70 from mercurial.i18n import _ |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
71 from mercurial.node import ( |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
72 nullid, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
73 short, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
74 ) |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
75 from mercurial import ( |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
76 archival, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
77 cmdutil, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
78 commands, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
79 error, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
80 filemerge, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
81 scmutil, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
82 util, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
83 ) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
84 |
21246
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
85 cmdtable = {} |
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
86 command = cmdutil.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29723
diff
changeset
|
87 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24193
diff
changeset
|
88 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24193
diff
changeset
|
89 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24193
diff
changeset
|
90 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29723
diff
changeset
|
91 testedwith = 'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16686
diff
changeset
|
92 |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
93 def snapshot(ui, repo, files, node, tmproot, listsubrepos): |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
94 '''snapshot files as of some revision |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
95 if not using snapshot, -I/-X does not work and recursive diff |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
96 in tools like kdiff3 and meld displays too many files.''' |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
97 dirname = os.path.basename(repo.root) |
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
98 if dirname == "": |
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
99 dirname = "root" |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
100 if node is not None: |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
101 dirname = '%s.%s' % (dirname, short(node)) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
102 base = os.path.join(tmproot, dirname) |
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
103 os.mkdir(base) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
104 fns_and_mtime = [] |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
105 |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
106 if node is not None: |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
107 ui.note(_('making snapshot of %d files from rev %s\n') % |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
108 (len(files), short(node))) |
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
109 else: |
8066 | 110 ui.note(_('making snapshot of %d files from working directory\n') % |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
111 (len(files))) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
112 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
113 if files: |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
114 repo.ui.setconfig("ui", "archivemeta", False) |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
115 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
116 archival.archive(repo, base, node, 'files', |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
117 matchfn=scmutil.matchfiles(repo, files), |
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
118 subrepos=listsubrepos) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
119 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
120 for fn in sorted(files): |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
121 wfn = util.pconvert(fn) |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
122 ui.note(' %s\n' % wfn) |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
123 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
124 if node is None: |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
125 dest = os.path.join(base, wfn) |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
126 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
127 fns_and_mtime.append((dest, repo.wjoin(fn), |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
128 os.lstat(dest).st_mtime)) |
6103
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
129 return dirname, fns_and_mtime |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
130 |
23681
9476cb62298e
extdiff: rename the name of an argument for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23680
diff
changeset
|
131 def dodiff(ui, repo, cmdline, pats, opts): |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16743
diff
changeset
|
132 '''Do the actual diff: |
6103
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
133 |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
134 - copy to a temp structure if diffing 2 internal revisions |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
135 - copy to a temp structure if diffing working revision with |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
136 another one and more than 1 file is changed |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
137 - just invoke the diff for a single file in the working dir |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
138 ''' |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
139 |
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
140 revs = opts.get('rev') |
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
141 change = opts.get('change') |
23681
9476cb62298e
extdiff: rename the name of an argument for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23680
diff
changeset
|
142 do3way = '$parent2' in cmdline |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
143 |
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
144 if revs and change: |
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
145 msg = _('cannot specify --rev and --change at the same time') |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
146 raise error.Abort(msg) |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
147 elif change: |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14232
diff
changeset
|
148 node2 = scmutil.revsingle(repo, change, None).node() |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
149 node1a, node1b = repo.changelog.parents(node2) |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
150 else: |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14232
diff
changeset
|
151 node1a, node2 = scmutil.revpair(repo, revs) |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
152 if not revs: |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13758
diff
changeset
|
153 node1b = repo.dirstate.p2() |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
154 else: |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
155 node1b = nullid |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
156 |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
157 # Disable 3-way merge if there is only one parent |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
158 if do3way: |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
159 if node1b == nullid: |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
160 do3way = False |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
161 |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
162 subrepos=opts.get('subrepos') |
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
163 |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14327
diff
changeset
|
164 matcher = scmutil.match(repo[node2], pats, opts) |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
165 |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
166 if opts.get('patch'): |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
167 if subrepos: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
168 raise error.Abort(_('--patch cannot be used with --subrepos')) |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
169 if node2 is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
170 raise error.Abort(_('--patch requires two revisions')) |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
171 else: |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
172 mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher, |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
173 listsubrepos=subrepos)[:3]) |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
174 if do3way: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
175 mod_b, add_b, rem_b = map(set, |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
176 repo.status(node1b, node2, matcher, |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
177 listsubrepos=subrepos)[:3]) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
178 else: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
179 mod_b, add_b, rem_b = set(), set(), set() |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
180 modadd = mod_a | add_a | mod_b | add_b |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
181 common = modadd | rem_a | rem_b |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
182 if not common: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
183 return 0 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
184 |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
185 tmproot = tempfile.mkdtemp(prefix='extdiff.') |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
186 try: |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
187 if not opts.get('patch'): |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
188 # Always make a copy of node1a (and node1b, if applicable) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
189 dir1a_files = mod_a | rem_a | ((mod_b | add_b) - add_a) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
190 dir1a = snapshot(ui, repo, dir1a_files, node1a, tmproot, |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
191 subrepos)[0] |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
192 rev1a = '@%d' % repo[node1a].rev() |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
193 if do3way: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
194 dir1b_files = mod_b | rem_b | ((mod_a | add_a) - add_b) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
195 dir1b = snapshot(ui, repo, dir1b_files, node1b, tmproot, |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
196 subrepos)[0] |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
197 rev1b = '@%d' % repo[node1b].rev() |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
198 else: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
199 dir1b = None |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
200 rev1b = '' |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
201 |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
202 fns_and_mtime = [] |
5137
2be225ea5722
extdiff: do single file diffs from the wc with no copy
Brad Schick <schickb@gmail.com>
parents:
5136
diff
changeset
|
203 |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
204 # If node2 in not the wc or there is >1 change, copy it |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
205 dir2root = '' |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
206 rev2 = '' |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
207 if node2: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
208 dir2 = snapshot(ui, repo, modadd, node2, tmproot, subrepos)[0] |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
209 rev2 = '@%d' % repo[node2].rev() |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
210 elif len(common) > 1: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
211 #we only actually need to get the files to copy back to |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
212 #the working dir in this case (because the other cases |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
213 #are: diffing 2 revisions or single file -- in which case |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
214 #the file is already directly passed to the diff tool). |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
215 dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot, |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
216 subrepos) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
217 else: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
218 # This lets the diff tool open the changed file directly |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
219 dir2 = '' |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
220 dir2root = repo.root |
5137
2be225ea5722
extdiff: do single file diffs from the wc with no copy
Brad Schick <schickb@gmail.com>
parents:
5136
diff
changeset
|
221 |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
222 label1a = rev1a |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
223 label1b = rev1b |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
224 label2 = rev2 |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
225 |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
226 # If only one change, diff the files instead of the directories |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
227 # Handle bogus modifies correctly by checking if the files exist |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
228 if len(common) == 1: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
229 common_file = util.localpath(common.pop()) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
230 dir1a = os.path.join(tmproot, dir1a, common_file) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
231 label1a = common_file + rev1a |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
232 if not os.path.isfile(dir1a): |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
233 dir1a = os.devnull |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
234 if do3way: |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
235 dir1b = os.path.join(tmproot, dir1b, common_file) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
236 label1b = common_file + rev1b |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
237 if not os.path.isfile(dir1b): |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
238 dir1b = os.devnull |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
239 dir2 = os.path.join(dir2root, dir2, common_file) |
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
240 label2 = common_file + rev2 |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
241 else: |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
242 template = 'hg-%h.patch' |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
243 cmdutil.export(repo, [repo[node1a].rev(), repo[node2].rev()], |
26229
d1530c6e8613
extdiff: enable -I/-X with --patch
Matt Harbison <matt_harbison@yahoo.com>
parents:
26228
diff
changeset
|
244 template=repo.vfs.reljoin(tmproot, template), |
d1530c6e8613
extdiff: enable -I/-X with --patch
Matt Harbison <matt_harbison@yahoo.com>
parents:
26228
diff
changeset
|
245 match=matcher) |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
246 label1a = cmdutil.makefilename(repo, template, node1a) |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
247 label2 = cmdutil.makefilename(repo, template, node2) |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
248 dir1a = repo.vfs.reljoin(tmproot, label1a) |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
249 dir2 = repo.vfs.reljoin(tmproot, label2) |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
250 dir1b = None |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
251 label1b = None |
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
252 fns_and_mtime = [] |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
253 |
9945
5e4ef56b4d42
extdiff: wrap long lines in docstring and comments
Martin Geisler <mg@lazybytes.net>
parents:
9941
diff
changeset
|
254 # Function to quote file/dir names in the argument string. |
5e4ef56b4d42
extdiff: wrap long lines in docstring and comments
Martin Geisler <mg@lazybytes.net>
parents:
9941
diff
changeset
|
255 # When not operating in 3-way mode, an empty string is |
5e4ef56b4d42
extdiff: wrap long lines in docstring and comments
Martin Geisler <mg@lazybytes.net>
parents:
9941
diff
changeset
|
256 # returned for parent2 |
20674
2aafd5854243
extdiff: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents:
17773
diff
changeset
|
257 replace = {'parent': dir1a, 'parent1': dir1a, 'parent2': dir1b, |
2aafd5854243
extdiff: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents:
17773
diff
changeset
|
258 'plabel1': label1a, 'plabel2': label1b, |
2aafd5854243
extdiff: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents:
17773
diff
changeset
|
259 'clabel': label2, 'child': dir2, |
2aafd5854243
extdiff: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents:
17773
diff
changeset
|
260 'root': repo.root} |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
261 def quote(match): |
23969
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
262 pre = match.group(2) |
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
263 key = match.group(3) |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
264 if not do3way and key == 'parent2': |
23969
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
265 return pre |
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
266 return pre + util.shellquote(replace[key]) |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
267 |
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
268 # Match parent2 first, so 'parent1?' will match both parent1 and parent |
23969
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
269 regex = (r'''(['"]?)([^\s'"$]*)''' |
01e5b7323a48
extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich <madski@unity3d.com>
parents:
23681
diff
changeset
|
270 r'\$(parent2|parent1?|child|plabel1|plabel2|clabel|root)\1') |
23681
9476cb62298e
extdiff: rename the name of an argument for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23680
diff
changeset
|
271 if not do3way and not re.search(regex, cmdline): |
9476cb62298e
extdiff: rename the name of an argument for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23680
diff
changeset
|
272 cmdline += ' $parent1 $child' |
9476cb62298e
extdiff: rename the name of an argument for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23680
diff
changeset
|
273 cmdline = re.sub(regex, quote, cmdline) |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
274 |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9286
diff
changeset
|
275 ui.debug('running %r in %s\n' % (cmdline, tmproot)) |
23270
41c03b7592ed
util.system: use ui.system() in place of optional ui.fout parameter
Yuya Nishihara <yuya@tcha.org>
parents:
23152
diff
changeset
|
276 ui.system(cmdline, cwd=tmproot) |
6103
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
277 |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
278 for copy_fn, working_fn, mtime in fns_and_mtime: |
14021
3eb632d9cf42
extdiff: fix broken symlinks handling (issue1909)
Patrick Mezard <pmezard@gmail.com>
parents:
11321
diff
changeset
|
279 if os.lstat(copy_fn).st_mtime != mtime: |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9286
diff
changeset
|
280 ui.debug('file changed while diffing. ' |
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9286
diff
changeset
|
281 'Overwriting: %s (src: %s)\n' % (working_fn, copy_fn)) |
6103
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
282 util.copyfile(copy_fn, working_fn) |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
283 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
284 return 1 |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
285 finally: |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
286 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
|
287 shutil.rmtree(tmproot) |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
288 |
27680
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
289 extdiffopts = [ |
21246
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
290 ('o', 'option', [], |
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
291 _('pass option to comparison program'), _('OPT')), |
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
292 ('r', 'rev', [], _('revision'), _('REV')), |
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
293 ('c', 'change', '', _('change made by revision'), _('REV')), |
26228
0fd20a71abdb
extdiff: add a --patch argument for diffing changeset deltas
Matt Harbison <matt_harbison@yahoo.com>
parents:
26227
diff
changeset
|
294 ('', 'patch', None, _('compare patches for two revisions')) |
27680
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
295 ] + commands.walkopts + commands.subrepoopts |
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
296 |
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
297 @command('extdiff', |
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
298 [('p', 'program', '', _('comparison program to run'), _('CMD')), |
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
299 ] + extdiffopts, |
21781
f0c3b95af47f
extdiff: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21246
diff
changeset
|
300 _('hg extdiff [OPT]... [FILE]...'), |
f0c3b95af47f
extdiff: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21246
diff
changeset
|
301 inferrepo=True) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
302 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
|
303 '''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
|
304 |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
305 Show differences between revisions for the specified files, using |
7983
7b813bdbd5d0
Change double spaces to single spaces in help texts.
Martin Geisler <mg@daimi.au.dk>
parents:
7758
diff
changeset
|
306 an external program. The default program used is diff, with |
2906
453097750fbf
extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2903
diff
changeset
|
307 default options "-Npru". |
453097750fbf
extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2903
diff
changeset
|
308 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
309 To select a different program, use the -p/--program option. The |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
310 program will be passed the names of two directories to compare. To |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
311 pass additional options to the program, use -o/--option. These |
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
312 will be passed before the names of the directories to compare. |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
313 |
7990
cdb848e8c4b5
extdiff: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
314 When two revision arguments are given, then changes are shown |
cdb848e8c4b5
extdiff: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
315 between those revisions. If only one revision is specified then |
cdb848e8c4b5
extdiff: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
316 that revision is compared to the working directory, and, when no |
cdb848e8c4b5
extdiff: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
317 revisions are specified, the working directory files are compared |
cdb848e8c4b5
extdiff: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
318 to its parent.''' |
9519
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
319 program = opts.get('program') |
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
320 option = opts.get('option') |
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
321 if not program: |
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
322 program = 'diff' |
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
323 option = option or ['-Npru'] |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
324 cmdline = ' '.join(map(util.shellquote, [program] + option)) |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
325 return dodiff(ui, repo, cmdline, pats, opts) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
326 |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
327 class savedcmd(object): |
29723
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
328 """use external program to diff repository (or selected files) |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
329 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
330 Show differences between revisions for the specified files, using |
29723
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
331 the following program:: |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
332 |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
333 %(path)s |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
334 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
335 When two revision arguments are given, then changes are shown |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
336 between those revisions. If only one revision is specified then |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
337 that revision is compared to the working directory, and, when no |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
338 revisions are specified, the working directory files are compared |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
339 to its parent. |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
340 """ |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
341 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
342 def __init__(self, path, cmdline): |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
343 # We can't pass non-ASCII through docstrings (and path is |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
344 # in an unknown encoding anyway) |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
345 docpath = path.encode("string-escape") |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
346 self.__doc__ = self.__doc__ % {'path': util.uirepr(docpath)} |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
347 self._cmdline = cmdline |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
348 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
349 def __call__(self, ui, repo, *pats, **opts): |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
350 options = ' '.join(map(util.shellquote, opts['option'])) |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
351 if options: |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
352 options = ' ' + options |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
353 return dodiff(ui, repo, self._cmdline + options, pats, opts) |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
354 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
355 def uisetup(ui): |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
356 for cmd, path in ui.configitems('extdiff'): |
24193
fa4642439aa0
extdiff: expand tildes and variables in paths to user-supplied diff programs
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23969
diff
changeset
|
357 path = util.expandpath(path) |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
358 if cmd.startswith('cmd.'): |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
359 cmd = cmd[4:] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
360 if not path: |
23150
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
361 path = util.findexe(cmd) |
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
362 if path is None: |
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
363 path = filemerge.findexternaltool(ui, cmd) or cmd |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
364 diffopts = ui.config('extdiff', 'opts.' + cmd, '') |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
365 cmdline = util.shellquote(path) |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
366 if diffopts: |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
367 cmdline += ' ' + diffopts |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
368 elif cmd.startswith('opts.'): |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
369 continue |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
370 else: |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
371 if path: |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
372 # case "cmd = path opts" |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
373 cmdline = path |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
374 diffopts = len(shlex.split(cmdline)) > 1 |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
375 else: |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
376 # case "cmd =" |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
377 path = util.findexe(cmd) |
23150
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
378 if path is None: |
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
379 path = filemerge.findexternaltool(ui, cmd) or cmd |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
380 cmdline = util.shellquote(path) |
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
381 diffopts = False |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
382 # look for diff arguments in [diff-tools] then [merge-tools] |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
383 if not diffopts: |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
384 args = ui.config('diff-tools', cmd+'.diffargs') or \ |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
385 ui.config('merge-tools', cmd+'.diffargs') |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
386 if args: |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
387 cmdline += ' ' + args |
27681
174069440929
extdiff: use @command decorator to set up diff commands
Yuya Nishihara <yuya@tcha.org>
parents:
27680
diff
changeset
|
388 command(cmd, extdiffopts[:], _('hg %s [OPTION]... [FILE]...') % cmd, |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
389 inferrepo=True)(savedcmd(path, cmdline)) |
29722
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
390 |
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
391 # tell hggettext to extract docstrings from these functions: |
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
392 i18nfunctions = [savedcmd] |