Mercurial > hg
annotate hgext/extdiff.py @ 48830:3491c450dcae
setup: remove Python 2 support code for determining dylib suffix
Differential Revision: https://phab.mercurial-scm.org/D12274
author | Augie Fackler <augie@google.com> |
---|---|
date | Wed, 02 Mar 2022 10:12:48 -0500 |
parents | 5105a9975407 |
children | 6000f5b25c9b |
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 from __future__ import absolute_import |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
85 |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
86 import os |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
87 import re |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
88 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
|
89 import stat |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
90 import subprocess |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37604
diff
changeset
|
91 |
3891 | 92 from mercurial.i18n import _ |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
93 from mercurial.node import ( |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
94 nullrev, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
95 short, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
96 ) |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
97 from mercurial import ( |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
98 archival, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
99 cmdutil, |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
100 encoding, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
101 error, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
102 filemerge, |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37253
diff
changeset
|
103 formatter, |
48117
b74e128676d4
errors: raise InputError from revpair() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46843
diff
changeset
|
104 logcmdutil, |
30678
caf7e1c5efe4
py3: have a bytes version of shlex.split()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29841
diff
changeset
|
105 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32283
diff
changeset
|
106 registrar, |
28970
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
107 scmutil, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
108 util, |
4f86c3bed63b
py3: make extdiff use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27681
diff
changeset
|
109 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
110 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
|
111 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
112 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
113 ) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
114 |
21246
29eeaa6d662f
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20674
diff
changeset
|
115 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32283
diff
changeset
|
116 command = registrar.command(cmdtable) |
34777
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
117 |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
118 configtable = {} |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
119 configitem = registrar.configitem(configtable) |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
121 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
122 b'extdiff', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
123 br'opts\..*', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
124 default=b'', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
125 generic=True, |
34777
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
126 ) |
bb2525871d95
configitems: register the 'exdiff.opts.*' config
Boris Feld <boris.feld@octobus.net>
parents:
32431
diff
changeset
|
127 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
128 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
129 b'extdiff', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
130 br'gui\..*', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
131 generic=True, |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
132 ) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
133 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
134 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
135 b'diff-tools', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
136 br'.*\.diffargs$', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
137 default=None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
138 generic=True, |
34778
bf138446ac2f
configitems: register the 'extdata.*.diffargs' config
Boris Feld <boris.feld@octobus.net>
parents:
34777
diff
changeset
|
139 ) |
bf138446ac2f
configitems: register the 'extdata.*.diffargs' config
Boris Feld <boris.feld@octobus.net>
parents:
34777
diff
changeset
|
140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
141 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
142 b'diff-tools', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
143 br'.*\.gui$', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
144 generic=True, |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
145 ) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
146 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29723
diff
changeset
|
147 # 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
|
148 # 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
|
149 # 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
|
150 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 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
|
152 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
153 |
25813
18bae5eb58c5
extdiff: add support for subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25812
diff
changeset
|
154 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
|
155 """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
|
156 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
|
157 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
|
158 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
|
159 if dirname == b"": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 dirname = b"root" |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
161 if node is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 dirname = b'%s.%s' % (dirname, short(node)) |
5135
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
163 base = os.path.join(tmproot, dirname) |
1830bc7676ee
extdiff: un-nested two functions
Brad Schick <schickb@gmail.com>
parents:
4730
diff
changeset
|
164 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
|
165 fnsandstat = [] |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
166 |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
167 if node is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
168 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 _(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
|
170 % (len(files), short(node)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
171 ) |
8064
5c7bc1aece9e
extdiff: merge node and working dir snapshot modes
Patrick Mezard <pmezard@gmail.com>
parents:
7758
diff
changeset
|
172 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
173 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 _(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
|
175 % (len(files)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
176 ) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
177 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
178 if files: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 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
|
180 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
181 archival.archive( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
182 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
183 base, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
184 node, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
185 b'files', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
186 match=scmutil.matchfiles(repo, files), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
187 subrepos=listsubrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
188 ) |
25812
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
189 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
190 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
|
191 wfn = util.pconvert(fn) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 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
|
193 |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
194 if node is None: |
68822b7cdd01
extdiff: use archiver to take snapshots of committed revisions
Matt Harbison <matt_harbison@yahoo.com>
parents:
25186
diff
changeset
|
195 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
|
196 |
32217
affd753ddaf1
extdiff: copy back files to the working directory if the size changed
Matt Harbison <matt_harbison@yahoo.com>
parents:
31451
diff
changeset
|
197 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
|
198 return dirname, fnsandstat |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
200 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
201 def formatcmdline( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
202 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
203 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
204 do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
205 parent1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
206 plabel1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
207 parent2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
208 plabel2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
209 child, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
210 clabel, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
211 ): |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
212 # 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
|
213 # 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
|
214 # returned for parent2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
215 replace = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 b'parent': parent1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 b'parent1': parent1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 b'parent2': parent2, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 b'plabel1': plabel1, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 b'plabel2': plabel2, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 b'child': child, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 b'clabel': clabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
223 b'root': repo_root, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
224 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
225 |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
226 def quote(match): |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
227 pre = match.group(2) |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
228 key = match.group(3) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 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
|
230 return pre |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
231 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
|
232 |
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
233 # 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
|
234 regex = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
235 br'''(['"]?)([^\s'"$]*)''' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
236 br'\$(parent2|parent1?|child|plabel1|plabel2|clabel|root)\1' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
237 ) |
41196
4f675c12d083
extdiff: move external tool command line building into separate function
Ludovic Chabant <ludovic@chabant.com>
parents:
40819
diff
changeset
|
238 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
|
239 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
|
240 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
|
241 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
242 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
243 def _systembackground(cmd, environ=None, cwd=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
244 """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
|
245 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
|
246 """ |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
247 env = procutil.shellenviron(environ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
248 proc = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
249 procutil.tonativestr(cmd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
250 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
251 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
252 env=procutil.tonativeenv(env), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
253 cwd=pycompat.rapply(procutil.tonativestr, cwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
254 ) |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
255 return proc |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
256 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
257 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
258 def _runperfilediff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
259 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
260 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
261 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
262 guitool, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
263 do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
264 confirm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
265 commonfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
266 tmproot, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
267 dir1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
268 dir1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
269 dir2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
270 rev1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
271 rev1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
272 rev2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
273 ): |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
274 # 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
|
275 # 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
|
276 # 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
|
277 waitprocs = [] |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
278 totalfiles = len(commonfiles) |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
279 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
|
280 path1a = os.path.join(dir1a, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
281 label1a = commonfile + rev1a |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
282 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
|
283 path1a = pycompat.osdevnull |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
284 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 path1b = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
286 label1b = b'' |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
287 if do3way: |
45399
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
288 path1b = os.path.join(dir1b, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
289 label1b = commonfile + rev1b |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
290 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
|
291 path1b = pycompat.osdevnull |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
292 |
45400
1bed1b00b18d
extdiff: remove dir2root and pass full path as dir2 in _runperfilediff()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45399
diff
changeset
|
293 path2 = os.path.join(dir2, commonfile) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
294 label2 = commonfile + rev2 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
295 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
296 if confirm: |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
297 # Prompt before showing this diff |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
298 difffiles = _(b'diff %s (%d of %d)') % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
299 commonfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
300 idx + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
301 totalfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
302 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
303 responses = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
304 b'[Yns?]' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 b'$$ &Yes, show diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 b'$$ &No, skip this diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 b'$$ &Skip remaining diffs' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 b'$$ &? (display help)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
309 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
310 r = ui.promptchoice(b'%s %s' % (difffiles, responses)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
311 if r == 3: # ? |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
312 while r == 3: |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
313 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
|
314 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
|
315 r = ui.promptchoice(b'%s %s' % (difffiles, responses)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
316 if r == 0: # yes |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
317 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
318 elif r == 1: # no |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
319 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
320 elif r == 2: # skip |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
321 break |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
322 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
323 curcmdline = formatcmdline( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
324 cmdline, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
325 repo_root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
326 do3way=do3way, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
327 parent1=path1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
328 plabel1=label1a, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
329 parent2=path1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
330 plabel2=label1b, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
331 child=path2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
332 clabel=label2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
333 ) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
334 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
335 if confirm or not guitool: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
336 # 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
|
337 # before we show the next file. |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
338 # 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
|
339 # 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
|
340 # 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
|
341 # 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
|
342 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 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
|
344 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 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
|
346 else: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
347 # 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
|
348 # 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
|
349 # the whole group. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
350 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 b'running %r in %s (backgrounded)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
352 % (pycompat.bytestr(curcmdline), tmproot) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
353 ) |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
354 proc = _systembackground(curcmdline, cwd=tmproot) |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
355 waitprocs.append(proc) |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
356 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
357 if waitprocs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 with ui.timeblockedsection(b'extdiff'): |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
359 for proc in waitprocs: |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
360 proc.wait() |
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
361 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
362 |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
363 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
|
364 template = b'hg-%h.patch' |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
365 # write patches to temporary files |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
366 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
|
367 cmdutil.export( |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
368 repo, |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
369 [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
|
370 fm, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
371 fntemplate=repo.vfs.reljoin(tmproot, template), |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
372 match=matcher, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
373 ) |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
374 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
|
375 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
|
376 file1 = repo.vfs.reljoin(tmproot, label1) |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
377 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
|
378 cmdline = formatcmdline( |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
379 cmdline, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
380 repo.root, |
45128
d23881b17388
extdiff: remove unrequired do3way argument to diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45127
diff
changeset
|
381 # no 3way while comparing patches |
d23881b17388
extdiff: remove unrequired do3way argument to diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45127
diff
changeset
|
382 do3way=False, |
45129
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
383 parent1=file1, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
384 plabel1=label1, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
385 # 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
|
386 parent2=None, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
387 plabel2=None, |
30c31de4d1db
extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45128
diff
changeset
|
388 child=file2, |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
389 clabel=label2, |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
390 ) |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
391 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
|
392 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
|
393 return 1 |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
394 |
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
395 |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
396 def diffrevs( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
397 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
398 repo, |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
399 ctx1a, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
400 ctx1b, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
401 ctx2, |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
402 matcher, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
403 tmproot, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
404 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
405 do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
406 guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
407 opts, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
408 ): |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
409 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
410 subrepos = opts.get(b'subrepos') |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
411 |
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
412 # 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
|
413 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
|
414 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
|
415 if do3way: |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
416 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
|
417 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
|
418 set(stb.modified), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
419 set(stb.added), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
420 set(stb.removed), |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
421 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
422 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
423 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
|
424 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
|
425 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
|
426 if not common: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
427 return 0 |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
428 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
429 # 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
|
430 # 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
|
431 # * 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
|
432 # * 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
|
433 # (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
|
434 # ctx1a) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
435 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
|
436 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
|
437 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
|
438 if do3way: |
45130
33524b6bef53
extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45129
diff
changeset
|
439 # 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
|
440 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
|
441 dir1b = snapshot( |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
442 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
|
443 )[0] |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
444 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
|
445 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
446 dir1b = None |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
447 rev1b = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
448 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
449 fnsandstat = [] |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
450 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
451 # 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
|
452 dir2root = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
453 rev2 = b'' |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
454 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
|
455 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
|
456 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
|
457 elif len(common) > 1: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
458 # 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
|
459 # 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
|
460 # 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
|
461 # 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
|
462 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
|
463 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
464 # 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
|
465 dir2 = b'' |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
466 dir2root = repo.root |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
467 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
468 label1a = rev1a |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
469 label1b = rev1b |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
470 label2 = rev2 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
471 |
45401
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
472 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
|
473 # 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
|
474 # 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
|
475 if len(common) == 1: |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
476 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
|
477 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
|
478 label1a = common_file + rev1a |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
479 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
|
480 dir1a = pycompat.osdevnull |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
481 if do3way: |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
482 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
|
483 label1b = common_file + rev1b |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
484 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
|
485 dir1b = pycompat.osdevnull |
451e13cc6d85
extdiff: move single file handling inside `not per-file` conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45400
diff
changeset
|
486 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
|
487 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
|
488 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
489 # 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
|
490 cmdline = formatcmdline( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
491 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
492 repo.root, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
493 do3way=do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
494 parent1=dir1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
495 plabel1=label1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
496 parent2=dir1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
497 plabel2=label1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
498 child=dir2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
499 clabel=label2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
500 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
501 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
|
502 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
|
503 else: |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
504 # 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
|
505 _runperfilediff( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
506 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
507 repo.root, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
508 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
509 guitool=guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
510 do3way=do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
511 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
|
512 commonfiles=common, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
513 tmproot=tmproot, |
45399
e7c5735433ac
extdiff: pass full paths of `dir1a` and `dir1b` to `_runperfilediff()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45130
diff
changeset
|
514 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
|
515 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
|
516 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
|
517 rev1a=rev1a, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
518 rev1b=rev1b, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
519 rev2=rev2, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
520 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
521 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
522 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
|
523 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
|
524 # 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
|
525 # 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
|
526 # 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
|
527 # which could be expensive. |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
528 # 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
|
529 # 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
|
530 # 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
|
531 if ( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
532 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
|
533 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
|
534 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
|
535 ): |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
536 ui.debug( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
537 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
|
538 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
|
539 ) |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
540 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
|
541 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
542 return 1 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
543 |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
544 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
545 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
|
546 """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
|
547 |
e668fd796b8b
Propagating changes back to working dirs when changing files in external
Fabio Zadrozny <fabiofz at gmail dot com>
parents:
5293
diff
changeset
|
548 - 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
|
549 - 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
|
550 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
|
551 - 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
|
552 """ |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
553 |
44808
aac816f584ad
diff: use cmdutil.check_at_most_one_arg() for checking --rev/--change
Martin von Zweigbergk <martinvonz@google.com>
parents:
43790
diff
changeset
|
554 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
|
555 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
|
556 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
|
557 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
|
558 change = opts.get(b'change') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 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
|
560 |
44808
aac816f584ad
diff: use cmdutil.check_at_most_one_arg() for checking --rev/--change
Martin von Zweigbergk <martinvonz@google.com>
parents:
43790
diff
changeset
|
561 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
|
562 ctx2 = logcmdutil.revsingle(repo, change, None) |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
563 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
|
564 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
|
565 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
|
566 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
|
567 ) |
48118
5105a9975407
errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48117
diff
changeset
|
568 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
|
569 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
|
570 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
|
571 else: |
48117
b74e128676d4
errors: raise InputError from revpair() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46843
diff
changeset
|
572 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
|
573 if not revs: |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
574 ctx1b = repo[None].p2() |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
575 else: |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
576 ctx1b = repo[nullrev] |
37253
6089ef933ab5
extdiff: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
577 |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
578 # 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
|
579 if do3way: |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46133
diff
changeset
|
580 if ctx1b.rev() == nullrev: |
9512
e7bde4680eec
extdiff: add 3-way diff for merge changesets
Sune Foldager <cryo@cyanite.org>
parents:
9467
diff
changeset
|
581 do3way = False |
7758
e81e6c996e99
extdiff: add --change option to display single changeset diff
Gilles Moris <gilles.moris@free.fr>
parents:
7599
diff
changeset
|
582 |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
583 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
|
584 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
585 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
|
586 if opts.get(b'subrepos'): |
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 --subrepos')) |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
588 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
|
589 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
|
590 if ctx2.node() is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
591 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
|
592 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
593 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
|
594 try: |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
595 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
|
596 return diffpatch( |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
597 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
|
598 ) |
45126
48c38018bd77
extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44867
diff
changeset
|
599 |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
600 return diffrevs( |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
601 ui, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
602 repo, |
46131
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
603 ctx1a, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
604 ctx1b, |
55542b213813
extdiff: pass contexts instead of nodeids into diffrevs()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
605 ctx2, |
45127
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
606 matcher, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
607 tmproot, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
608 cmdline, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
609 do3way, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
610 guitool, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
611 opts, |
da2e69a278df
extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45126
diff
changeset
|
612 ) |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5137
diff
changeset
|
613 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
614 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 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
|
616 shutil.rmtree(tmproot) |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
617 |
27680
c750245c6b85
extdiff: factor out list of common options
Yuya Nishihara <yuya@tcha.org>
parents:
26587
diff
changeset
|
618 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
619 extdiffopts = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
620 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
621 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
622 b'o', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 b'option', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
624 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 _(b'pass option to comparison program'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 _(b'OPT'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 ), |
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
|
628 (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
|
629 (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
|
630 (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
|
631 (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
|
632 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
633 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 b'per-file', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
635 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 _(b'compare each file instead of revision snapshots'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
637 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
638 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
639 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
640 b'confirm', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
641 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
642 _(b'prompt user before each external program invocation'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
643 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
644 (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
|
645 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
646 + cmdutil.walkopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
647 + cmdutil.subrepoopts |
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 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
650 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
651 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
652 b'extdiff', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
653 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
654 (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
|
655 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
656 + extdiffopts, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
657 _(b'hg extdiff [OPT]... [FILE]...'), |
40293
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
38165
diff
changeset
|
658 helpcategory=command.CATEGORY_FILE_CONTENTS, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
659 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
660 ) |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
661 def extdiff(ui, repo, *pats, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45410
diff
changeset
|
662 """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
|
663 |
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
664 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
|
665 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
|
666 default options "-Npru". |
453097750fbf
extdiff: fix bugs. add test.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2903
diff
changeset
|
667 |
8076
5ec526c1a32f
help texts: write command line switches as -a/--abc
Martin Geisler <mg@lazybytes.net>
parents:
8066
diff
changeset
|
668 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
|
669 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
|
670 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
|
671 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
|
672 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
|
673 |
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
|
674 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
|
675 :hg:`diff`. |
41487
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
676 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
677 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
|
678 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
|
679 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
|
680 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
|
681 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
|
682 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
|
683 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
|
684 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
|
685 |
fa471151d269
extdiff: add --per-file and --confirm options
Ludovic Chabant <ludovic@chabant.com>
parents:
41196
diff
changeset
|
686 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
|
687 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
|
688 """ |
34976
a8bc191fee5a
py3: handle keyword arguments in hgext/extdiff.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34778
diff
changeset
|
689 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
690 program = opts.get(b'program') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 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
|
692 if not program: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
693 program = b'diff' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
694 option = option or [b'-Npru'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
695 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
|
696 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
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
698 |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
699 class savedcmd(object): |
29723
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
700 """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
|
701 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
702 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
|
703 the following program:: |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
704 |
91b2f2176395
extdiff: isolate path variable of saved command to independent paragraph
Yuya Nishihara <yuya@tcha.org>
parents:
29722
diff
changeset
|
705 %(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
|
706 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
707 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
|
708 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
|
709 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
|
710 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
|
711 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
|
712 """ |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
713 |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
714 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
|
715 # 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
|
716 # 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
|
717 # Windows |
151aec6494a8
extdiff: avoid double backslashes in the displayed tool path on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
718 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
|
719 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
|
720 self._cmdline = cmdline |
41584
a4cd77a425a3
extdiff: support tools that can be run simultaneously
Ludovic Chabant <ludovic@chabant.com>
parents:
41487
diff
changeset
|
721 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
|
722 |
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
723 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
|
724 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
725 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
|
726 if options: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
727 options = b' ' + options |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
728 return dodiff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
729 ui, repo, self._cmdline + options, pats, opts, guitool=self._isgui |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
730 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
731 |
29721
479076db51be
extdiff: refactor closure of saved diff command as a top-level class
Yuya Nishihara <yuya@tcha.org>
parents:
29630
diff
changeset
|
732 |
45410
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
733 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
|
734 """ |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
735 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
|
736 ``` |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
737 [extdiff] |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
738 <cmd> = <path> |
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 entry: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
741 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
742 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
|
743 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
|
744 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
|
745 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
|
746 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
747 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
|
748 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
|
749 the latest format. |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
750 """ |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
751 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
|
752 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
|
753 cmd = cmd[4:] |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
754 if not path: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
755 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
|
756 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
|
757 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
|
758 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
|
759 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
|
760 if diffopts: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
761 cmdline += b' ' + diffopts |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
762 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
|
763 else: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
764 if path: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
765 # 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
|
766 cmdline = path |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
767 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
|
768 else: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
769 # case "cmd =" |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
770 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
|
771 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
|
772 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
|
773 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
|
774 diffopts = False |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
775 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
|
776 # 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
|
777 if not diffopts: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
778 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
|
779 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
|
780 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
|
781 if args: |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
782 cmdline += b' ' + args |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
783 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
|
784 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
|
785 break |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
786 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
|
787 |
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
788 |
2333
de0c05afa511
new extension: extdiff. allows to use external diff program.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
789 def uisetup(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
790 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
|
791 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
|
792 continue |
45410
2d08dcf8fd9e
extdiff: refactor cmdline and gui calculation login in a separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45409
diff
changeset
|
793 cmd, path, cmdline, isgui = _gettooldetails(ui, cmd, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
794 command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
795 cmd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
796 extdiffopts[:], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
797 _(b'hg %s [OPTION]... [FILE]...') % cmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
798 helpcategory=command.CATEGORY_FILE_CONTENTS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
799 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
800 )(savedcmd(path, cmdline, isgui)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41584
diff
changeset
|
801 |
29722
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
802 |
14c3afcb1c26
extdiff: export __doc__ of saved command for translation
Yuya Nishihara <yuya@tcha.org>
parents:
29721
diff
changeset
|
803 # 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
|
804 i18nfunctions = [savedcmd] |