Mercurial > hg
annotate hgext/extdiff.py @ 51748:3149dc824a94
cext: use sys.executable instead of deprecated Py_GetProgramFullPath
Fix warning with Python 3.13:
mercurial/cext/parsers.c: In function 'check_python_version':
mercurial/cext/parsers.c:1243:30: warning: 'Py_GetProgramFullPath' is deprecated [-Wdeprecated-declarations]
1243 | Py_GetProgramFullPath());
| ^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/python3.13/Python.h:119,
from mercurial/cext/parsers.c:11:
/usr/include/python3.13/pylifecycle.h:43:43: note: declared here
43 | Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
| ^~~~~~~~~~~~~~~~~~~~~
At this point in time, the PyConfig struct memory has been released and the PyConfig API can't be used.
https://docs.python.org/3.13/c-api/init.html#c.Py_GetProgramFullPath recommands
using sys.executable instead. Let's assume that will work in all versions.
It would perhaps be better to use PySys_GetObject, but I prefer to stay
consistent with how the same function is retrieving sys.hexversion.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Thu, 11 Jan 2024 20:32:07 +0100 |
parents | ca7bde5dbafb |
children | b60f25f00e94 |
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 |
37209
2208149c4b8e
extdiff: document that it copies modified files back to working directory
Kyle Lippincott <spectral@google.com>
parents:
37120
diff
changeset
|
16 If there is more than one file being compared and the "child" revision |
2208149c4b8e
extdiff: document that it copies modified files back to working directory
Kyle Lippincott <spectral@google.com>
parents:
37120
diff
changeset
|
17 is the working directory, any modifications made in the external diff |
2208149c4b8e
extdiff: document that it copies modified files back to working directory
Kyle Lippincott <spectral@google.com>
parents:
37120
diff
changeset
|
18 program will be copied back to the working directory from the temporary |
2208149c4b8e
extdiff: document that it copies modified files back to working directory
Kyle Lippincott <spectral@google.com>
parents:
37120
diff
changeset
|
19 directory. |
2208149c4b8e
extdiff: document that it copies modified files back to working directory
Kyle Lippincott <spectral@google.com>
parents:
37120
diff
changeset
|
20 |
14327
d943412e2fba
extdiff: grammar "allows to" -> "allows one to"
Javi Merino <cibervicho@gmail.com>
parents:
14322
diff
changeset
|
21 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
|
22 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
|
23 |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
24 [extdiff] |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
25 # 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
|
26 cdiff = gdiff -Nprc5 |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
27 ## or the old way: |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
28 #cmd.cdiff = gdiff |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
29 #opts.cdiff = -Nprc5 |
3127
8e8deb8035a4
Update [extdiff] configuration sample for vimdiff,
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents:
3090
diff
changeset
|
30 |
23150
aff73c777b0b
extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com>
parents:
23149
diff
changeset
|
31 # 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
|
32 # 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
|
33 # will be used, if available |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
34 meld = |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
35 |
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
36 # 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
|
37 # (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
|
38 # 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
|
39 # 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
|
40 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
|
41 "+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))" |
5245
a1efa71f3ece
Improve extdiff configuration.
Brendan Cully <brendan@kublai.com>
parents:
5147
diff
changeset
|
42 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
43 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
|
44 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
45 $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
|
46 $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
|
47 $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
|
48 $root - repository root |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
49 $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
|
50 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
51 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
|
52 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
|
53 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
54 :: |
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
55 |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
56 [extdiff] |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
57 kdiff3 = |
11184
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
58 |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
59 [diff-tools] |
7d99edddbaea
extdiff: add labels, read diff arguments from [merge-tools]
Steve Borho <steve@borho.org>
parents:
10394
diff
changeset
|
60 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
|
61 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
62 If a program has a graphical interface, it might be interesting to tell |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
63 Mercurial about it. It will prevent the program from being mistakenly |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
64 used in a terminal-only environment (such as an SSH terminal session), |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
65 and will make :hg:`extdiff --per-file` open multiple file diffs at once |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
66 instead of one by one (if you still want to open file diffs one by one, |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
67 you can use the --confirm option). |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
68 |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
69 Declaring that a tool has a graphical interface can be done with the |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
70 ``gui`` flag next to where ``diffargs`` are specified: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
71 |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
72 :: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
73 |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
74 [diff-tools] |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
75 kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
76 kdiff3.gui = true |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
77 |
11191
c45a47bc4114
extdiff: fix reST syntax in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
11184
diff
changeset
|
78 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
|
79 :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
|
80 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
|
81 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
|
82 ''' |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
83 |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
84 |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
85 import os |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
86 import re |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
87 import shutil |
36781
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
36268
diff
changeset
|
88 import stat |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
89 import subprocess |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37604
diff
changeset
|
90 |
3891 | 91 from mercurial.i18n import _ |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
92 from mercurial.node import ( |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
93 nullrev, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
94 short, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
95 ) |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
96 from mercurial import ( |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
97 archival, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
98 cmdutil, |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
99 encoding, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
100 error, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
101 filemerge, |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37253
diff
changeset
|
102 formatter, |
48117
b74e128676d4
errors: raise InputError from revpair() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46843
diff
changeset
|
103 logcmdutil, |
30678
caf7e1c5efe4
py3: have a bytes version of shlex.split()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29841
diff
changeset
|
104 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32283
diff
changeset
|
105 registrar, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
106 scmutil, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
107 util, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
108 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
109 from mercurial.utils import ( |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
110 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
111 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
112 ) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
113 |
21246
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
114 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32283
diff
changeset
|
115 command = registrar.command(cmdtable) |
34777
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
116 |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
117 configtable = {} |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
118 configitem = registrar.configitem(configtable) |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
119 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
120 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
121 b'extdiff', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
122 br'opts\..*', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
123 default=b'', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
124 generic=True, |
34777
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
125 ) |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
126 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
127 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
128 b'extdiff', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
129 br'gui\..*', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
130 generic=True, |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
131 ) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
132 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
133 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
134 b'diff-tools', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
135 br'.*\.diffargs$', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
136 default=None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
137 generic=True, |
34778
bf138446ac2f
configitems: register the 'extdata.*.diffargs' config
Boris Feld <boris.feld@octobus.net>
parents:
34777
diff
changeset
|
138 ) |
bf138446ac2f
configitems: register the 'extdata.*.diffargs' config
Boris Feld <boris.feld@octobus.net>
parents:
34777
diff
changeset
|
139 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
140 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
141 b'diff-tools', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
142 br'.*\.gui$', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
143 generic=True, |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
144 ) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
145 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29723
diff
changeset
|
146 # 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
|
147 # 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
|
148 # 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
|
149 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 testedwith = b'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16686
diff
changeset
|
151 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
152 |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
153 def snapshot(ui, repo, files, node, tmproot, listsubrepos): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
154 """snapshot files as of some revision |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
155 if not using snapshot, -I/-X does not work and recursive diff |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
156 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
|
157 dirname = os.path.basename(repo.root) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 if dirname == b"": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 dirname = b"root" |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
160 if node is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 dirname = b'%s.%s' % (dirname, short(node)) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
162 base = os.path.join(tmproot, dirname) |
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
163 os.mkdir(base) |
32217
affd753ddaf1
extdiff: copy back files to the working directory if the size changed
Matt Harbison <matt_harbison@yahoo.com>
parents:
31451
diff
changeset
|
164 fnsandstat = [] |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
165 |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
166 if node is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
167 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 _(b'making snapshot of %d files from rev %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
169 % (len(files), short(node)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
170 ) |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
171 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
172 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
173 _(b'making snapshot of %d files from working directory\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
174 % (len(files)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
175 ) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
176 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
177 if files: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
178 repo.ui.setconfig(b"ui", b"archivemeta", False) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
179 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
180 archival.archive( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
181 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
182 base, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
183 node, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
184 b'files', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
185 match=scmutil.matchfiles(repo, files), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
186 subrepos=listsubrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
187 ) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
188 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
189 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
|
190 wfn = util.pconvert(fn) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 ui.note(b' %s\n' % wfn) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
192 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
193 if node is None: |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
194 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
|
195 |
32217
affd753ddaf1
extdiff: copy back files to the working directory if the size changed
Matt Harbison <matt_harbison@yahoo.com>
parents:
31451
diff
changeset
|
196 fnsandstat.append((dest, repo.wjoin(fn), os.lstat(dest))) |
affd753ddaf1
extdiff: copy back files to the working directory if the size changed
Matt Harbison <matt_harbison@yahoo.com>
parents:
31451
diff
changeset
|
197 return dirname, fnsandstat |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
198 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
199 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
200 def formatcmdline( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
201 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
202 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
203 do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
204 parent1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
205 plabel1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
206 parent2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
207 plabel2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
208 child, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
209 clabel, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
210 ): |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
211 # Function to quote file/dir names in the argument string. |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
212 # When not operating in 3-way mode, an empty string is |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
213 # returned for parent2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
214 replace = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
215 b'parent': parent1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 b'parent1': parent1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 b'parent2': parent2, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 b'plabel1': plabel1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 b'plabel2': plabel2, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 b'child': child, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 b'clabel': clabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 b'root': repo_root, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
223 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
224 |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
225 def quote(match): |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
226 pre = match.group(2) |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
227 key = match.group(3) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
228 if not do3way and key == b'parent2': |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
229 return pre |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
230 return pre + procutil.shellquote(replace[key]) |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
231 |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
232 # Match parent2 first, so 'parent1?' will match both parent1 and parent |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
233 regex = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
234 br'''(['"]?)([^\s'"$]*)''' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
235 br'\$(parent2|parent1?|child|plabel1|plabel2|clabel|root)\1' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
236 ) |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
237 if not do3way and not re.search(regex, cmdline): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 cmdline += b' $parent1 $child' |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
239 return re.sub(regex, quote, cmdline) |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
241 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
242 def _systembackground(cmd, environ=None, cwd=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
243 """like 'procutil.system', but returns the Popen object directly |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
244 so we don't have to wait on it. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
245 """ |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
246 env = procutil.shellenviron(environ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
247 proc = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
248 procutil.tonativestr(cmd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
249 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
250 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
251 env=procutil.tonativeenv(env), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
252 cwd=pycompat.rapply(procutil.tonativestr, cwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
253 ) |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
254 return proc |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
255 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
256 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
257 def _runperfilediff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
258 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
259 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
260 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
261 guitool, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
262 do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
263 confirm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
264 commonfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
265 tmproot, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
266 dir1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
267 dir1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
268 dir2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
269 rev1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
270 rev1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
271 rev2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
272 ): |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
273 # Note that we need to sort the list of files because it was |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
274 # built in an "unstable" way and it's annoying to get files in a |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
275 # random order, especially when "confirm" mode is enabled. |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
276 waitprocs = [] |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
277 totalfiles = len(commonfiles) |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
278 for idx, commonfile in enumerate(sorted(commonfiles)): |
45399
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
279 path1a = os.path.join(dir1a, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
280 label1a = commonfile + rev1a |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
281 if not os.path.isfile(path1a): |
43790
765a9c299c44
py3: make a pycompat.osdevnull, use it in extdiff
Kyle Lippincott <spectral@google.com>
parents:
43638
diff
changeset
|
282 path1a = pycompat.osdevnull |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
283 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 path1b = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 label1b = b'' |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
286 if do3way: |
45399
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
287 path1b = os.path.join(dir1b, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
288 label1b = commonfile + rev1b |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
289 if not os.path.isfile(path1b): |
43790
765a9c299c44
py3: make a pycompat.osdevnull, use it in extdiff
Kyle Lippincott <spectral@google.com>
parents:
43638
diff
changeset
|
290 path1b = pycompat.osdevnull |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
291 |
45400
1bed1b00b18d
extdiff: remove dir2root and pass full path as dir2 in _runperfilediff()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45399
diff
changeset
|
292 path2 = os.path.join(dir2, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
293 label2 = commonfile + rev2 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
294 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
295 if confirm: |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
296 # Prompt before showing this diff |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
297 difffiles = _(b'diff %s (%d of %d)') % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
298 commonfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
299 idx + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
300 totalfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
301 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
302 responses = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 b'[Yns?]' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
304 b'$$ &Yes, show diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 b'$$ &No, skip this diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 b'$$ &Skip remaining diffs' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 b'$$ &? (display help)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
308 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 r = ui.promptchoice(b'%s %s' % (difffiles, responses)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
310 if r == 3: # ? |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
311 while r == 3: |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
312 for c, t in ui.extractchoices(responses)[1]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 ui.write(b'%s - %s\n' % (c, encoding.lower(t))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
314 r = ui.promptchoice(b'%s %s' % (difffiles, responses)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
315 if r == 0: # yes |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
316 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
317 elif r == 1: # no |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
318 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
319 elif r == 2: # skip |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
320 break |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
321 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
322 curcmdline = formatcmdline( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
323 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
324 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
325 do3way=do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
326 parent1=path1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
327 plabel1=label1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
328 parent2=path1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
329 plabel2=label1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
330 child=path2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
331 clabel=label2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
332 ) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
333 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
334 if confirm or not guitool: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
335 # Run the comparison program and wait for it to exit |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
336 # before we show the next file. |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
337 # This is because either we need to wait for confirmation |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
338 # from the user between each invocation, or because, as far |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
339 # as we know, the tool doesn't have a GUI, in which case |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
340 # we can't run multiple CLI programs at the same time. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
341 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 b'running %r in %s\n' % (pycompat.bytestr(curcmdline), tmproot) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
343 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 ui.system(curcmdline, cwd=tmproot, blockedtag=b'extdiff') |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
345 else: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
346 # Run the comparison program but don't wait, as we're |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
347 # going to rapid-fire each file diff and then wait on |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
348 # the whole group. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
349 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 b'running %r in %s (backgrounded)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
351 % (pycompat.bytestr(curcmdline), tmproot) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
352 ) |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
353 proc = _systembackground(curcmdline, cwd=tmproot) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
354 waitprocs.append(proc) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
355 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
356 if waitprocs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
357 with ui.timeblockedsection(b'extdiff'): |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
358 for proc in waitprocs: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
359 proc.wait() |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
360 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
361 |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
362 def diffpatch(ui, repo, node1, node2, tmproot, matcher, cmdline): |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
363 template = b'hg-%h.patch' |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
364 # write patches to temporary files |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
365 with formatter.nullformatter(ui, b'extdiff', {}) as fm: |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
366 cmdutil.export( |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
367 repo, |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
368 [repo[node1].rev(), repo[node2].rev()], |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
369 fm, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
370 fntemplate=repo.vfs.reljoin(tmproot, template), |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
371 match=matcher, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
372 ) |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
373 label1 = cmdutil.makefilename(repo[node1], template) |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
374 label2 = cmdutil.makefilename(repo[node2], template) |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
375 file1 = repo.vfs.reljoin(tmproot, label1) |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
376 file2 = repo.vfs.reljoin(tmproot, label2) |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
377 cmdline = formatcmdline( |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
378 cmdline, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
379 repo.root, |
45128
d23881b17388
extdiff: remove unrequired do3way argument to diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45127
diff
changeset
|
380 # no 3way while comparing patches |
d23881b17388
extdiff: remove unrequired do3way argument to diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45127
diff
changeset
|
381 do3way=False, |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
382 parent1=file1, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
383 plabel1=label1, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
384 # while comparing patches, there is no second parent |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
385 parent2=None, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
386 plabel2=None, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
387 child=file2, |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
388 clabel=label2, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
389 ) |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
390 ui.debug(b'running %r in %s\n' % (pycompat.bytestr(cmdline), tmproot)) |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
391 ui.system(cmdline, cwd=tmproot, blockedtag=b'extdiff') |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
392 return 1 |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
393 |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
394 |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
395 def diffrevs( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
396 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
397 repo, |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
398 ctx1a, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
399 ctx1b, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
400 ctx2, |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
401 matcher, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
402 tmproot, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
403 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
404 do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
405 guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
406 opts, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
407 ): |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
408 subrepos = opts.get(b'subrepos') |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
409 |
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
410 # calculate list of files changed between both revs |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
411 st = ctx1a.status(ctx2, matcher, listsubrepos=subrepos) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
412 mod_a, add_a, rem_a = set(st.modified), set(st.added), set(st.removed) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
413 if do3way: |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
414 stb = ctx1b.status(ctx2, matcher, listsubrepos=subrepos) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
415 mod_b, add_b, rem_b = ( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
416 set(stb.modified), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
417 set(stb.added), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
418 set(stb.removed), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
419 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
420 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
421 mod_b, add_b, rem_b = set(), set(), set() |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
422 modadd = mod_a | add_a | mod_b | add_b |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
423 common = modadd | rem_a | rem_b |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
424 if not common: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
425 return 0 |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
426 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
427 # Always make a copy of ctx1a (and ctx1b, if applicable) |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
428 # dir1a should contain files which are: |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
429 # * modified or removed from ctx1a to ctx2 |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
430 # * modified or added from ctx1b to ctx2 |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
431 # (except file added from ctx1a to ctx2 as they were not present in |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
432 # ctx1a) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
433 dir1a_files = mod_a | rem_a | ((mod_b | add_b) - add_a) |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
434 dir1a = snapshot(ui, repo, dir1a_files, ctx1a.node(), tmproot, subrepos)[0] |
46132
dfe2760db2a6
extdiff: fix crash when showing diff from wdir()
Martin von Zweigbergk <martinvonz@google.com>
parents:
46131
diff
changeset
|
435 rev1a = b'' if ctx1a.rev() is None else b'@%d' % ctx1a.rev() |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
436 if do3way: |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
437 # file calculation criteria same as dir1a |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
438 dir1b_files = mod_b | rem_b | ((mod_a | add_a) - add_b) |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
439 dir1b = snapshot( |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
440 ui, repo, dir1b_files, ctx1b.node(), tmproot, subrepos |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
441 )[0] |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
442 rev1b = b'@%d' % ctx1b.rev() |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
443 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
444 dir1b = None |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
445 rev1b = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
446 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
447 fnsandstat = [] |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
448 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
449 # If ctx2 is not the wc or there is >1 change, copy it |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
450 dir2root = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
451 rev2 = b'' |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
452 if ctx2.node() is not None: |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
453 dir2 = snapshot(ui, repo, modadd, ctx2.node(), tmproot, subrepos)[0] |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
454 rev2 = b'@%d' % ctx2.rev() |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
455 elif len(common) > 1: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
456 # we only actually need to get the files to copy back to |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
457 # the working dir in this case (because the other cases |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
458 # are: diffing 2 revisions or single file -- in which case |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
459 # the file is already directly passed to the diff tool). |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
460 dir2, fnsandstat = snapshot(ui, repo, modadd, None, tmproot, subrepos) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
461 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
462 # This lets the diff tool open the changed file directly |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
463 dir2 = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
464 dir2root = repo.root |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
465 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
466 label1a = rev1a |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
467 label1b = rev1b |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
468 label2 = rev2 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
469 |
45401
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
470 if not opts.get(b'per_file'): |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
471 # If only one change, diff the files instead of the directories |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
472 # Handle bogus modifies correctly by checking if the files exist |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
473 if len(common) == 1: |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
474 common_file = util.localpath(common.pop()) |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
475 dir1a = os.path.join(tmproot, dir1a, common_file) |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
476 label1a = common_file + rev1a |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
477 if not os.path.isfile(dir1a): |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
478 dir1a = pycompat.osdevnull |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
479 if do3way: |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
480 dir1b = os.path.join(tmproot, dir1b, common_file) |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
481 label1b = common_file + rev1b |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
482 if not os.path.isfile(dir1b): |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
483 dir1b = pycompat.osdevnull |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
484 dir2 = os.path.join(dir2root, dir2, common_file) |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
485 label2 = common_file + rev2 |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
486 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
487 # Run the external tool on the 2 temp directories or the patches |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
488 cmdline = formatcmdline( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
489 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
490 repo.root, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
491 do3way=do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
492 parent1=dir1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
493 plabel1=label1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
494 parent2=dir1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
495 plabel2=label1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
496 child=dir2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
497 clabel=label2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
498 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
499 ui.debug(b'running %r in %s\n' % (pycompat.bytestr(cmdline), tmproot)) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
500 ui.system(cmdline, cwd=tmproot, blockedtag=b'extdiff') |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
501 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
502 # Run the external tool once for each pair of files |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
503 _runperfilediff( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
504 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
505 repo.root, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
506 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
507 guitool=guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
508 do3way=do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
509 confirm=opts.get(b'confirm'), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
510 commonfiles=common, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
511 tmproot=tmproot, |
45399
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
512 dir1a=os.path.join(tmproot, dir1a), |
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
513 dir1b=os.path.join(tmproot, dir1b) if do3way else None, |
45400
1bed1b00b18d
extdiff: remove dir2root and pass full path as dir2 in _runperfilediff()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45399
diff
changeset
|
514 dir2=os.path.join(dir2root, dir2), |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
515 rev1a=rev1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
516 rev1b=rev1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
517 rev2=rev2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
518 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
519 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
520 for copy_fn, working_fn, st in fnsandstat: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
521 cpstat = os.lstat(copy_fn) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
522 # Some tools copy the file and attributes, so mtime may not detect |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
523 # all changes. A size check will detect more cases, but not all. |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
524 # The only certain way to detect every case is to diff all files, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
525 # which could be expensive. |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
526 # copyfile() carries over the permission, so the mode check could |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
527 # be in an 'elif' branch, but for the case where the file has |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
528 # changed without affecting mtime or size. |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
529 if ( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
530 cpstat[stat.ST_MTIME] != st[stat.ST_MTIME] |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
531 or cpstat.st_size != st.st_size |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
532 or (cpstat.st_mode & 0o100) != (st.st_mode & 0o100) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
533 ): |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
534 ui.debug( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
535 b'file changed while diffing. ' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
536 b'Overwriting: %s (src: %s)\n' % (working_fn, copy_fn) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
537 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
538 util.copyfile(copy_fn, working_fn) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
539 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
540 return 1 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
541 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
542 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
543 def dodiff(ui, repo, cmdline, pats, opts, guitool=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
544 """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
|
545 |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
546 - 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
|
547 - 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
|
548 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
|
549 - just invoke the diff for a single file in the working dir |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
550 """ |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
551 |
44808
aac816f584ad
diff: use cmdutil.check_at_most_one_arg() for checking --rev/--change
Martin von Zweigbergk <martinvonz@google.com>
parents:
43790
diff
changeset
|
552 cmdutil.check_at_most_one_arg(opts, b'rev', b'change') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 revs = opts.get(b'rev') |
46133
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
554 from_rev = opts.get(b'from') |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
555 to_rev = opts.get(b'to') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
556 change = opts.get(b'change') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 do3way = b'$parent2' in cmdline |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
558 |
44808
aac816f584ad
diff: use cmdutil.check_at_most_one_arg() for checking --rev/--change
Martin von Zweigbergk <martinvonz@google.com>
parents:
43790
diff
changeset
|
559 if change: |
48118
5105a9975407
errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48117
diff
changeset
|
560 ctx2 = logcmdutil.revsingle(repo, change, None) |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
561 ctx1a, ctx1b = ctx2.p1(), ctx2.p2() |
46133
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
562 elif from_rev or to_rev: |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
563 repo = scmutil.unhidehashlikerevs( |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
564 repo, [from_rev] + [to_rev], b'nowarn' |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
565 ) |
48118
5105a9975407
errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48117
diff
changeset
|
566 ctx1a = logcmdutil.revsingle(repo, from_rev, None) |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
567 ctx1b = repo[nullrev] |
48118
5105a9975407
errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48117
diff
changeset
|
568 ctx2 = logcmdutil.revsingle(repo, to_rev, None) |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
569 else: |
48117
b74e128676d4
errors: raise InputError from revpair() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46843
diff
changeset
|
570 ctx1a, ctx2 = logcmdutil.revpair(repo, revs) |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
571 if not revs: |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
572 ctx1b = repo[None].p2() |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
573 else: |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
574 ctx1b = repo[nullrev] |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
575 |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
576 # 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
|
577 if do3way: |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
578 if ctx1b.rev() == nullrev: |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
579 do3way = False |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
580 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
581 matcher = scmutil.match(ctx2, pats, opts) |
26227
611ba118ebfc
extdiff: prepare sections of dodiff() for conditionalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
25876
diff
changeset
|
582 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 if opts.get(b'patch'): |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
584 if opts.get(b'subrepos'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
585 raise error.Abort(_(b'--patch cannot be used with --subrepos')) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
586 if opts.get(b'per_file'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
587 raise error.Abort(_(b'--patch cannot be used with --per-file')) |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
588 if ctx2.node() is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
589 raise error.Abort(_(b'--patch requires two revisions')) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
590 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
591 tmproot = pycompat.mkdtemp(prefix=b'extdiff.') |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
592 try: |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
593 if opts.get(b'patch'): |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
594 return diffpatch( |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
595 ui, repo, ctx1a.node(), ctx2.node(), tmproot, matcher, cmdline |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
596 ) |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
597 |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
598 return diffrevs( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
599 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
600 repo, |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
601 ctx1a, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
602 ctx1b, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
603 ctx2, |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
604 matcher, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
605 tmproot, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
606 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
607 do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
608 guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
609 opts, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
610 ) |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
611 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
612 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
613 ui.note(_(b'cleaning up temp directory\n')) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
614 shutil.rmtree(tmproot) |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
615 |
27680
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
616 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
617 extdiffopts = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
618 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
619 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
620 b'o', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
621 b'option', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
622 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 _(b'pass option to comparison program'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
624 _(b'OPT'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 ), |
46133
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
626 (b'r', b'rev', [], _(b'revision (DEPRECATED)'), _(b'REV')), |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
627 (b'', b'from', b'', _(b'revision to diff from'), _(b'REV1')), |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
628 (b'', b'to', b'', _(b'revision to diff to'), _(b'REV2')), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
629 (b'c', b'change', b'', _(b'change made by revision'), _(b'REV')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
630 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
631 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
632 b'per-file', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
633 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 _(b'compare each file instead of revision snapshots'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
635 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
636 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
637 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
638 b'confirm', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
639 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
640 _(b'prompt user before each external program invocation'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
641 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
642 (b'', b'patch', None, _(b'compare patches for two revisions')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
643 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
644 + cmdutil.walkopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
645 + cmdutil.subrepoopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
646 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
647 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
648 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
649 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 b'extdiff', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
651 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
652 (b'p', b'program', b'', _(b'comparison program to run'), _(b'CMD')), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
653 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
654 + extdiffopts, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
655 _(b'hg extdiff [OPT]... [FILE]...'), |
40293
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
38165
diff
changeset
|
656 helpcategory=command.CATEGORY_FILE_CONTENTS, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
657 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
658 ) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
659 def extdiff(ui, repo, *pats, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
660 """use external program 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
|
661 |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
662 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
|
663 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
|
664 default options "-Npru". |
453097750fbf
extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2903
diff
changeset
|
665 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
666 To select a different program, use the -p/--program option. The |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
667 program will be passed the names of two directories to compare, |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
668 unless the --per-file option is specified (see below). To pass |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
669 additional options to the program, use -o/--option. These will be |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
670 passed before the names of the directories or files to compare. |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
671 |
46133
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
672 The --from, --to, and --change options work the same way they do for |
0a4d47f4337b
extdiff: add --from/--to and deprecate -r, as was done for `hg diff`
Martin von Zweigbergk <martinvonz@google.com>
parents:
46132
diff
changeset
|
673 :hg:`diff`. |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
674 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
675 The --per-file option runs the external program repeatedly on each |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
676 file to diff, instead of once on two directories. By default, |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
677 this happens one by one, where the next file diff is open in the |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
678 external program only once the previous external program (for the |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
679 previous file diff) has exited. If the external program has a |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
680 graphical interface, it can open all the file diffs at once instead |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
681 of one by one. See :hg:`help -e extdiff` for information about how |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
682 to tell Mercurial that a given program has a graphical interface. |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
683 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
684 The --confirm option will prompt the user before each invocation of |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
685 the external program. It is ignored if --per-file isn't specified. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
686 """ |
34976
a8bc191fee5a
py3: handle keyword arguments in hgext/extdiff.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34778
diff
changeset
|
687 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
688 program = opts.get(b'program') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
689 option = opts.get(b'option') |
9519
0d3c1aa9d5de
extdiff: fix defaulting to "diff" if no --program is given
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8934
diff
changeset
|
690 if not program: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 program = b'diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
692 option = option or [b'-Npru'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
693 cmdline = b' '.join(map(procutil.shellquote, [program] + option)) |
23680
4075f2f8ea53
extdiff: avoid unexpected quoting arguments for external tools (issue4463)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23270
diff
changeset
|
694 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
|
695 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
696 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
697 class savedcmd: |
29723
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
698 """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
|
699 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
700 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
|
701 the following program:: |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
702 |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
703 %(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
|
704 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
705 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
|
706 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
|
707 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
|
708 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
|
709 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
|
710 """ |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
711 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
712 def __init__(self, path, cmdline, isgui): |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
713 # We can't pass non-ASCII through docstrings (and path is |
40806
151aec6494a8
extdiff: avoid double backslashes in the displayed tool path on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
714 # in an unknown encoding anyway), but avoid double separators on |
151aec6494a8
extdiff: avoid double backslashes in the displayed tool path on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
715 # Windows |
151aec6494a8
extdiff: avoid double backslashes in the displayed tool path on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
716 docpath = stringutil.escapestr(path).replace(b'\\\\', b'\\') |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
717 self.__doc__ %= {'path': pycompat.sysstr(stringutil.uirepr(docpath))} |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
718 self._cmdline = cmdline |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
719 self._isgui = isgui |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
720 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
721 def __call__(self, ui, repo, *pats, **opts): |
34976
a8bc191fee5a
py3: handle keyword arguments in hgext/extdiff.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34778
diff
changeset
|
722 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
723 options = b' '.join(map(procutil.shellquote, opts[b'option'])) |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
724 if options: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
725 options = b' ' + options |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
726 return dodiff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
727 ui, repo, self._cmdline + options, pats, opts, guitool=self._isgui |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
728 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
729 |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
730 |
45410
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
731 def _gettooldetails(ui, cmd, path): |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
732 """ |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
733 returns following things for a |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
734 ``` |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
735 [extdiff] |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
736 <cmd> = <path> |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
737 ``` |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
738 entry: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
739 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
740 cmd: command/tool name |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
741 path: path to the tool |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
742 cmdline: the command which should be run |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
743 isgui: whether the tool uses GUI or not |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
744 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
745 Reads all external tools related configs, whether it be extdiff section, |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
746 diff-tools or merge-tools section, or its specified in an old format or |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
747 the latest format. |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
748 """ |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
749 path = util.expandpath(path) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
750 if cmd.startswith(b'cmd.'): |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
751 cmd = cmd[4:] |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
752 if not path: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
753 path = procutil.findexe(cmd) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
754 if path is None: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
755 path = filemerge.findexternaltool(ui, cmd) or cmd |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
756 diffopts = ui.config(b'extdiff', b'opts.' + cmd) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
757 cmdline = procutil.shellquote(path) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
758 if diffopts: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
759 cmdline += b' ' + diffopts |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
760 isgui = ui.configbool(b'extdiff', b'gui.' + cmd) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
761 else: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
762 if path: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
763 # case "cmd = path opts" |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
764 cmdline = path |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
765 diffopts = len(pycompat.shlexsplit(cmdline)) > 1 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
766 else: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
767 # case "cmd =" |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
768 path = procutil.findexe(cmd) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
769 if path is None: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
770 path = filemerge.findexternaltool(ui, cmd) or cmd |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
771 cmdline = procutil.shellquote(path) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
772 diffopts = False |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
773 isgui = ui.configbool(b'extdiff', b'gui.' + cmd) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
774 # look for diff arguments in [diff-tools] then [merge-tools] |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
775 if not diffopts: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
776 key = cmd + b'.diffargs' |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
777 for section in (b'diff-tools', b'merge-tools'): |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
778 args = ui.config(section, key) |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
779 if args: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
780 cmdline += b' ' + args |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
781 if isgui is None: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
782 isgui = ui.configbool(section, cmd + b'.gui') or False |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
783 break |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
784 return cmd, path, cmdline, isgui |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
785 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
786 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
787 def uisetup(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
788 for cmd, path in ui.configitems(b'extdiff'): |
45409
a28da102fd36
extdiff: reorder an if-else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45401
diff
changeset
|
789 if cmd.startswith(b'opts.') or cmd.startswith(b'gui.'): |
a28da102fd36
extdiff: reorder an if-else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45401
diff
changeset
|
790 continue |
45410
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
791 cmd, path, cmdline, isgui = _gettooldetails(ui, cmd, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
792 command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
793 cmd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
794 extdiffopts[:], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
795 _(b'hg %s [OPTION]... [FILE]...') % cmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
796 helpcategory=command.CATEGORY_FILE_CONTENTS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
797 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
798 )(savedcmd(path, cmdline, isgui)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
799 |
29722
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
800 |
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
801 # 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
|
802 i18nfunctions = [savedcmd] |