Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/cmdutil.py @ 53040:cdd7bf612c7b stable tip
bundle-spec: properly format boolean parameter (issue6960)
This was breaking automatic clone bundle generation. This changeset fixes it and
add a test to catch it in the future.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Mar 2025 02:29:42 +0100 |
parents | 4cb75772818d |
children |
rev | line source |
---|---|
2957 | 1 # cmdutil.py - help for command processing in mercurial |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46796
diff
changeset
|
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
2874
4ec58b157265
refactor text diff/patch code.
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:
8210
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. |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
7 |
51901
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51788
diff
changeset
|
8 from __future__ import annotations |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
9 |
41330
4ea21df312ec
record: prevent commits that don't pick up dirty subrepo changes (issue6102)
Matt Harbison <matt_harbison@yahoo.com>
parents:
41206
diff
changeset
|
10 import copy as copymod |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
11 import errno |
50242
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
12 import functools |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
13 import os |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
14 import re |
51788
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
15 import typing |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
16 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
17 from typing import ( |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
18 Any, |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
19 AnyStr, |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
20 BinaryIO, |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
21 Dict, |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
22 Iterable, |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
23 Literal, |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
24 Optional, |
51302
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51194
diff
changeset
|
25 TYPE_CHECKING, |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
26 cast, |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
27 ) |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
28 |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
29 from .i18n import _ |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
30 from .node import ( |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
31 hex, |
46842
ad878e3f282b
refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
32 nullrev, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
33 short, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
34 ) |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
35 from .thirdparty import attr |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
36 |
51788
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
37 # Force pytype to use the non-vendored package |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
38 if typing.TYPE_CHECKING: |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
39 # noinspection PyPackageRequirements |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
40 import attr |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51774
diff
changeset
|
41 |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
42 from . import ( |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
43 bookmarks, |
51593
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
44 bundle2, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
45 changelog, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
46 copies, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
47 crecord as crecordmod, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
48 encoding, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
49 error, |
51593
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
50 exchange, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
51 formatter, |
35925
7625b4f7db70
cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35914
diff
changeset
|
52 logcmdutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
53 match as matchmod, |
36048
46a54de96a54
merge: cut import cycle at merge -> extensions
Yuya Nishihara <yuya@tcha.org>
parents:
36047
diff
changeset
|
54 merge as mergemod, |
44915
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44772
diff
changeset
|
55 mergestate as mergestatemod, |
35853
eeb87b24aea7
amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents:
35746
diff
changeset
|
56 mergeutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
57 obsolete, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
58 patch, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
59 pathutil, |
38429
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38379
diff
changeset
|
60 phases, |
30528
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30515
diff
changeset
|
61 pycompat, |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
62 repair, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
63 revlog, |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
64 rewriteutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
65 scmutil, |
42536
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42494
diff
changeset
|
66 state as statemod, |
51593
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
67 streamclone, |
36047
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35993
diff
changeset
|
68 subrepoutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
69 templatekw, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
70 templater, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
71 util, |
31247
1b08aca7870a
vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31226
diff
changeset
|
72 vfs as vfsmod, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
73 ) |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
74 |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
75 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
76 dateutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
77 stringutil, |
51593
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
78 urlutil, |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
79 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
80 |
47089
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
81 from .revlogutils import ( |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
82 constants as revlog_constants, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
83 ) |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
84 |
51302
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51194
diff
changeset
|
85 if TYPE_CHECKING: |
52481
9d79ffeed7c0
typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents:
52402
diff
changeset
|
86 from .interfaces import ( |
9d79ffeed7c0
typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents:
52402
diff
changeset
|
87 status as istatus, |
9d79ffeed7c0
typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents:
52402
diff
changeset
|
88 ) |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
89 from . import ( |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
90 ui as uimod, |
43740
a58d2361b231
cmdutil: add a pytype annotation to help out some callsites
Augie Fackler <augie@google.com>
parents:
43738
diff
changeset
|
91 ) |
a58d2361b231
cmdutil: add a pytype annotation to help out some callsites
Augie Fackler <augie@google.com>
parents:
43738
diff
changeset
|
92 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28837
diff
changeset
|
93 stringio = util.stringio |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
94 |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
95 # templates of common command options |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
96 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
97 dryrunopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 (b'n', b'dry-run', None, _(b'do not perform actions, just print output')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
99 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
100 |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38648
diff
changeset
|
101 confirmopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
102 (b'', b'confirm', None, _(b'ask before applying actions')), |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38648
diff
changeset
|
103 ] |
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38648
diff
changeset
|
104 |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
105 remoteopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 (b'e', b'ssh', b'', _(b'specify ssh command to use'), _(b'CMD')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
107 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 b'remotecmd', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 _(b'specify hg command to run on the remote side'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 _(b'CMD'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
113 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
114 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 b'insecure', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
117 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
118 _(b'do not verify server certificate (ignoring web.cacerts config)'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
119 ), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
120 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
121 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
122 walkopts = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
123 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
124 b'I', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
125 b'include', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
126 [], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
127 _(b'include names matching the given patterns'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
128 _(b'PATTERN'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
129 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
130 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 b'X', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
132 b'exclude', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
133 [], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 _(b'exclude names matching the given patterns'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 _(b'PATTERN'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
136 ), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
137 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
138 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
139 commitopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
140 (b'm', b'message', b'', _(b'use text as commit message'), _(b'TEXT')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
141 (b'l', b'logfile', b'', _(b'read commit message from file'), _(b'FILE')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
142 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
143 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
144 commitopts2 = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 b'd', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 b'date', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 _(b'record the specified date as commit date'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 _(b'DATE'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
152 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
153 b'u', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 b'user', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 _(b'record the specified user as committer'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 _(b'USER'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 ), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
159 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
160 |
42909
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
161 commitopts3 = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
162 (b'D', b'currentdate', None, _(b'record the current date as commit date')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
163 (b'U', b'currentuser', None, _(b'record the current user as committer')), |
42909
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
164 ] |
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
165 |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
166 formatteropts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
168 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
169 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
170 templateopts = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
171 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
173 b'style', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
175 _(b'display using template map file (DEPRECATED)'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 _(b'STYLE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
177 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
178 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
179 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
180 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
181 logopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
182 (b'p', b'patch', None, _(b'show patch')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
183 (b'g', b'git', None, _(b'use git extended diff format')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
184 (b'l', b'limit', b'', _(b'limit number of changes displayed'), _(b'NUM')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
185 (b'M', b'no-merges', None, _(b'do not show merges')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
186 (b'', b'stat', None, _(b'output diffstat-style summary of changes')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 (b'G', b'graph', None, _(b"show the revision DAG")), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
188 ] + templateopts |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
189 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
190 diffopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 (b'a', b'text', None, _(b'treat all files as text')), |
44349
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
192 ( |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
193 b'g', |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
194 b'git', |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
195 None, |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
196 _(b'use git extended diff format (DEFAULT: diff.git)'), |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
197 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 (b'', b'binary', None, _(b'generate binary diffs in git mode (default)')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 (b'', b'nodates', None, _(b'omit dates from diff headers')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
200 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
201 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
202 diffwsopts = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
203 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 b'w', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
205 b'ignore-all-space', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
206 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 _(b'ignore white space when comparing lines'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
208 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
209 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 b'b', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
211 b'ignore-space-change', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
212 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
213 _(b'ignore changes in the amount of white space'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
214 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
215 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 b'B', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 b'ignore-blank-lines', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
218 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 _(b'ignore changes whose lines are all blank'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
220 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
221 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 b'Z', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
223 b'ignore-space-at-eol', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
224 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 _(b'ignore changes in whitespace at EOL'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
226 ), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
227 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
228 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
229 diffopts2 = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
230 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
231 (b'', b'noprefix', None, _(b'omit a/ and b/ prefixes from filenames')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
232 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
233 b'p', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
234 b'show-function', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
235 None, |
44349
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
236 _( |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
237 b'show which function each change is in (DEFAULT: diff.showfunc)' |
a0ec05d93c8e
cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents:
44342
diff
changeset
|
238 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
239 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 (b'', b'reverse', None, _(b'produce a diff that undoes the changes')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
241 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
242 + diffwsopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
243 + [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
245 b'U', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
246 b'unified', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 _(b'number of lines of context to show'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
249 _(b'NUM'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
250 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
251 (b'', b'stat', None, _(b'output diffstat-style summary of changes')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 b'root', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
255 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 _(b'produce diffs relative to subdirectory'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 _(b'DIR'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
258 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
259 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
260 ) |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
261 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
262 mergetoolopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
263 (b't', b'tool', b'', _(b'specify merge tool'), _(b'TOOL')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
264 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
265 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
266 similarityopts = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
267 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 b's', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
269 b'similarity', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
270 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 _(b'guess renamed files by similarity (0<=s<=100)'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 _(b'SIMILARITY'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
273 ) |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
274 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
275 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
276 subrepoopts = [(b'S', b'subrepos', None, _(b'recurse into subrepositories'))] |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
277 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
278 debugrevlogopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 (b'c', b'changelog', False, _(b'open changelog')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 (b'm', b'manifest', False, _(b'open manifest')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 (b'', b'dir', b'', _(b'open directory manifest')), |
32414
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
282 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32401
diff
changeset
|
283 |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
284 # special string such that everything below this line will be ingored in the |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
285 # editor text |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
286 _linebelow = b"^HG: ------------------------ >8 ------------------------$" |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
287 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
288 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
289 def check_at_most_one_arg( |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
290 opts: Dict[AnyStr, Any], |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
291 *args: AnyStr, |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
292 ) -> Optional[AnyStr]: |
43905
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43904
diff
changeset
|
293 """abort if more than one of the arguments are in opts |
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43904
diff
changeset
|
294 |
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43904
diff
changeset
|
295 Returns the unique argument or None if none of them were specified. |
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43904
diff
changeset
|
296 """ |
43947
dfac25883dbf
cmdutil: return underscore-separate name from check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43945
diff
changeset
|
297 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
298 def to_display(name: AnyStr) -> bytes: |
43948
6c8108274dc5
cmdutil: allow native string as input to check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43947
diff
changeset
|
299 return pycompat.sysbytes(name).replace(b'_', b'-') |
43947
dfac25883dbf
cmdutil: return underscore-separate name from check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43945
diff
changeset
|
300 |
43898
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
301 previous = None |
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
302 for x in args: |
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
303 if opts.get(x): |
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
304 if previous: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
305 raise error.InputError( |
43947
dfac25883dbf
cmdutil: return underscore-separate name from check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43945
diff
changeset
|
306 _(b'cannot specify both --%s and --%s') |
dfac25883dbf
cmdutil: return underscore-separate name from check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43945
diff
changeset
|
307 % (to_display(previous), to_display(x)) |
43898
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
308 ) |
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
309 previous = x |
43905
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43904
diff
changeset
|
310 return previous |
43898
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
311 |
d587937600be
clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents:
43872
diff
changeset
|
312 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
313 def check_incompatible_arguments( |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
314 opts: Dict[AnyStr, Any], |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
315 first: AnyStr, |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
316 others: Iterable[AnyStr], |
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
317 ) -> None: |
43904
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
318 """abort if the first argument is given along with any of the others |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
319 |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
320 Unlike check_at_most_one_arg(), `others` are not mutually exclusive |
44269
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44098
diff
changeset
|
321 among themselves, and they're passed as a single collection. |
43904
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
322 """ |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
323 for other in others: |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
324 check_at_most_one_arg(opts, first, other) |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
325 |
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43900
diff
changeset
|
326 |
52670
4cb75772818d
pyupgrade: drop the quoting around type annotations
Matt Harbison <matt_harbison@yahoo.com>
parents:
52669
diff
changeset
|
327 def resolve_commit_options(ui: uimod.ui, opts: Dict[str, Any]) -> bool: |
42909
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
328 """modify commit options dict to handle related options |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
329 |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
330 The return value indicates that ``rewrite.update-timestamp`` is the reason |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
331 the ``date`` option is set. |
42909
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
332 """ |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
333 check_at_most_one_arg(opts, 'date', 'currentdate') |
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
334 check_at_most_one_arg(opts, 'user', 'currentuser') |
42925
4690902850df
uncommit: make -D/--date and -U/--user mutually exclusive
Matt Harbison <matt_harbison@yahoo.com>
parents:
42924
diff
changeset
|
335 |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
336 datemaydiffer = False # date-only change should be ignored? |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
337 |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
338 if opts.get('currentdate'): |
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
339 opts['date'] = b'%d %d' % dateutil.makedate() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
340 elif ( |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
341 not opts.get('date') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 and ui.configbool(b'rewrite', b'update-timestamp') |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
343 and opts.get('currentdate') is None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
344 ): |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
345 opts['date'] = b'%d %d' % dateutil.makedate() |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
346 datemaydiffer = True |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
347 |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
348 if opts.get('currentuser'): |
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
349 opts['user'] = ui.username() |
42909
66048f6b5d0d
uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents:
42898
diff
changeset
|
350 |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
351 return datemaydiffer |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
352 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
353 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
354 def check_note_size(opts: Dict[str, Any]) -> None: |
47031
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46969
diff
changeset
|
355 """make sure note is of valid format""" |
42937
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
356 |
47434
54849b65dc5f
cmdutil: make checknotesize() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47164
diff
changeset
|
357 note = opts.get('note') |
42937
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
358 if not note: |
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
359 return |
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
360 |
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
361 if len(note) > 255: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
362 raise error.InputError(_(b"cannot store a note of more than 255 bytes")) |
42937
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
363 if b'\n' in note: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
364 raise error.InputError(_(b"note cannot contain a newline")) |
42937
7e9997041781
amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents:
42936
diff
changeset
|
365 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
366 |
25256
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
367 def ishunk(x): |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
368 hunkclasses = (crecordmod.uihunk, patch.recordhunk) |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
369 return isinstance(x, hunkclasses) |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
370 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
371 |
47565
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
372 def isheader(x): |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
373 headerclasses = (crecordmod.uiheader, patch.header) |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
374 return isinstance(x, headerclasses) |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
375 |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
376 |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
377 def newandmodified(chunks): |
25257
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
378 newlyaddedandmodifiedfiles = set() |
42862
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
379 alsorestore = set() |
25257
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
380 for chunk in chunks: |
47565
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
381 if isheader(chunk) and chunk.isnewfile(): |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
382 newlyaddedandmodifiedfiles.add(chunk.filename()) |
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
383 alsorestore.update(set(chunk.files()) - {chunk.filename()}) |
42862
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
384 return newlyaddedandmodifiedfiles, alsorestore |
25257
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
385 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
386 |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
387 def parsealiases(cmd): |
46241
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
388 base_aliases = cmd.split(b"|") |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
389 all_aliases = set(base_aliases) |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
390 extra_aliases = [] |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
391 for alias in base_aliases: |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
392 if b'-' in alias: |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
393 folded_alias = alias.replace(b'-', b'') |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
394 if folded_alias not in all_aliases: |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
395 all_aliases.add(folded_alias) |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
396 extra_aliases.append(folded_alias) |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
397 base_aliases.extend(extra_aliases) |
012e25abc603
command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45957
diff
changeset
|
398 return base_aliases |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
399 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
400 |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
401 def setupwrapcolorwrite(ui): |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
402 # wrap ui.write so diff output can be labeled/colorized |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
403 def wrapwrite(orig, *args, **kw): |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43539
diff
changeset
|
404 label = kw.pop('label', b'') |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
405 for chunk, l in patch.difflabel(lambda: args): |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
406 orig(chunk, label=label + l) |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
407 |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
408 oldwrite = ui.write |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
409 |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
410 def wrap(*args, **kwargs): |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
411 return wrapwrite(oldwrite, *args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
412 |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
413 setattr(ui, 'write', wrap) |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
414 return oldwrite |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
415 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
416 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
417 def filterchunks(ui, originalhunks, usecurses, testfile, match, operation=None): |
38080
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
418 try: |
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
419 if usecurses: |
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
420 if testfile: |
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
421 recordfn = crecordmod.testdecorator( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
422 testfile, crecordmod.testchunkselector |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
423 ) |
38080
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
424 else: |
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
425 recordfn = crecordmod.chunkselector |
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
426 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
427 return crecordmod.filterpatch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
428 ui, originalhunks, recordfn, operation |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
429 ) |
38080
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
430 except crecordmod.fallbackerror as e: |
44098
19533e4c3450
py3: fix curses chunkselector fallback (when diffs are too large) on py3
Kyle Lippincott <spectral@google.com>
parents:
44049
diff
changeset
|
431 ui.warn(b'%s\n' % e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
432 ui.warn(_(b'falling back to text mode\n')) |
38080
dabc2237963c
crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents:
38002
diff
changeset
|
433 |
42071
db72f9f6580e
interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
42057
diff
changeset
|
434 return patch.filterpatch(ui, originalhunks, match, operation) |
db72f9f6580e
interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
42057
diff
changeset
|
435 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
436 |
42071
db72f9f6580e
interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
42057
diff
changeset
|
437 def recordfilter(ui, originalhunks, match, operation=None): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
438 """Prompts the user to filter the originalhunks and return a list of |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
439 selected hunks. |
29326
d48fc6f318a3
patch: define full messages for interactive record/revert
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29283
diff
changeset
|
440 *operation* is used for to build ui messages to indicate the user what |
d48fc6f318a3
patch: define full messages for interactive record/revert
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29283
diff
changeset
|
441 kind of filtering they are doing: reverting, committing, shelving, etc. |
d48fc6f318a3
patch: define full messages for interactive record/revert
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29283
diff
changeset
|
442 (see patch.filterpatch). |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
443 """ |
27531
84d686cb62c4
cmdutil: use crecordmod.checkcurses
Sean Farley <sean@farley.io>
parents:
27370
diff
changeset
|
444 usecurses = crecordmod.checkcurses(ui) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
445 testfile = ui.config(b'experimental', b'crecordtest') |
24358
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
446 oldwrite = setupwrapcolorwrite(ui) |
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
447 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
448 newchunks, newopts = filterchunks( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
449 ui, originalhunks, usecurses, testfile, match, operation |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
450 ) |
24358
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
451 finally: |
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
452 ui.write = oldwrite |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
27148
diff
changeset
|
453 return newchunks, newopts |
24357
2da601ab3125
record: refactor the filtering code
Laurent Charignon <lcharignon@fb.com>
parents:
24356
diff
changeset
|
454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
455 |
50242
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
456 def _record( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
457 ui, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
458 repo, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
459 message, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
460 match, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
461 opts, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
462 commitfunc, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
463 backupall, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
464 filterfn, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
465 pats, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
466 ): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
467 """This is generic record driver. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
468 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
469 Its job is to interactively filter local changes, and |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
470 accordingly prepare working directory into a state in which the |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
471 job can be delegated to a non-interactive commit command such as |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
472 'commit' or 'qrefresh'. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
473 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
474 After the actual job is done by non-interactive command, the |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
475 working directory is restored to its original state. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
476 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
477 In the end we'll record interesting changes, and everything else |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
478 will be left in place, so the user can continue working. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
479 """ |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
480 assert repo.currentwlock() is not None |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
481 if not opts.get(b'interactive-unshelve'): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
482 checkunfinished(repo, commit=True) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
483 wctx = repo[None] |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
484 merge = len(wctx.parents()) > 1 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
485 if merge: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
486 raise error.InputError( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
487 _(b'cannot partially commit a merge ' b'(use "hg commit" instead)') |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
488 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
489 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
490 def fail(f, msg): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
491 raise error.InputError(b'%s: %s' % (f, msg)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
492 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
493 force = opts.get(b'force') |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
494 if not force: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
495 match = matchmod.badmatch(match, fail) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
496 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
497 status = repo.status(match=match) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
498 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
499 overrides = {(b'ui', b'commitsubrepos'): True} |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
500 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
501 with repo.ui.configoverride(overrides, b'record'): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
502 # subrepoutil.precommit() modifies the status |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
503 tmpstatus = scmutil.status( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
504 copymod.copy(status.modified), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
505 copymod.copy(status.added), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
506 copymod.copy(status.removed), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
507 copymod.copy(status.deleted), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
508 copymod.copy(status.unknown), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
509 copymod.copy(status.ignored), |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
510 copymod.copy(status.clean), # pytype: disable=wrong-arg-count |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
511 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
512 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
513 # Force allows -X subrepo to skip the subrepo. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
514 subs, commitsubs, newstate = subrepoutil.precommit( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
515 repo.ui, wctx, tmpstatus, match, force=True |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
516 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
517 for s in subs: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
518 if s in commitsubs: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
519 dirtyreason = wctx.sub(s).dirtyreason(True) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
520 raise error.Abort(dirtyreason) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
521 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
522 if not force: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
523 repo.checkcommitpatterns(wctx, match, status, fail) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
524 diffopts = patch.difffeatureopts( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
525 ui, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
526 opts=opts, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
527 whitespace=True, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
528 section=b'commands', |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
529 configprefix=b'commit.interactive.', |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
530 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
531 diffopts.nodates = True |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
532 diffopts.git = True |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
533 diffopts.showfunc = True |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
534 originaldiff = patch.diff(repo, changes=status, opts=diffopts) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
535 original_headers = patch.parsepatch(originaldiff) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
536 match = scmutil.match(repo[None], pats) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
537 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
538 # 1. filter patch, since we are intending to apply subset of it |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
539 try: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
540 chunks, newopts = filterfn(ui, original_headers, match) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
541 except error.PatchParseError as err: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
542 raise error.InputError(_(b'error parsing patch: %s') % err) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
543 except error.PatchApplicationError as err: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
544 raise error.StateError(_(b'error applying patch: %s') % err) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
545 opts.update(newopts) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
546 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
547 # We need to keep a backup of files that have been newly added and |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
548 # modified during the recording process because there is a previous |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
549 # version without the edit in the workdir. We also will need to restore |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
550 # files that were the sources of renames so that the patch application |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
551 # works. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
552 newlyaddedandmodifiedfiles, alsorestore = newandmodified(chunks) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
553 contenders = set() |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
554 for h in chunks: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
555 if isheader(h): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
556 contenders.update(set(h.files())) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
557 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
558 changed = status.modified + status.added + status.removed |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
559 newfiles = [f for f in changed if f in contenders] |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
560 if not newfiles: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
561 ui.status(_(b'no changes to record\n')) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
562 return 0 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
563 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
564 modified = set(status.modified) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
565 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
566 # 2. backup changed files, so we can restore them in the end |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
567 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
568 if backupall: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
569 tobackup = changed |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
570 else: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
571 tobackup = [ |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
572 f |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
573 for f in newfiles |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
574 if f in modified or f in newlyaddedandmodifiedfiles |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
575 ] |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
576 backups = {} |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
577 if tobackup: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
578 backupdir = repo.vfs.join(b'record-backups') |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
579 try: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
580 os.mkdir(backupdir) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
581 except FileExistsError: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
582 pass |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
583 try: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
584 # backup continues |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
585 for f in tobackup: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
586 fd, tmpname = pycompat.mkstemp( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
587 prefix=os.path.basename(f) + b'.', dir=backupdir |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
588 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
589 os.close(fd) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
590 ui.debug(b'backup %r as %r\n' % (f, tmpname)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
591 util.copyfile(repo.wjoin(f), tmpname, copystat=True) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
592 backups[f] = tmpname |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
593 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
594 fp = stringio() |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
595 for c in chunks: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
596 fname = c.filename() |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
597 if fname in backups: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
598 c.write(fp) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
599 dopatch = fp.tell() |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
600 fp.seek(0) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
601 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
602 # 2.5 optionally review / modify patch in text editor |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
603 if opts.get(b'review', False): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
604 patchtext = ( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
605 crecordmod.diffhelptext + crecordmod.patchhelptext + fp.read() |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
606 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
607 reviewedpatch = ui.edit( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
608 patchtext, b"", action=b"diff", repopath=repo.path |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
609 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
610 fp.truncate(0) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
611 fp.write(reviewedpatch) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
612 fp.seek(0) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
613 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
614 [os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles] |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
615 # 3a. apply filtered patch to clean repo (clean) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
616 if backups: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
617 m = scmutil.matchfiles(repo, set(backups.keys()) | alsorestore) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
618 mergemod.revert_to(repo[b'.'], matcher=m) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
619 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
620 # 3b. (apply) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
621 if dopatch: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
622 try: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
623 ui.debug(b'applying patch\n') |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
624 ui.debug(fp.getvalue()) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
625 patch.internalpatch(ui, repo, fp, 1, eolmode=None) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
626 except error.PatchParseError as err: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
627 raise error.InputError(pycompat.bytestr(err)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
628 except error.PatchApplicationError as err: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
629 raise error.StateError(pycompat.bytestr(err)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
630 del fp |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
631 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
632 # 4. We prepared working directory according to filtered |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
633 # patch. Now is the time to delegate the job to |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
634 # commit/qrefresh or the like! |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
635 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
636 # Make all of the pathnames absolute. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
637 newfiles = [repo.wjoin(nf) for nf in newfiles] |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
638 return commitfunc(ui, repo, *newfiles, **pycompat.strkwargs(opts)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
639 finally: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
640 # 5. finally restore backed-up files |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
641 try: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
642 dirstate = repo.dirstate |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
643 for realname, tmpname in backups.items(): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
644 ui.debug(b'restoring %r to %r\n' % (tmpname, realname)) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
645 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
646 if dirstate.get_entry(realname).maybe_clean: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
647 # without normallookup, restoring timestamp |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
648 # may cause partially committed files |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
649 # to be treated as unmodified |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
650 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
651 # XXX-PENDINGCHANGE: We should clarify the context in |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
652 # which this function is called to make sure it |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
653 # already called within a `pendingchange`, However we |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
654 # are taking a shortcut here in order to be able to |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
655 # quickly deprecated the older API. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
656 with dirstate.changing_parents(repo): |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
657 dirstate.update_file( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
658 realname, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
659 p1_tracked=True, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
660 wc_tracked=True, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
661 possibly_dirty=True, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
662 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
663 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
664 # copystat=True here and above are a hack to trick any |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
665 # editors that have f open that we haven't modified them. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
666 # |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
667 # Also note that this racy as an editor could notice the |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
668 # file's mtime before we've finished writing it. |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
669 util.copyfile(tmpname, repo.wjoin(realname), copystat=True) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
670 os.unlink(tmpname) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
671 if tobackup: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
672 os.rmdir(backupdir) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
673 except OSError: |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
674 pass |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
675 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
676 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
677 def dorecord( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
678 ui, repo, commitfunc, cmdsuggest, backupall, filterfn, *pats, **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
679 ): |
32193
93155367a2a6
py3: convert opts to bytes in cmdutil.dorecord()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32046
diff
changeset
|
680 opts = pycompat.byteskwargs(opts) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
681 if not ui.interactive(): |
25795
69145daacdfa
cmdutil: allow callers of cmdutil.dorecord to omit suggestion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25763
diff
changeset
|
682 if cmdsuggest: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
683 msg = _(b'running non-interactively, use %s instead') % cmdsuggest |
25795
69145daacdfa
cmdutil: allow callers of cmdutil.dorecord to omit suggestion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25763
diff
changeset
|
684 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
685 msg = _(b'running non-interactively') |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
686 raise error.InputError(msg) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
687 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
688 # make sure username is set before going interactive |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
689 if not opts.get(b'user'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
690 ui.username() # raise exception, username not provided |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
691 |
50242
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
692 func = functools.partial( |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
693 _record, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
694 commitfunc=commitfunc, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
695 backupall=backupall, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
696 filterfn=filterfn, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
697 pats=pats, |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
698 ) |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
699 |
ee7a7155de10
record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
700 return commit(ui, repo, func, pats, opts) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
701 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
702 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
703 class dirnode: |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
704 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
705 Represent a directory in user working copy with information required for |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
706 the purpose of tersing its status. |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
707 |
38231
51e420a7a41a
cmdutil: use internal separators when building the terse list
Matt Harbison <matt_harbison@yahoo.com>
parents:
38197
diff
changeset
|
708 path is the path to the directory, without a trailing '/' |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
709 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
710 statuses is a set of statuses of all files in this directory (this includes |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
711 all the files in all the subdirectories too) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
712 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
713 files is a list of files which are direct child of this directory |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
714 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
715 subdirs is a dictionary of sub-directory name as the key and it's own |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
716 dirnode object as the value |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
717 """ |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
718 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
719 def __init__(self, dirpath): |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
720 self.path = dirpath |
42057
566daffc607d
cleanup: use set literals where possible
Martin von Zweigbergk <martinvonz@google.com>
parents:
41994
diff
changeset
|
721 self.statuses = set() |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
722 self.files = [] |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
723 self.subdirs = {} |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
724 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
725 def _addfileindir(self, filename, status): |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
726 """Add a file in this directory as a direct child.""" |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
727 self.files.append((filename, status)) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
728 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
729 def addfile(self, filename, status): |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
730 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
731 Add a file to this directory or to its direct parent directory. |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
732 |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
733 If the file is not direct child of this directory, we traverse to the |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
734 directory of which this file is a direct child of and add the file |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
735 there. |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
736 """ |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
737 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
738 # the filename contains a path separator, it means it's not the direct |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
739 # child of this directory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
740 if b'/' in filename: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
741 subdir, filep = filename.split(b'/', 1) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
742 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
743 # does the dirnode object for subdir exists |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
744 if subdir not in self.subdirs: |
38231
51e420a7a41a
cmdutil: use internal separators when building the terse list
Matt Harbison <matt_harbison@yahoo.com>
parents:
38197
diff
changeset
|
745 subdirpath = pathutil.join(self.path, subdir) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
746 self.subdirs[subdir] = dirnode(subdirpath) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
747 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
748 # try adding the file in subdir |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
749 self.subdirs[subdir].addfile(filep, status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
750 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
751 else: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
752 self._addfileindir(filename, status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
753 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
754 if status not in self.statuses: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
755 self.statuses.add(status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
756 |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
757 def iterfilepaths(self): |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
758 """Yield (status, path) for files directly under this directory.""" |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
759 for f, st in self.files: |
38231
51e420a7a41a
cmdutil: use internal separators when building the terse list
Matt Harbison <matt_harbison@yahoo.com>
parents:
38197
diff
changeset
|
760 yield st, pathutil.join(self.path, f) |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
761 |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
762 def tersewalk(self, terseargs): |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
763 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
764 Yield (status, path) obtained by processing the status of this |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
765 dirnode. |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
766 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
767 terseargs is the string of arguments passed by the user with `--terse` |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
768 flag. |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
769 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
770 Following are the cases which can happen: |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
771 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
772 1) All the files in the directory (including all the files in its |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
773 subdirectories) share the same status and the user has asked us to terse |
38231
51e420a7a41a
cmdutil: use internal separators when building the terse list
Matt Harbison <matt_harbison@yahoo.com>
parents:
38197
diff
changeset
|
774 that status. -> yield (status, dirpath). dirpath will end in '/'. |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
775 |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
776 2) Otherwise, we do following: |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
777 |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
778 a) Yield (status, filepath) for all the files which are in this |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
779 directory (only the ones in this directory, not the subdirs) |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
780 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
781 b) Recurse the function on all the subdirectories of this |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
782 directory |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
783 """ |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
784 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
785 if len(self.statuses) == 1: |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
786 onlyst = self.statuses.pop() |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
787 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
788 # Making sure we terse only when the status abbreviation is |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
789 # passed as terse argument |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
790 if onlyst in terseargs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
791 yield onlyst, self.path + b'/' |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
792 return |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
793 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
794 # add the files to status list |
52669
e627cc25b6f3
pyupgrade: rewrite `yield` statements in a loop to `yield from`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52665
diff
changeset
|
795 yield from self.iterfilepaths() |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
796 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
797 # recurse on the subdirs |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
798 for dirobj in self.subdirs.values(): |
52669
e627cc25b6f3
pyupgrade: rewrite `yield` statements in a loop to `yield from`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52665
diff
changeset
|
799 yield from dirobj.tersewalk(terseargs) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
800 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
801 |
52481
9d79ffeed7c0
typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents:
52402
diff
changeset
|
802 def tersedir(statuslist: istatus.Status, terseargs) -> istatus.Status: |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
803 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
804 Terse the status if all the files in a directory shares the same status. |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
805 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
806 statuslist is scmutil.status() object which contains a list of files for |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
807 each status. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
808 terseargs is string which is passed by the user as the argument to `--terse` |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
809 flag. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
810 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
811 The function makes a tree of objects of dirnode class, and at each node it |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
812 stores the information required to know whether we can terse a certain |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
813 directory or not. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
814 """ |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
815 # the order matters here as that is used to produce final list |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
816 allst = (b'm', b'a', b'r', b'd', b'u', b'i', b'c') |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
817 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
818 # checking the argument validity |
34893
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
819 for s in pycompat.bytestr(terseargs): |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
820 if s not in allst: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
821 raise error.InputError(_(b"'%s' not recognized") % s) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
822 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
823 # creating a dirnode object for the root of the repo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
824 rootobj = dirnode(b'') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
825 pstatus = ( |
50933
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
826 ('modified', b'm'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
827 ('added', b'a'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
828 ('deleted', b'd'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
829 ('clean', b'c'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
830 ('unknown', b'u'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
831 ('ignored', b'i'), |
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
832 ('removed', b'r'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
833 ) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
834 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
835 tersedict = {} |
50933
1270677d740b
terse-status: use `sysstr` to specify attributes to set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50852
diff
changeset
|
836 for attrname, statuschar in pstatus: |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
837 for f in getattr(statuslist, attrname): |
34893
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
838 rootobj.addfile(f, statuschar) |
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
839 tersedict[statuschar] = [] |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
840 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
841 # we won't be tersing the root dir, so add files in it |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
842 for st, fpath in rootobj.iterfilepaths(): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
843 tersedict[st].append(fpath) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
844 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
845 # process each sub-directory and build tersedict |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
846 for subdir in rootobj.subdirs.values(): |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
847 for st, f in subdir.tersewalk(terseargs): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
848 tersedict[st].append(f) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
849 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
850 tersedlist = [] |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
851 for st in allst: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
852 tersedict[st].sort() |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
853 tersedlist.append(tersedict[st]) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34373
diff
changeset
|
854 |
43689
9cb7f855e2fc
cmdutil: convert terse status result back to an scmutil.status
Augie Fackler <augie@google.com>
parents:
43688
diff
changeset
|
855 return scmutil.status(*tersedlist) |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
856 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
857 |
33792
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
858 def _commentlines(raw): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
859 '''Surround lineswith a comment char and a new line''' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
860 lines = raw.splitlines() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 commentedlines = [b'# %s' % line for line in lines] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
862 return b'\n'.join(commentedlines) + b'\n' |
33792
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
863 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
864 |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
865 @attr.s(frozen=True) |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
866 class morestatus: |
49480
cdfba684b6a1
status: include `repo` in template context also for resolved paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
49313
diff
changeset
|
867 repo = attr.ib() |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
868 unfinishedop = attr.ib() |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
869 unfinishedmsg = attr.ib() |
43943
4ca89cc20d02
status: extract active-merge state for reuse
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43932
diff
changeset
|
870 activemerge = attr.ib() |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
871 unresolvedpaths = attr.ib() |
43945
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
872 _formattedpaths = attr.ib(init=False, default=set()) |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
873 _label = b'status.morestatus' |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
874 |
43860
7315464f0613
status: add template/json data about whether a file has unresolved conflicts
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43859
diff
changeset
|
875 def formatfile(self, path, fm): |
43945
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
876 self._formattedpaths.add(path) |
43943
4ca89cc20d02
status: extract active-merge state for reuse
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43932
diff
changeset
|
877 if self.activemerge and path in self.unresolvedpaths: |
43860
7315464f0613
status: add template/json data about whether a file has unresolved conflicts
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43859
diff
changeset
|
878 fm.data(unresolved=True) |
7315464f0613
status: add template/json data about whether a file has unresolved conflicts
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43859
diff
changeset
|
879 |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
880 def formatfooter(self, fm): |
43944
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
881 if self.unfinishedop or self.unfinishedmsg: |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
882 fm.startitem() |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
883 fm.data(itemtype=b'morestatus') |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
884 |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
885 if self.unfinishedop: |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
886 fm.data(unfinished=self.unfinishedop) |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
887 statemsg = ( |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
888 _(b'The repository is in an unfinished *%s* state.') |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
889 % self.unfinishedop |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
890 ) |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
891 fm.plain(b'%s\n' % _commentlines(statemsg), label=self._label) |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
892 if self.unfinishedmsg: |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
893 fm.data(unfinishedmsg=self.unfinishedmsg) |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
894 |
43945
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
895 # May also start new data items. |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
896 self._formatconflicts(fm) |
43944
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
897 |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
898 if self.unfinishedmsg: |
43866
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
899 fm.plain( |
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
900 b'%s\n' % _commentlines(self.unfinishedmsg), label=self._label |
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
901 ) |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
902 |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
903 def _formatconflicts(self, fm): |
43943
4ca89cc20d02
status: extract active-merge state for reuse
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43932
diff
changeset
|
904 if not self.activemerge: |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
905 return |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
906 |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
907 if self.unresolvedpaths: |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
908 mergeliststr = b'\n'.join( |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
909 [ |
43866
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
910 b' %s' |
49480
cdfba684b6a1
status: include `repo` in template context also for resolved paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
49313
diff
changeset
|
911 % util.pathto(self.repo.root, encoding.getcwd(), path) |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
912 for path in self.unresolvedpaths |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
913 ] |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
914 ) |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
915 msg = ( |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
916 _( |
46394
83ffc49f7e48
morestatus: convert a UI message about merge conflicts to bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
46364
diff
changeset
|
917 b'''Unresolved merge conflicts: |
33792
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
918 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
919 %s |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
920 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
921 To mark files as resolved: hg resolve --mark FILE''' |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
922 ) |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
923 % mergeliststr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
924 ) |
43945
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
925 |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
926 # If any paths with unresolved conflicts were not previously |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
927 # formatted, output them now. |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
928 for f in self.unresolvedpaths: |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
929 if f in self._formattedpaths: |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
930 # Already output. |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
931 continue |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
932 fm.startitem() |
49480
cdfba684b6a1
status: include `repo` in template context also for resolved paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
49313
diff
changeset
|
933 fm.context(repo=self.repo) |
43945
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
934 # We can't claim to know the status of the file - it may just |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
935 # have been in one of the states that were not requested for |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
936 # display, so it could be anything. |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
937 fm.data(itemtype=b'file', path=f, unresolved=True) |
07ebb567e8bb
status: make unresolved files always be in the morestatus structured output
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43944
diff
changeset
|
938 |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
939 else: |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
940 msg = _(b'No unresolved merge conflicts.') |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
941 |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
942 fm.plain(b'%s\n' % _commentlines(msg), label=self._label) |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
943 |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
944 |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
945 def readmorestatus(repo): |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
946 """Returns a morestatus object if the repo has unfinished state.""" |
42538
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42537
diff
changeset
|
947 statetuple = statemod.getrepostate(repo) |
44915
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44772
diff
changeset
|
948 mergestate = mergestatemod.mergestate.read(repo) |
43943
4ca89cc20d02
status: extract active-merge state for reuse
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43932
diff
changeset
|
949 activemerge = mergestate.active() |
43944
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
950 if not statetuple and not activemerge: |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
951 return None |
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
952 |
43944
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
953 unfinishedop = unfinishedmsg = unresolved = None |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
954 if statetuple: |
489fdf27769c
status: make morestatus call out unresolved conflicts after update
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43943
diff
changeset
|
955 unfinishedop, unfinishedmsg = statetuple |
43943
4ca89cc20d02
status: extract active-merge state for reuse
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43932
diff
changeset
|
956 if activemerge: |
43859
fb4a6d584756
status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
43838
diff
changeset
|
957 unresolved = sorted(mergestate.unresolved()) |
43866
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
958 return morestatus( |
49480
cdfba684b6a1
status: include `repo` in template context also for resolved paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
49313
diff
changeset
|
959 repo, unfinishedop, unfinishedmsg, activemerge, unresolved |
43866
612951e08278
formatting: fix some recent formatting regressions
Martin von Zweigbergk <martinvonz@google.com>
parents:
43860
diff
changeset
|
960 ) |
33792
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33763
diff
changeset
|
961 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
962 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
963 def findpossible(cmd, table, strict=False): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
964 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
965 Return cmd -> (aliases, command table entry) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
966 for each matching command. |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
967 Return debug commands (or their aliases) only if no normal command matches. |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
968 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
969 choice = {} |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
970 debugchoice = {} |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
971 |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
972 if cmd in table: |
40295
fa88170c10bb
help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents:
40102
diff
changeset
|
973 # short-circuit exact matches, "log" alias beats "log|history" |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
974 keys = [cmd] |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
975 else: |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
976 keys = table.keys() |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
977 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
978 allcmds = [] |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
979 for e in keys: |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
980 aliases = parsealiases(e) |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
981 allcmds.extend(aliases) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
982 found = None |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
983 if cmd in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
984 found = cmd |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
985 elif not strict: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
986 for a in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
987 if a.startswith(cmd): |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
988 found = a |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
989 break |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
990 if found is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
991 if aliases[0].startswith(b"debug") or found.startswith(b"debug"): |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
992 debugchoice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
993 else: |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
994 choice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
995 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
996 if not choice and debugchoice: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
997 choice = debugchoice |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
998 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
999 return choice, allcmds |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1000 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1001 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
1002 def findcmd(cmd, table, strict=True): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1003 """Return (aliases, command table entry) for command string.""" |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
1004 choice, allcmds = findpossible(cmd, table, strict) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1005 |
5915
d0576d065993
Prefer i in d over d.has_key(i)
Christian Ebert <blacktrash@gmx.net>
parents:
5843
diff
changeset
|
1006 if cmd in choice: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1007 return choice[cmd] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1008 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1009 if len(choice) > 1: |
32561
9f56d462634c
cmdutil: use sorted(dict) instead of x = dict.keys(); x.sort()
Augie Fackler <raf@durin42.com>
parents:
32472
diff
changeset
|
1010 clist = sorted(choice) |
7643
9a1ea6587557
error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents:
7404
diff
changeset
|
1011 raise error.AmbiguousCommand(cmd, clist) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1012 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1013 if choice: |
32880
e4a43b810528
py3: explicitly convert dict.values() to a list on py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32860
diff
changeset
|
1014 return list(choice.values())[0] |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1015 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
1016 raise error.UnknownCommand(cmd, allcmds) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1017 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1018 |
50852
13ad1b2ad3b4
branch: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50848
diff
changeset
|
1019 def changebranch(ui, repo, revs, label, **opts): |
47031
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46969
diff
changeset
|
1020 """Change the branch name of given revs to label""" |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1021 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1022 with repo.wlock(), repo.lock(), repo.transaction(b'branches'): |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1023 # abort in case of uncommitted merge or dirty wdir |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1024 bailifchanged(repo) |
48128
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1025 revs = logcmdutil.revrange(repo, revs) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1026 if not revs: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1027 raise error.InputError(b"empty revision set") |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1028 roots = repo.revs(b'roots(%ld)', revs) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1029 if len(roots) > 1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1030 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1031 _(b"cannot change branch of non-linear revisions") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1032 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1033 rewriteutil.precheck(repo, revs, b'change branch of') |
35746
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
1034 |
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
1035 root = repo[roots.first()] |
40707
69268a13ffa5
branch: allow changing branch of merge commits with --rev
Anton Shestakov <av6@dwimlabs.net>
parents:
40367
diff
changeset
|
1036 rpb = {parent.branch() for parent in root.parents()} |
44190
92b7caf4cb9e
branch: make --force work even when specifying revs
Manuel Jacob <me@manueljacob.de>
parents:
44184
diff
changeset
|
1037 if ( |
50852
13ad1b2ad3b4
branch: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50848
diff
changeset
|
1038 not opts.get('force') |
44190
92b7caf4cb9e
branch: make --force work even when specifying revs
Manuel Jacob <me@manueljacob.de>
parents:
44184
diff
changeset
|
1039 and label not in rpb |
92b7caf4cb9e
branch: make --force work even when specifying revs
Manuel Jacob <me@manueljacob.de>
parents:
44184
diff
changeset
|
1040 and label in repo.branchmap() |
92b7caf4cb9e
branch: make --force work even when specifying revs
Manuel Jacob <me@manueljacob.de>
parents:
44184
diff
changeset
|
1041 ): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1042 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1043 _(b"a branch of the same name already exists") |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1044 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1045 |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1046 # make sure only topological heads |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1047 if repo.revs(b'heads(%ld) - head()', revs): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1048 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1049 _(b"cannot change branch in middle of a stack") |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1050 ) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1051 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1052 replacements = {} |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1053 # avoid import cycle mercurial.cmdutil -> mercurial.context -> |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1054 # mercurial.subrepo -> mercurial.cmdutil |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1055 from . import context |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1056 |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1057 for rev in revs: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1058 ctx = repo[rev] |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1059 oldbranch = ctx.branch() |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1060 # check if ctx has same branch |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1061 if oldbranch == label: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1062 continue |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1063 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1064 def filectxfn(repo, newctx, path): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1065 try: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1066 return ctx[path] |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1067 except error.ManifestLookupError: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1068 return None |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1069 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1070 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1071 b"changing branch of '%s' from '%s' to '%s'\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1072 % (hex(ctx.node()), oldbranch, label) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1073 ) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1074 extra = ctx.extra() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1075 extra[b'branch_change'] = hex(ctx.node()) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1076 # While changing branch of set of linear commits, make sure that |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1077 # we base our commits on new parent rather than old parent which |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1078 # was obsoleted while changing the branch |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1079 p1 = ctx.p1().node() |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1080 p2 = ctx.p2().node() |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1081 if p1 in replacements: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1082 p1 = replacements[p1][0] |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1083 if p2 in replacements: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1084 p2 = replacements[p2][0] |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1085 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1086 mc = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1087 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1088 (p1, p2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1089 ctx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1090 ctx.files(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1091 filectxfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1092 user=ctx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1093 date=ctx.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1094 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1095 branch=label, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1096 ) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1097 |
38429
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38379
diff
changeset
|
1098 newnode = repo.commitctx(mc) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1099 replacements[ctx.node()] = (newnode,) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1100 ui.debug(b'new node id is %s\n' % hex(newnode)) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1101 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1102 # create obsmarkers and move bookmarks |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1103 scmutil.cleanupnodes( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1104 repo, replacements, b'branch-change', fixphase=True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1105 ) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1106 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1107 # move the working copy too |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1108 wctx = repo[None] |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1109 # in-progress merge is a bit too complex for now. |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1110 if len(wctx.parents()) == 1: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1111 newid = replacements.get(wctx.p1().node()) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1112 if newid is not None: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1113 # avoid import cycle mercurial.cmdutil -> mercurial.hg -> |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1114 # mercurial.cmdutil |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1115 from . import hg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1116 |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1117 hg.update(repo, newid[0], quietempty=True) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1118 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1119 ui.status(_(b"changed branch on %d changesets\n") % len(replacements)) |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
1120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1121 |
51774
7601978f9e9f
typing: add type hints to `cmdutil.findrepo()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51762
diff
changeset
|
1122 def findrepo(p: bytes) -> Optional[bytes]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1123 while not os.path.isdir(os.path.join(p, b".hg")): |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1124 oldp, p = p, os.path.dirname(p) |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1125 if p == oldp: |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1126 return None |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1127 |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1128 return p |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
1129 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1130 |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1131 def bailifchanged(repo, merge=True, hint=None): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
1132 """enforce the precondition that working directory must be clean. |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1133 |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1134 'merge' can be set to false if a pending uncommitted merge should be |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1135 ignored (such as when 'update --check' runs). |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1136 |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1137 'hint' is the usual hint given to Abort exception. |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1138 """ |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1139 |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46969
diff
changeset
|
1140 if merge and repo.dirstate.p2() != repo.nullid: |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
1141 raise error.StateError(_(b'outstanding uncommitted merge'), hint=hint) |
43688
e01e0641f18a
cmdutil: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43571
diff
changeset
|
1142 st = repo.status() |
e01e0641f18a
cmdutil: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43571
diff
changeset
|
1143 if st.modified or st.added or st.removed or st.deleted: |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
1144 raise error.StateError(_(b'uncommitted changes'), hint=hint) |
15231
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
1145 ctx = repo[None] |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
1146 for s in sorted(ctx.substate): |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
1147 ctx.sub(s).bailifchanged(hint=hint) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1148 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1149 |
52670
4cb75772818d
pyupgrade: drop the quoting around type annotations
Matt Harbison <matt_harbison@yahoo.com>
parents:
52669
diff
changeset
|
1150 def logmessage(ui: uimod.ui, opts: Dict[bytes, Any]) -> Optional[bytes]: |
47031
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46969
diff
changeset
|
1151 """get the log message according to -m and -l option""" |
43900
774cee0e95c6
amend: use cmdutil.check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43899
diff
changeset
|
1152 |
774cee0e95c6
amend: use cmdutil.check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43899
diff
changeset
|
1153 check_at_most_one_arg(opts, b'message', b'logfile') |
774cee0e95c6
amend: use cmdutil.check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43899
diff
changeset
|
1154 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
1155 message = cast(Optional[bytes], opts.get(b'message')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1156 logfile = opts.get(b'logfile') |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1157 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1158 if not message and logfile: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1159 try: |
32641
d3e1c5b4986c
cmdutil: use isstdiofilename() where appropriate
Yuya Nishihara <yuya@tcha.org>
parents:
32610
diff
changeset
|
1160 if isstdiofilename(logfile): |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
1161 message = ui.fin.read() |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1162 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1163 message = b'\n'.join(util.readfile(logfile).splitlines()) |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52629
diff
changeset
|
1164 except OSError as inst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1165 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1166 _(b"can't read commit message '%s': %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1167 % (logfile, encoding.strtolocal(inst.strerror)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1168 ) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1169 return message |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
1170 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1171 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1172 def mergeeditform(ctxorbool, baseformname): |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1173 """return appropriate editform name (referencing a committemplate) |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1174 |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1175 'ctxorbool' is either a ctx to be committed, or a bool indicating whether |
22248
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1176 merging is committed. |
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1177 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1178 This returns baseformname with '.merge' appended if it is a merge, |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
1179 otherwise '.normal' is appended. |
22248
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1180 """ |
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1181 if isinstance(ctxorbool, bool): |
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1182 if ctxorbool: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1183 return baseformname + b".merge" |
40030
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39936
diff
changeset
|
1184 elif len(ctxorbool.parents()) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1185 return baseformname + b".merge" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1186 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1187 return baseformname + b".normal" |
22248
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
1188 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1189 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1190 def getcommiteditor( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1191 edit=False, finishdesc=None, extramsg=None, editform=b'', **opts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1192 ): |
21419
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1193 """get appropriate commit message editor according to '--edit' option |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1194 |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1195 'finishdesc' is a function to be called with edited commit message |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1196 (= 'description' of the new changeset) just after editing, but |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1197 before checking empty-ness. It should return actual text to be |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1198 stored into history. This allows to change description before |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1199 storing. |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1200 |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1201 'extramsg' is a extra message to be shown in the editor instead of |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1202 'Leave message empty to abort commit' line. 'HG: ' prefix and EOL |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1203 is automatically added. |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1204 |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
1205 'editform' is a dot-separated list of names, to distinguish |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
1206 the purpose of commit text editing. |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
1207 |
21419
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1208 'getcommiteditor' returns 'commitforceeditor' regardless of |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1209 'edit', if one of 'finishdesc' or 'extramsg' is specified, because |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1210 they are specific for usage in MQ. |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1211 """ |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
1212 if edit or finishdesc or extramsg: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1213 return lambda r, c, s: commitforceeditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1214 r, c, s, finishdesc=finishdesc, extramsg=extramsg, editform=editform |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1215 ) |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
1216 elif editform: |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
1217 return lambda r, c, s: commiteditor(r, c, s, editform=editform) |
21405
dcf20f244c2a
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21241
diff
changeset
|
1218 else: |
dcf20f244c2a
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21241
diff
changeset
|
1219 return commiteditor |
dcf20f244c2a
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21241
diff
changeset
|
1220 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1221 |
37774
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1222 def _escapecommandtemplate(tmpl): |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1223 parts = [] |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1224 for typ, start, end in templater.scantemplate(tmpl, raw=True): |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1225 if typ == b'string': |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1226 parts.append(stringutil.escapestr(tmpl[start:end])) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1227 else: |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1228 parts.append(tmpl[start:end]) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1229 return b''.join(parts) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1230 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1231 |
37774
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1232 def rendercommandtemplate(ui, tmpl, props): |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1233 r"""Expand a literal template 'tmpl' in a way suitable for command line |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1234 |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1235 '\' in outermost string is not taken as an escape character because it |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1236 is a directory separator on Windows. |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1237 |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1238 >>> from . import ui as uimod |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1239 >>> ui = uimod.ui() |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1240 >>> rendercommandtemplate(ui, b'c:\\{path}', {b'path': b'foo'}) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1241 'c:\\foo' |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1242 >>> rendercommandtemplate(ui, b'{"c:\\{path}"}', {'path': b'foo'}) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1243 'c:{path}' |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1244 """ |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1245 if not tmpl: |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1246 return tmpl |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1247 t = formatter.maketemplater(ui, _escapecommandtemplate(tmpl)) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1248 return t.renderdefault(props) |
d6970628b95f
fix: use templater to substitute values in command string
Yuya Nishihara <yuya@tcha.org>
parents:
37763
diff
changeset
|
1249 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1250 |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1251 def rendertemplate(ctx, tmpl, props=None): |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1252 """Expand a literal template 'tmpl' byte-string against one changeset |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1253 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1254 Each props item must be a stringify-able value or a callable returning |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1255 such value, i.e. no bare list nor dict should be passed. |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1256 """ |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1257 repo = ctx.repo() |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1258 tres = formatter.templateresources(repo.ui, repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1259 t = formatter.maketemplater( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1260 repo.ui, tmpl, defaults=templatekw.keywords, resources=tres |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1261 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1262 mapping = {b'ctx': ctx} |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1263 if props: |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1264 mapping.update(props) |
36991
317382151ac3
templater: rename .render(mapping) to .renderdefault(mapping) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
36989
diff
changeset
|
1265 return t.renderdefault(mapping) |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1266 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1267 |
45793
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1268 def format_changeset_summary(ui, ctx, command=None, default_spec=None): |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1269 """Format a changeset summary (one line).""" |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1270 spec = None |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1271 if command: |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1272 spec = ui.config( |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1273 b'command-templates', b'oneline-summary.%s' % command, None |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1274 ) |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1275 if not spec: |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1276 spec = ui.config(b'command-templates', b'oneline-summary') |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1277 if not spec: |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1278 spec = default_spec |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1279 if not spec: |
45794
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45793
diff
changeset
|
1280 spec = ( |
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45793
diff
changeset
|
1281 b'{separate(" ", ' |
45819
e9555305c5c6
templates: include all non-branch namespaces in default one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45794
diff
changeset
|
1282 b'label("oneline-summary.changeset", "{rev}:{node|short}")' |
45794
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45793
diff
changeset
|
1283 b', ' |
45819
e9555305c5c6
templates: include all non-branch namespaces in default one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45794
diff
changeset
|
1284 b'join(filter(namespaces % "{ifeq(namespace, "branches", "", join(names % "{label("oneline-summary.{namespace}", name)}", " "))}"), " ")' |
45794
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45793
diff
changeset
|
1285 b')} ' |
45819
e9555305c5c6
templates: include all non-branch namespaces in default one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45794
diff
changeset
|
1286 b'"{label("oneline-summary.desc", desc|firstline)}"' |
45794
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
45793
diff
changeset
|
1287 ) |
45793
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1288 text = rendertemplate(ctx, spec) |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1289 return text.split(b'\n')[0] |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1290 |
96fcc37a9c80
rebase: make summary template configurable, with default to shared template
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
1291 |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1292 def _buildfntemplate(pat, total=None, seqno=None, revwidth=None, pathname=None): |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1293 r"""Convert old-style filename format string to template string |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1294 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1295 >>> _buildfntemplate(b'foo-%b-%n.patch', seqno=0) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1296 'foo-{reporoot|basename}-{seqno}.patch' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1297 >>> _buildfntemplate(b'%R{tags % "{tag}"}%H') |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1298 '{rev}{tags % "{tag}"}{node}' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1299 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1300 '\' in outermost strings has to be escaped because it is a directory |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1301 separator on Windows: |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1302 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1303 >>> _buildfntemplate(b'c:\\tmp\\%R\\%n.patch', seqno=0) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1304 'c:\\\\tmp\\\\{rev}\\\\{seqno}.patch' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1305 >>> _buildfntemplate(b'\\\\foo\\bar.patch') |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1306 '\\\\\\\\foo\\\\bar.patch' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1307 >>> _buildfntemplate(b'\\{tags % "{tag}"}') |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1308 '\\\\{tags % "{tag}"}' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1309 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1310 but inner strings follow the template rules (i.e. '\' is taken as an |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1311 escape character): |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1312 |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1313 >>> _buildfntemplate(br'{"c:\tmp"}', seqno=0) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1314 '{"c:\\tmp"}' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1315 """ |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
1316 expander = { |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1317 b'H': b'{node}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1318 b'R': b'{rev}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1319 b'h': b'{node|short}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1320 b'm': br'{sub(r"[^\w]", "_", desc|firstline)}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1321 b'r': b'{if(revwidth, pad(rev, revwidth, "0", left=True), rev)}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1322 b'%': b'%', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1323 b'b': b'{reporoot|basename}', |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1324 } |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1325 if total is not None: |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1326 expander[b'N'] = b'{total}' |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1327 if seqno is not None: |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1328 expander[b'n'] = b'{seqno}' |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1329 if total is not None and seqno is not None: |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1330 expander[b'n'] = b'{pad(seqno, total|stringify|count, "0", left=True)}' |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1331 if pathname is not None: |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1332 expander[b's'] = b'{pathname|basename}' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1333 expander[b'd'] = b'{if(pathname|dirname, pathname|dirname, ".")}' |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1334 expander[b'p'] = b'{pathname}' |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1335 |
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1336 newname = [] |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1337 for typ, start, end in templater.scantemplate(pat, raw=True): |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1338 if typ != b'string': |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1339 newname.append(pat[start:end]) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1340 continue |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1341 i = start |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1342 while i < end: |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1343 n = pat.find(b'%', i, end) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1344 if n < 0: |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
1345 newname.append(stringutil.escapestr(pat[i:end])) |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1346 break |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36991
diff
changeset
|
1347 newname.append(stringutil.escapestr(pat[i:n])) |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1348 if n + 2 > end: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1349 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1350 _(b"incomplete format spec in output filename") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1351 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1352 c = pat[n + 1 : n + 2] |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1353 i = n + 2 |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1354 try: |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1355 newname.append(expander[c]) |
36276
428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
Yuya Nishihara <yuya@tcha.org>
parents:
36245
diff
changeset
|
1356 except KeyError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1357 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1358 _(b"invalid format spec '%%%s' in output filename") % c |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1359 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1360 return b''.join(newname) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
1361 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1362 |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1363 def makefilename(ctx, pat: bytes, **props): |
36540
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1364 if not pat: |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1365 return pat |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1366 tmpl = _buildfntemplate(pat, **props) |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1367 # BUG: alias expansion shouldn't be made against template fragments |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1368 # rewritten from %-format strings, but we have no easy way to partially |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1369 # disable the expansion. |
aa3294027936
cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
36538
diff
changeset
|
1370 return rendertemplate(ctx, tmpl, pycompat.byteskwargs(props)) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
1371 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1372 |
32572
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32571
diff
changeset
|
1373 def isstdiofilename(pat): |
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32571
diff
changeset
|
1374 """True if the given pat looks like a filename denoting stdin/stdout""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1375 return not pat or pat == b'-' |
32572
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32571
diff
changeset
|
1376 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1377 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
49004
diff
changeset
|
1378 class _unclosablefile: |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1379 def __init__(self, fp: BinaryIO) -> None: |
27418
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1380 self._fp = fp |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1381 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1382 def close(self): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1383 pass |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1384 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1385 def __iter__(self): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1386 return iter(self._fp) |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1387 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1388 def __getattr__(self, attr): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1389 return getattr(self._fp, attr) |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
1390 |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1391 def __enter__(self): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1392 return self |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1393 |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1394 def __exit__(self, exc_type, exc_value, exc_tb): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1395 pass |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30018
diff
changeset
|
1396 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1397 |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1398 def makefileobj( |
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1399 ctx, pat: bytes, mode: Literal['rb', 'wb'] = 'wb', **props |
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1400 ) -> BinaryIO: |
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1401 writable = mode not in ('r', 'rb') |
7319
eae1767cc6a8
export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7308
diff
changeset
|
1402 |
32572
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32571
diff
changeset
|
1403 if isstdiofilename(pat): |
36243
976e1cfb2f64
cmdutil: pass ctx to makefileobj() in place of repo/node pair (API)
Yuya Nishihara <yuya@tcha.org>
parents:
36242
diff
changeset
|
1404 repo = ctx.repo() |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1405 if writable: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1406 fp = repo.ui.fout |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1407 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1408 fp = repo.ui.fin |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1409 return typing.cast(BinaryIO, _unclosablefile(fp)) |
36538
d7a23d6184a2
cmdutil: reorder optional arguments passed to makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
36537
diff
changeset
|
1410 fn = makefilename(ctx, pat, **props) |
52629
89215c5b714c
cmdutil: switch the `mode` on `cmdutil.makefileobj()` to str
Matt Harbison <matt_harbison@yahoo.com>
parents:
52481
diff
changeset
|
1411 return open(fn, mode) |
2882
cf98cd70d2c4
move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2874
diff
changeset
|
1412 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1413 |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1414 def openstorage(repo, cmd, file_, opts, returnrevlog=False): |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1415 """opens the changelog, manifest, a filelog or a given revlog""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1416 cl = opts[b'changelog'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1417 mf = opts[b'manifest'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1418 dir = opts[b'dir'] |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1419 msg = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1420 if cl and mf: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1421 msg = _(b'cannot specify --changelog and --manifest at the same time') |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1422 elif cl and dir: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1423 msg = _(b'cannot specify --changelog and --dir at the same time') |
29427
33a6b750b5b9
debug: make debug{revlog,index,data} --dir not just a flag
Martin von Zweigbergk <martinvonz@google.com>
parents:
29397
diff
changeset
|
1424 elif cl or mf or dir: |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1425 if file_: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1426 msg = _(b'cannot specify filename with --changelog or --manifest') |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1427 elif not repo: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1428 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1429 b'cannot specify --changelog or --manifest or --dir ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1430 b'without a repository' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1431 ) |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1432 if msg: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1433 raise error.InputError(msg) |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1434 |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1435 r = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1436 if repo: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1437 if cl: |
21033
254f55b64e31
debugrevlog: use unfiltered view for changelog
Matt Mackall <mpm@selenic.com>
parents:
21024
diff
changeset
|
1438 r = repo.unfiltered().changelog |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1439 elif dir: |
45558
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45491
diff
changeset
|
1440 if not scmutil.istreemanifest(repo): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1441 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1442 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1443 b"--dir can only be used on repos with " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1444 b"treemanifest enabled" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1445 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1446 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1447 if not dir.endswith(b'/'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1448 dir = dir + b'/' |
39272
73cf21b2e8a6
manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39127
diff
changeset
|
1449 dirlog = repo.manifestlog.getstorage(dir) |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1450 if len(dirlog): |
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1451 r = dirlog |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1452 elif mf: |
39272
73cf21b2e8a6
manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39127
diff
changeset
|
1453 r = repo.manifestlog.getstorage(b'') |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1454 elif file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1455 filelog = repo.file(file_) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1456 if len(filelog): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1457 r = filelog |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1458 |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1459 # Not all storage may be revlogs. If requested, try to return an actual |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1460 # revlog instance. |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1461 if returnrevlog: |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1462 if isinstance(r, revlog.revlog): |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1463 pass |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50933
diff
changeset
|
1464 elif hasattr(r, '_revlog'): |
43539
9391784299e9
cmdutil: suppress bogus pytype errors
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1465 r = r._revlog # pytype: disable=attribute-error |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1466 elif r is not None: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1467 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1468 _(b'%r does not appear to be a revlog') % r |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1469 ) |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1470 |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1471 if not r: |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1472 if not returnrevlog: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1473 raise error.InputError(_(b'cannot give path to non-revlog')) |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1474 |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1475 if not file_: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1476 raise error.CommandError(cmd, _(b'invalid arguments')) |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1477 if not os.path.isfile(file_): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1478 raise error.InputError(_(b"revlog '%s' not found") % file_) |
47089
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
1479 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
1480 target = (revlog_constants.KIND_OTHER, b'free-form:%s' % file_) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1481 r = revlog.revlog( |
47089
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
1482 vfsmod.vfs(encoding.getcwd(), audit=False), |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47062
diff
changeset
|
1483 target=target, |
47164
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47142
diff
changeset
|
1484 radix=file_[:-2], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1485 ) |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1486 return r |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1487 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1488 |
39305
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1489 def openrevlog(repo, cmd, file_, opts): |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1490 """Obtain a revlog backing storage of an item. |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1491 |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1492 This is similar to ``openstorage()`` except it always returns a revlog. |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1493 |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1494 In most cases, a caller cares about the main storage object - not the |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1495 revlog backing it. Therefore, this function should only be used by code |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1496 that needs to examine low-level revlog implementation details. e.g. debug |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1497 commands. |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1498 """ |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1499 return openstorage(repo, cmd, file_, opts, returnrevlog=True) |
53e532007878
cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39272
diff
changeset
|
1500 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1501 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
1502 def copy(ui, repo, pats, opts: Dict[bytes, Any], rename=False): |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1503 check_incompatible_arguments(opts, b'forget', [b'dry_run']) |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1504 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1505 # called with the repo lock held |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1506 # |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1507 # hgsep => pathname that uses "/" to separate directories |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1508 # ossep => pathname that uses os.sep to separate directories |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1509 cwd = repo.getcwd() |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1510 targets = {} |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1511 forget = opts.get(b"forget") |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1512 after = opts.get(b"after") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1513 dryrun = opts.get(b"dry_run") |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1514 rev = opts.get(b'at_rev') |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1515 if rev: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1516 if not forget and not after: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1517 # TODO: Remove this restriction and make it also create the copy |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1518 # targets (and remove the rename source if rename==True). |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1519 raise error.InputError(_(b'--at-rev requires --after')) |
48130
5105a9975407
errors: raise InputError from revsingle() iff revset provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48128
diff
changeset
|
1520 ctx = logcmdutil.revsingle(repo, rev) |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1521 if len(ctx.parents()) > 1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1522 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1523 _(b'cannot mark/unmark copy in merge commit') |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1524 ) |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1525 else: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1526 ctx = repo[None] |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1527 |
44395
27a78ea30b48
copy: rename `wctx` to `ctx` since it will not necessarily be working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
1528 pctx = ctx.p1() |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1529 |
41668
e41449818bee
copy: respect ui.relative-paths in copy/rename
Martin von Zweigbergk <martinvonz@google.com>
parents:
41664
diff
changeset
|
1530 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1531 |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1532 if forget: |
44399
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1533 if ctx.rev() is None: |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1534 new_ctx = ctx |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1535 else: |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1536 if len(ctx.parents()) > 1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1537 raise error.InputError(_(b'cannot unmark copy in merge commit')) |
44399
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1538 # avoid cycle context -> subrepo -> cmdutil |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1539 from . import context |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1540 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1541 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy') |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1542 new_ctx = context.overlayworkingctx(repo) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1543 new_ctx.setbase(ctx.p1()) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1544 mergemod.graft(repo, ctx, wctx=new_ctx) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1545 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1546 match = scmutil.match(ctx, pats, opts) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1547 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1548 current_copies = ctx.p1copies() |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1549 current_copies.update(ctx.p2copies()) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1550 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1551 uipathfn = scmutil.getuipathfn(repo) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1552 for f in ctx.walk(match): |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1553 if f in current_copies: |
44399
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1554 new_ctx[f].markcopied(None) |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1555 elif match.exact(f): |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1556 ui.warn( |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1557 _( |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1558 b'%s: not unmarking as copy - file is not marked as copied\n' |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1559 ) |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1560 % uipathfn(f) |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1561 ) |
44399
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1562 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1563 if ctx.rev() is not None: |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1564 with repo.lock(): |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1565 mem_ctx = new_ctx.tomemctx_for_amend(ctx) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1566 new_node = mem_ctx.commit() |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1567 |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1568 if repo.dirstate.p1() == ctx.node(): |
50023
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50022
diff
changeset
|
1569 with repo.dirstate.changing_parents(repo): |
44399
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1570 scmutil.movedirstate(repo, repo[new_node]) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1571 replacements = {ctx.node(): [new_node]} |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1572 scmutil.cleanupnodes( |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1573 repo, replacements, b'uncopy', fixphase=True |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1574 ) |
7c4b98a4e536
copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44398
diff
changeset
|
1575 |
44398
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1576 return |
8be0c63535b5
copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents:
44395
diff
changeset
|
1577 |
44400
d8b49bf6cfec
copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
44399
diff
changeset
|
1578 pats = scmutil.expandpats(pats) |
d8b49bf6cfec
copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
44399
diff
changeset
|
1579 if not pats: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1580 raise error.InputError(_(b'no source or destination specified')) |
44400
d8b49bf6cfec
copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
44399
diff
changeset
|
1581 if len(pats) == 1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1582 raise error.InputError(_(b'no destination specified')) |
44400
d8b49bf6cfec
copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
44399
diff
changeset
|
1583 dest = pats.pop() |
d8b49bf6cfec
copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
44399
diff
changeset
|
1584 |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1585 def walkpat(pat): |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1586 srcs = [] |
44770
1cdc80280286
copy: to find copy source, walk parent of revision we're marking copies in
Martin von Zweigbergk <martinvonz@google.com>
parents:
44470
diff
changeset
|
1587 # TODO: Inline and simplify the non-working-copy version of this code |
1cdc80280286
copy: to find copy source, walk parent of revision we're marking copies in
Martin von Zweigbergk <martinvonz@google.com>
parents:
44470
diff
changeset
|
1588 # since it shares very little with the working-copy version of it. |
1cdc80280286
copy: to find copy source, walk parent of revision we're marking copies in
Martin von Zweigbergk <martinvonz@google.com>
parents:
44470
diff
changeset
|
1589 ctx_to_walk = ctx if ctx.rev() is None else pctx |
1cdc80280286
copy: to find copy source, walk parent of revision we're marking copies in
Martin von Zweigbergk <martinvonz@google.com>
parents:
44470
diff
changeset
|
1590 m = scmutil.match(ctx_to_walk, [pat], opts, globbed=True) |
1cdc80280286
copy: to find copy source, walk parent of revision we're marking copies in
Martin von Zweigbergk <martinvonz@google.com>
parents:
44470
diff
changeset
|
1591 for abs in ctx_to_walk.walk(m): |
41668
e41449818bee
copy: respect ui.relative-paths in copy/rename
Martin von Zweigbergk <martinvonz@google.com>
parents:
41664
diff
changeset
|
1592 rel = uipathfn(abs) |
6584
29c77e5dfb3c
walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents:
6582
diff
changeset
|
1593 exact = m.exact(abs) |
44395
27a78ea30b48
copy: rename `wctx` to `ctx` since it will not necessarily be working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
1594 if abs not in ctx: |
44394
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1595 if abs in pctx: |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1596 if not after: |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1597 if exact: |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1598 ui.warn( |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1599 _( |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1600 b'%s: not copying - file has been marked ' |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1601 b'for remove\n' |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1602 ) |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1603 % rel |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1604 ) |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1605 continue |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1606 else: |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1607 if exact: |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1608 ui.warn( |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1609 _(b'%s: not copying - file is not managed\n') % rel |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1610 ) |
44394
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1611 continue |
2bd3b95fdce0
copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44349
diff
changeset
|
1612 |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1613 # abs: hgsep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1614 # rel: ossep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1615 srcs.append((abs, rel, exact)) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1616 return srcs |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1617 |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1618 if ctx.rev() is not None: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1619 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy') |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1620 absdest = pathutil.canonpath(repo.root, cwd, dest) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1621 if ctx.hasdir(absdest): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1622 raise error.InputError( |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1623 _(b'%s: --at-rev does not support a directory as destination') |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1624 % uipathfn(absdest) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1625 ) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1626 if absdest not in ctx: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1627 raise error.InputError( |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1628 _(b'%s: copy destination does not exist in %s') |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1629 % (uipathfn(absdest), ctx) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1630 ) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1631 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1632 # avoid cycle context -> subrepo -> cmdutil |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1633 from . import context |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1634 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1635 copylist = [] |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1636 for pat in pats: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1637 srcs = walkpat(pat) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1638 if not srcs: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1639 continue |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1640 for abs, rel, exact in srcs: |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1641 copylist.append(abs) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1642 |
44772
c5574408254a
copy: give better error message when no source paths found with --at-rev
Martin von Zweigbergk <martinvonz@google.com>
parents:
44770
diff
changeset
|
1643 if not copylist: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1644 raise error.InputError(_(b'no files to copy')) |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1645 # TODO: Add support for `hg cp --at-rev . foo bar dir` and |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1646 # `hg cp --at-rev . dir1 dir2`, preferably unifying the code with the |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1647 # existing functions below. |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1648 if len(copylist) != 1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1649 raise error.InputError(_(b'--at-rev requires a single source')) |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1650 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1651 new_ctx = context.overlayworkingctx(repo) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1652 new_ctx.setbase(ctx.p1()) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1653 mergemod.graft(repo, ctx, wctx=new_ctx) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1654 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1655 new_ctx.markcopied(absdest, copylist[0]) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1656 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1657 with repo.lock(): |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1658 mem_ctx = new_ctx.tomemctx_for_amend(ctx) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1659 new_node = mem_ctx.commit() |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1660 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1661 if repo.dirstate.p1() == ctx.node(): |
50023
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50022
diff
changeset
|
1662 with repo.dirstate.changing_parents(repo): |
44401
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1663 scmutil.movedirstate(repo, repo[new_node]) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1664 replacements = {ctx.node(): [new_node]} |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1665 scmutil.cleanupnodes(repo, replacements, b'copy', fixphase=True) |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1666 |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1667 return |
9dab3fa64325
copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents:
44400
diff
changeset
|
1668 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1669 # abssrc: hgsep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1670 # relsrc: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1671 # otarget: ossep |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1672 def copyfile(abssrc, relsrc, otarget, exact): |
20033
f962870712da
pathutil: tease out a new library to break an import cycle from canonpath use
Augie Fackler <raf@durin42.com>
parents:
19944
diff
changeset
|
1673 abstarget = pathutil.canonpath(repo.root, cwd, otarget) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1674 if b'/' in abstarget: |
16542
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1675 # We cannot normalize abstarget itself, this would prevent |
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1676 # case only renames, like a => A. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1677 abspath, absname = abstarget.rsplit(b'/', 1) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1678 abstarget = repo.dirstate.normalize(abspath) + b'/' + absname |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1679 reltarget = repo.pathto(abstarget, cwd) |
5607 | 1680 target = repo.wjoin(abstarget) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1681 src = repo.wjoin(abssrc) |
48114
304267b077de
dirstate-item: use item's property instead of `state` in copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48112
diff
changeset
|
1682 entry = repo.dirstate.get_entry(abstarget) |
304267b077de
dirstate-item: use item's property instead of `state` in copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48112
diff
changeset
|
1683 |
304267b077de
dirstate-item: use item's property instead of `state` in copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48112
diff
changeset
|
1684 already_commited = entry.tracked and not entry.added |
5607 | 1685 |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13945
diff
changeset
|
1686 scmutil.checkportable(ui, abstarget) |
13945
03f3ce7ca2a8
copy: do not copy file if name is disallowed anyway
Adrian Buehlmann <adrian@cadifra.com>
parents:
13878
diff
changeset
|
1687 |
5607 | 1688 # check for collisions |
1689 prevsrc = targets.get(abstarget) | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1690 if prevsrc is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1691 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1692 _(b'%s: not overwriting - %s collides with %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1693 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1694 reltarget, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1695 repo.pathto(abssrc, cwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1696 repo.pathto(prevsrc, cwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1697 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1698 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1699 return True # report a failure |
5607 | 1700 |
1701 # check for overwrites | |
12342
70236d6fd844
rename: do not overwrite existing broken symlinks
Patrick Mezard <pmezard@gmail.com>
parents:
11950
diff
changeset
|
1702 exists = os.path.lexists(target) |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1703 samefile = False |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1704 if exists and abssrc != abstarget: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1705 if repo.dirstate.normalize(abssrc) == repo.dirstate.normalize( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1706 abstarget |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1707 ): |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1708 if not rename: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1709 ui.warn(_(b"%s: can't copy - same file\n") % reltarget) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1710 return True # report a failure |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1711 exists = False |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1712 samefile = True |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1713 |
48114
304267b077de
dirstate-item: use item's property instead of `state` in copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48112
diff
changeset
|
1714 if not after and exists or after and already_commited: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1715 if not opts[b'force']: |
48114
304267b077de
dirstate-item: use item's property instead of `state` in copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48112
diff
changeset
|
1716 if already_commited: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1717 msg = _(b'%s: not overwriting - file already committed\n') |
48258
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1718 # Check if if the target was added in the parent and the |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1719 # source already existed in the grandparent. |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1720 looks_like_copy_in_pctx = abstarget in pctx and any( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1721 abssrc in gpctx and abstarget not in gpctx |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1722 for gpctx in pctx.parents() |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1723 ) |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1724 if looks_like_copy_in_pctx: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1725 if rename: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1726 hint = _( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1727 b"('hg rename --at-rev .' to record the rename " |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1728 b"in the parent of the working copy)\n" |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1729 ) |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1730 else: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1731 hint = _( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1732 b"('hg copy --at-rev .' to record the copy in " |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1733 b"the parent of the working copy)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1734 ) |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1735 else: |
48258
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1736 if after: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1737 flags = b'--after --force' |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1738 else: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1739 flags = b'--force' |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1740 if rename: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1741 hint = ( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1742 _( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1743 b"('hg rename %s' to replace the file by " |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1744 b'recording a rename)\n' |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1745 ) |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1746 % flags |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1747 ) |
48258
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1748 else: |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1749 hint = ( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1750 _( |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1751 b"('hg copy %s' to replace the file by " |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1752 b'recording a copy)\n' |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1753 ) |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1754 % flags |
c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48130
diff
changeset
|
1755 ) |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1756 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1757 msg = _(b'%s: not overwriting - file exists\n') |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1758 if rename: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1759 hint = _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1760 b"('hg rename --after' to record the rename)\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1761 ) |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1762 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1763 hint = _(b"('hg copy --after' to record the copy)\n") |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1764 ui.warn(msg % reltarget) |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1765 ui.warn(hint) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1766 return True # report a failure |
5607 | 1767 |
1768 if after: | |
5608 | 1769 if not exists: |
11152
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1770 if rename: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1771 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1772 _(b'%s: not recording move - %s does not exist\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1773 % (relsrc, reltarget) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1774 ) |
11152
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1775 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1776 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1777 _(b'%s: not recording copy - %s does not exist\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1778 % (relsrc, reltarget) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1779 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1780 return True # report a failure |
5608 | 1781 elif not dryrun: |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1782 try: |
5608 | 1783 if exists: |
1784 os.unlink(target) | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1785 targetdir = os.path.dirname(target) or b'.' |
5608 | 1786 if not os.path.isdir(targetdir): |
1787 os.makedirs(targetdir) | |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1788 if samefile: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1789 tmp = target + b"~hgrename" |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1790 os.rename(src, tmp) |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1791 os.rename(tmp, target) |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1792 else: |
37091
08890706366e
copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents:
37087
diff
changeset
|
1793 # Preserve stat info on renames, not on copies; this matches |
08890706366e
copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents:
37087
diff
changeset
|
1794 # Linux CLI behavior. |
08890706366e
copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents:
37087
diff
changeset
|
1795 util.copyfile(src, target, copystat=rename) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
1796 srcexists = True |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52629
diff
changeset
|
1797 except OSError as inst: |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1798 if inst.errno == errno.ENOENT: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1799 ui.warn(_(b'%s: deleted in working directory\n') % relsrc) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
1800 srcexists = False |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1801 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1802 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1803 _(b'%s: cannot copy - %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1804 % (relsrc, encoding.strtolocal(inst.strerror)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1805 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1806 return True # report a failure |
5607 | 1807 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1808 if ui.verbose or not exact: |
7894
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1809 if rename: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1810 ui.status(_(b'moving %s to %s\n') % (relsrc, reltarget)) |
7894
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1811 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1812 ui.status(_(b'copying %s to %s\n') % (relsrc, reltarget)) |
5608 | 1813 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1814 targets[abstarget] = abssrc |
5607 | 1815 |
1816 # fix up dirstate | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1817 scmutil.dirstatecopy( |
44395
27a78ea30b48
copy: rename `wctx` to `ctx` since it will not necessarily be working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
1818 ui, repo, ctx, abssrc, abstarget, dryrun=dryrun, cwd=cwd |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1819 ) |
5610
2493a478f395
copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents:
5609
diff
changeset
|
1820 if rename and not dryrun: |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1821 if not after and srcexists and not samefile: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1822 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs') |
38497
da2a7d8354b2
unlinkpath: make empty directory removal optional (issue5901) (issue5826)
Kyle Lippincott <spectral@google.com>
parents:
38465
diff
changeset
|
1823 repo.wvfs.unlinkpath(abssrc, rmdir=rmdir) |
44395
27a78ea30b48
copy: rename `wctx` to `ctx` since it will not necessarily be working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
1824 ctx.forget([abssrc]) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1825 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1826 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1827 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1828 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1829 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1830 def targetpathfn(pat, dest, srcs): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1831 if os.path.isdir(pat): |
20033
f962870712da
pathutil: tease out a new library to break an import cycle from canonpath use
Augie Fackler <raf@durin42.com>
parents:
19944
diff
changeset
|
1832 abspfx = pathutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1833 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1834 if destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1835 striplen = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1836 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1837 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1838 if striplen: |
30620
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30543
diff
changeset
|
1839 striplen += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1840 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1841 elif destdirexists: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1842 res = lambda p: os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1843 dest, os.path.basename(util.localpath(p)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1844 ) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1845 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1846 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1847 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1848 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1849 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1850 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1851 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1852 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1853 def targetpathafterfn(pat, dest, srcs): |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
1854 if matchmod.patkind(pat): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1855 # a mercurial pattern |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1856 res = lambda p: os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1857 dest, os.path.basename(util.localpath(p)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1858 ) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1859 else: |
20033
f962870712da
pathutil: tease out a new library to break an import cycle from canonpath use
Augie Fackler <raf@durin42.com>
parents:
19944
diff
changeset
|
1860 abspfx = pathutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1861 if len(abspfx) < len(srcs[0][0]): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1862 # A directory. Either the target path contains the last |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1863 # component of the source path or it does not. |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1864 def evalpath(striplen): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1865 score = 0 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1866 for s in srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1867 t = os.path.join(dest, util.localpath(s[0])[striplen:]) |
12357
cb59654c2c7a
Restore lexists() changes lost in e0ee3e822a9a merge
Patrick Mezard <pmezard@gmail.com>
parents:
12345
diff
changeset
|
1868 if os.path.lexists(t): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1869 score += 1 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1870 return score |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1871 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1872 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1873 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1874 if striplen: |
30620
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30543
diff
changeset
|
1875 striplen += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1876 if os.path.isdir(os.path.join(dest, os.path.split(abspfx)[1])): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1877 score = evalpath(striplen) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1878 striplen1 = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1879 if striplen1: |
30620
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30543
diff
changeset
|
1880 striplen1 += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1881 if evalpath(striplen1) > score: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1882 striplen = striplen1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1883 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:]) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1884 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1885 # a file |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1886 if destdirexists: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1887 res = lambda p: os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1888 dest, os.path.basename(util.localpath(p)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1889 ) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1890 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1891 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1892 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1893 |
6258
c24f4b3f156b
Fix issue995 (copy --after and symlinks pointing to a directory)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
1894 destdirexists = os.path.isdir(dest) and not os.path.islink(dest) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1895 if not destdirexists: |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
1896 if len(pats) > 1 or matchmod.patkind(pats[0]): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1897 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1898 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1899 b'with multiple sources, destination must be an ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1900 b'existing directory' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1901 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1902 ) |
5843
83c354c4d529
Add endswithsep() and use it instead of using os.sep and os.altsep directly.
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
5836
diff
changeset
|
1903 if util.endswithsep(dest): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1904 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1905 _(b'destination %s is not a directory') % dest |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
1906 ) |
5607 | 1907 |
1908 tfn = targetpathfn | |
1909 if after: | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1910 tfn = targetpathafterfn |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1911 copylist = [] |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1912 for pat in pats: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1913 srcs = walkpat(pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1914 if not srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1915 continue |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1916 copylist.append((tfn(pat, dest, srcs), srcs)) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1917 if not copylist: |
47141
5ffc6c18fb96
rename: add hint about --at-rev if source file doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
47089
diff
changeset
|
1918 hint = None |
5ffc6c18fb96
rename: add hint about --at-rev if source file doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
47089
diff
changeset
|
1919 if rename: |
5ffc6c18fb96
rename: add hint about --at-rev if source file doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
47089
diff
changeset
|
1920 hint = _(b'maybe you meant to use --after --at-rev=.') |
5ffc6c18fb96
rename: add hint about --at-rev if source file doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
47089
diff
changeset
|
1921 raise error.InputError(_(b'no files to copy'), hint=hint) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1922 |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1923 errors = 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1924 for targetpath, srcs in copylist: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1925 for abssrc, relsrc, exact in srcs: |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1926 if copyfile(abssrc, relsrc, targetpath(abssrc), exact): |
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1927 errors += 1 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1928 |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11152
diff
changeset
|
1929 return errors != 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1930 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1931 |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1932 ## facility to let extension process additional data into an import patch |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1933 # list of identifier to be executed in order |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1934 extrapreimport = [] # run before commit |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1935 extrapostimport = [] # run after commit |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1936 # mapping from identifier to actual import function |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1937 # |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1938 # 'preimport' are run before the commit is made and are provided the following |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1939 # arguments: |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1940 # - repo: the localrepository instance, |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1941 # - patchdata: data extracted from patch header (cf m.patch.patchheadermap), |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26750
diff
changeset
|
1942 # - extra: the future extra dictionary of the changeset, please mutate it, |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1943 # - opts: the import options. |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1944 # XXX ideally, we would just pass an ctx ready to be computed, that would allow |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1945 # mutation of in memory commit and more. Feel free to rework the code to get |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1946 # there. |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1947 extrapreimportmap = {} |
26562
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1948 # 'postimport' are run after the commit is made and are provided the following |
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1949 # argument: |
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1950 # - ctx: the changectx created by import. |
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1951 extrapostimportmap = {} |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1952 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
1953 |
37620
fd1dd79cff20
cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37604
diff
changeset
|
1954 def tryimportone(ui, repo, patchdata, parents, opts, msgs, updatefunc): |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1955 """Utility function used by commands.import to import a single patch |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1956 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1957 This function is explicitly defined here to help the evolve extension to |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1958 wrap this part of the import logic. |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1959 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1960 The API is currently a bit ugly because it a simple code translation from |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1961 the import command. Feel free to make it better. |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1962 |
37620
fd1dd79cff20
cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37604
diff
changeset
|
1963 :patchdata: a dictionary containing parsed patch data (such as from |
fd1dd79cff20
cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37604
diff
changeset
|
1964 ``patch.extract()``) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1965 :parents: nodes that will be parent of the created commit |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1966 :opts: the full dict of option passed to the import command |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1967 :msgs: list to save commit message to. |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1968 (used in case we need to save it when failing) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1969 :updatefunc: a function that update a repo to a given node |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1970 updatefunc(<repo>, <node>) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1971 """ |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
1972 # avoid cycle context -> subrepo -> cmdutil |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
1973 from . import context |
37620
fd1dd79cff20
cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37604
diff
changeset
|
1974 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1975 tmpname = patchdata.get(b'filename') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1976 message = patchdata.get(b'message') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1977 user = opts.get(b'user') or patchdata.get(b'user') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1978 date = opts.get(b'date') or patchdata.get(b'date') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1979 branch = patchdata.get(b'branch') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1980 nodeid = patchdata.get(b'nodeid') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1981 p1 = patchdata.get(b'p1') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1982 p2 = patchdata.get(b'p2') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1983 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1984 nocommit = opts.get(b'no_commit') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1985 importbranch = opts.get(b'import_branch') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1986 update = not opts.get(b'bypass') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1987 strip = opts[b"strip"] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1988 prefix = opts[b"prefix"] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1989 sim = float(opts.get(b'similarity') or 0) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1990 |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1991 if not tmpname: |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1992 return None, None, False |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1993 |
21553
bee0e1cffdd3
import: add --partial flag to create a changeset despite failed hunks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21419
diff
changeset
|
1994 rejects = False |
bee0e1cffdd3
import: add --partial flag to create a changeset despite failed hunks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21419
diff
changeset
|
1995 |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1996 cmdline_message = logmessage(ui, opts) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1997 if cmdline_message: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1998 # pickup the cmdline msg |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
1999 message = cmdline_message |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2000 elif message: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2001 # pickup the patch msg |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2002 message = message.strip() |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2003 else: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2004 # launch the editor |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2005 message = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2006 ui.debug(b'message:\n%s\n' % (message or b'')) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2007 |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2008 if len(parents) == 1: |
46842
ad878e3f282b
refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2009 parents.append(repo[nullrev]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2010 if opts.get(b'exact'): |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2011 if not nodeid or not p1: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
2012 raise error.InputError(_(b'not a Mercurial patch')) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2013 p1 = repo[p1] |
46842
ad878e3f282b
refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2014 p2 = repo[p2 or nullrev] |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2015 elif p2: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2016 try: |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
2017 p1 = repo[p1] |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2018 p2 = repo[p2] |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2019 # Without any options, consider p2 only if the |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2020 # patch is being applied on top of the recorded |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2021 # first parent. |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2022 if p1 != parents[0]: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2023 p1 = parents[0] |
46842
ad878e3f282b
refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2024 p2 = repo[nullrev] |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2025 except error.RepoError: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2026 p1, p2 = parents |
46842
ad878e3f282b
refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2027 if p2.rev() == nullrev: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2028 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2029 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2030 b"warning: import the patch as a normal revision\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2031 b"(use --exact to import the patch as a merge)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2032 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2033 ) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2034 else: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2035 p1, p2 = parents |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2036 |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2037 n = None |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2038 if update: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2039 if p1 != parents[0]: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2040 updatefunc(repo, p1.node()) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2041 if p2 != parents[1]: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2042 repo.setparents(p1.node(), p2.node()) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2043 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2044 if opts.get(b'exact') or importbranch: |
50263
798e4314ddd9
branch: pass current transaction when writing branch in import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50242
diff
changeset
|
2045 repo.dirstate.setbranch( |
798e4314ddd9
branch: pass current transaction when writing branch in import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50242
diff
changeset
|
2046 branch or b'default', repo.currenttransaction() |
798e4314ddd9
branch: pass current transaction when writing branch in import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50242
diff
changeset
|
2047 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2048 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2049 partial = opts.get(b'partial', False) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2050 files = set() |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2051 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2052 patch.patch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2053 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2054 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2055 tmpname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2056 strip=strip, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2057 prefix=prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2058 files=files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2059 eolmode=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2060 similarity=sim / 100.0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2061 ) |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2062 except error.PatchParseError as e: |
48412
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2063 raise error.InputError( |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2064 pycompat.bytestr(e), |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2065 hint=_( |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2066 b'check that whitespace in the patch has not been mangled' |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2067 ), |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2068 ) |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2069 except error.PatchApplicationError as e: |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2070 if not partial: |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2071 raise error.StateError(pycompat.bytestr(e)) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2072 if partial: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2073 rejects = True |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2074 |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2075 files = list(files) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2076 if nocommit: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2077 if message: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2078 msgs.append(message) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
2079 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2080 if opts.get(b'exact') or p2: |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2081 # If you got here, you either use --force and know what |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2082 # you are doing or used --exact or a merge patch while |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2083 # being updated to its first parent. |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2084 m = None |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2085 else: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2086 m = scmutil.matchfiles(repo, files or []) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2087 editform = mergeeditform(repo[None], b'import.normal') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2088 if opts.get(b'exact'): |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2089 editor = None |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2090 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2091 editor = getcommiteditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2092 editform=editform, **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2093 ) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2094 extra = {} |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2095 for idfunc in extrapreimport: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2096 extrapreimportmap[idfunc](repo, patchdata, extra, opts) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2097 overrides = {} |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2098 if partial: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2099 overrides[(b'ui', b'allowemptycommit')] = True |
43758
71dbd6f6fcb8
import: add a --secret option
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43751
diff
changeset
|
2100 if opts.get(b'secret'): |
71dbd6f6fcb8
import: add a --secret option
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43751
diff
changeset
|
2101 overrides[(b'phases', b'new-commit')] = b'secret' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2102 with repo.ui.configoverride(overrides, b'import'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2103 n = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2104 message, user, date, match=m, editor=editor, extra=extra |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2105 ) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2106 for idfunc in extrapostimport: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2107 extrapostimportmap[idfunc](repo[n]) |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2108 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2109 if opts.get(b'exact') or importbranch: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 branch = branch or b'default' |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2111 else: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2112 branch = p1.branch() |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2113 store = patch.filestore() |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2114 try: |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
2115 files = set() |
21553
bee0e1cffdd3
import: add --partial flag to create a changeset despite failed hunks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21419
diff
changeset
|
2116 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2117 patch.patchrepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2118 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2119 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2120 p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2121 store, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2122 tmpname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2123 strip, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2124 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2125 files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2126 eolmode=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2127 ) |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2128 except error.PatchParseError as e: |
48412
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2129 raise error.InputError( |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2130 stringutil.forcebytestr(e), |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2131 hint=_( |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2132 b'check that whitespace in the patch has not been mangled' |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2133 ), |
220506bb213e
patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48411
diff
changeset
|
2134 ) |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2135 except error.PatchApplicationError as e: |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
2136 raise error.StateError(stringutil.forcebytestr(e)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2137 if opts.get(b'exact'): |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2138 editor = None |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
2139 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2140 editor = getcommiteditor(editform=b'import.bypass') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2141 memctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2142 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2143 (p1.node(), p2.node()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2144 message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2145 files=files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2146 filectxfn=store, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2147 user=user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2148 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2149 branch=branch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2150 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2151 ) |
44184
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2152 |
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2153 overrides = {} |
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2154 if opts.get(b'secret'): |
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2155 overrides[(b'phases', b'new-commit')] = b'secret' |
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2156 with repo.ui.configoverride(overrides, b'import'): |
b339faf3f843
import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
44098
diff
changeset
|
2157 n = memctx.commit() |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2158 finally: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2159 store.close() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2160 if opts.get(b'exact') and nocommit: |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2161 # --exact with --no-commit is still useful in that it does merge |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2162 # and branch bits |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2163 ui.warn(_(b"warning: can't check exact import with --no-commit\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2164 elif opts.get(b'exact') and (not n or hex(n) != nodeid): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2165 raise error.Abort(_(b'patch is damaged or loses information')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2166 msg = _(b'applied to working directory') |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2167 if n: |
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2168 # i18n: refers to a short changeset id |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2169 msg = _(b'created %s') % short(n) |
37621
5537d8f5e989
patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37620
diff
changeset
|
2170 return msg, n, rejects |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
2171 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2172 |
26545
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2173 # facility to let extensions include additional data in an exported patch |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2174 # list of identifiers to be executed in order |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2175 extraexport = [] |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2176 # mapping from identifier to actual export function |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2177 # function as to return a string to be added to the header or None |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2178 # it is given two arguments (sequencenumber, changectx) |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2179 extraexportmap = {} |
e99c3846d78a
export: introduce a generic way to add patch header on export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26533
diff
changeset
|
2180 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2181 |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2182 def _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts): |
32682
9d201b39ccd9
export: map wctx.node() to 'ff...' node id (issue5438)
Yuya Nishihara <yuya@tcha.org>
parents:
32678
diff
changeset
|
2183 node = scmutil.binnode(ctx) |
32471
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2184 parents = [p.node() for p in ctx.parents() if p] |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2185 branch = ctx.branch() |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2186 if switch_parent: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2187 parents.reverse() |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2188 |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2189 if parents: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2190 prev = parents[0] |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2191 else: |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46969
diff
changeset
|
2192 prev = repo.nullid |
32471
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2193 |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2194 fm.context(ctx=ctx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2195 fm.plain(b'# HG changeset patch\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2196 fm.write(b'user', b'# User %s\n', ctx.user()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2197 fm.plain(b'# Date %d %d\n' % ctx.date()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2198 fm.write(b'date', b'# %s\n', fm.formatdate(ctx.date())) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2199 fm.condwrite( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2200 branch and branch != b'default', b'branch', b'# Branch %s\n', branch |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2201 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2202 fm.write(b'node', b'# Node ID %s\n', hex(node)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2203 fm.plain(b'# Parent %s\n' % hex(prev)) |
32471
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2204 if len(parents) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2205 fm.plain(b'# Parent %s\n' % hex(parents[1])) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2206 fm.data(parents=fm.formatlist(pycompat.maplist(hex, parents), name=b'node')) |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2207 |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2208 # TODO: redesign extraexportmap function to support formatter |
32471
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2209 for headerid in extraexport: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2210 header = extraexportmap[headerid](seqno, ctx) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2211 if header is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2212 fm.plain(b'# %s\n' % header) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2213 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2214 fm.write(b'desc', b'%s\n', ctx.description().rstrip()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2215 fm.plain(b'\n') |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2216 |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2217 if fm.isplain(): |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2218 chunkiter = patch.diffui(repo, prev, node, match, opts=diffopts) |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2219 for chunk, label in chunkiter: |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2220 fm.plain(chunk, label=label) |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2221 else: |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2222 chunkiter = patch.diff(repo, prev, node, match, opts=diffopts) |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2223 # TODO: make it structured? |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2224 fm.data(diff=b''.join(chunkiter)) |
32471
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32470
diff
changeset
|
2225 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2226 |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2227 def _exportfile(repo, revs, fm, dest, switch_parent, diffopts, match): |
37600
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2228 """Export changesets to stdout or a single file""" |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2229 for seqno, rev in enumerate(revs, 1): |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2230 ctx = repo[rev] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2231 if not dest.startswith(b'<'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2232 repo.ui.note(b"%s\n" % dest) |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2233 fm.startitem() |
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2234 _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts) |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2235 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2236 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2237 def _exportfntemplate( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2238 repo, revs, basefm, fntemplate, switch_parent, diffopts, match |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2239 ): |
37600
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2240 """Export changesets to possibly multiple files""" |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2241 total = len(revs) |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2242 revwidth = max(len(str(rev)) for rev in revs) |
37601
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2243 filemap = util.sortdict() # filename: [(seqno, rev), ...] |
37600
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2244 |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2245 for seqno, rev in enumerate(revs, 1): |
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2246 ctx = repo[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2247 dest = makefilename( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2248 ctx, fntemplate, total=total, seqno=seqno, revwidth=revwidth |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2249 ) |
37601
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2250 filemap.setdefault(dest, []).append((seqno, rev)) |
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2251 |
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2252 for dest in filemap: |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2253 with formatter.maybereopen(basefm, dest) as fm: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2254 repo.ui.note(b"%s\n" % dest) |
37601
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2255 for seqno, rev in filemap[dest]: |
37602
52670eaa14b4
export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents:
37601
diff
changeset
|
2256 fm.startitem() |
37601
2e0e61312a25
export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents:
37600
diff
changeset
|
2257 ctx = repo[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2258 _exportsingle( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2259 repo, ctx, fm, match, switch_parent, seqno, diffopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2260 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2261 |
37600
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2262 |
42489
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2263 def _prefetchchangedfiles(repo, revs, match): |
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2264 allfiles = set() |
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2265 for rev in revs: |
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2266 for file in repo[rev].files(): |
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2267 if not match or match(file): |
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2268 allfiles.add(file) |
45073
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
2269 match = scmutil.matchfiles(repo, allfiles) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
2270 revmatches = [(rev, match) for rev in revs] |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
2271 scmutil.prefetchfiles(repo, revmatches) |
42489
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2272 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2273 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2274 def export( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2275 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2276 revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2277 basefm, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2278 fntemplate=b'hg-%h.patch', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2279 switch_parent=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2280 opts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2281 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2282 ): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
2283 """export changesets as hg patches |
32468
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2284 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2285 Args: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2286 repo: The repository from which we're exporting revisions. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2287 revs: A list of revisions to export as revision numbers. |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2288 basefm: A formatter to which patches should be written. |
32469
9fd9f91b0c43
cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents:
32468
diff
changeset
|
2289 fntemplate: An optional string to use for generating patch file names. |
32468
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2290 switch_parent: If True, show diffs against second parent when not nullid. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2291 Default is false, which always shows diff against p1. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2292 opts: diff options to use for generating the patch. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2293 match: If specified, only export changes to files matching this matcher. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2294 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2295 Returns: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2296 Nothing. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2297 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2298 Side Effect: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2299 "HG Changeset Patch" data is emitted to one of the following |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2300 destinations: |
32469
9fd9f91b0c43
cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents:
32468
diff
changeset
|
2301 fntemplate specified: Each rev is written to a unique file named using |
32468
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32421
diff
changeset
|
2302 the given template. |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2303 Otherwise: All revs will be written to basefm. |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
2304 """ |
42489
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2305 _prefetchchangedfiles(repo, revs, match) |
37763
b54404d66f7e
export: invoke the file prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
37762
diff
changeset
|
2306 |
37603
678d760c71ff
export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37602
diff
changeset
|
2307 if not fntemplate: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2308 _exportfile( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2309 repo, revs, basefm, b'<unnamed>', switch_parent, opts, match |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2310 ) |
37600
7800ed2e4980
export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents:
37599
diff
changeset
|
2311 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2312 _exportfntemplate( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2313 repo, revs, basefm, fntemplate, switch_parent, opts, match |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2314 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2315 |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
2316 |
37603
678d760c71ff
export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37602
diff
changeset
|
2317 def exportfile(repo, revs, fp, switch_parent=False, opts=None, match=None): |
678d760c71ff
export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37602
diff
changeset
|
2318 """Export changesets to the given file stream""" |
42489
307f67d4aee3
export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
42418
diff
changeset
|
2319 _prefetchchangedfiles(repo, revs, match) |
37763
b54404d66f7e
export: invoke the file prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
37762
diff
changeset
|
2320 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2321 dest = getattr(fp, 'name', b'<unnamed>') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2322 with formatter.formatter(repo.ui, fp, b'export', {}) as fm: |
37604
daafaff4e5be
export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37603
diff
changeset
|
2323 _exportfile(repo, revs, fm, dest, switch_parent, opts, match) |
37603
678d760c71ff
export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37602
diff
changeset
|
2324 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2325 |
29806
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29770
diff
changeset
|
2326 def showmarker(fm, marker, index=None): |
20470
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
2327 """utility function to display obsolescence marker in a readable way |
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
2328 |
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
2329 To be used by debug function.""" |
28613
6433da9c96a9
debugobsolete: add an option to show marker index
Kostia Balytskyi <ikostia@fb.com>
parents:
28608
diff
changeset
|
2330 if index is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2331 fm.write(b'index', b'%i ', index) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2332 fm.write(b'prednode', b'%s ', hex(marker.prednode())) |
29806
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29770
diff
changeset
|
2333 succs = marker.succnodes() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2334 fm.condwrite( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2335 succs, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2336 b'succnodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2337 b'%s ', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2338 fm.formatlist(map(hex, succs), name=b'node'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2339 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2340 fm.write(b'flag', b'%X ', marker.flags()) |
22260
2229d757802d
debugobsolete: display parents information from markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22250
diff
changeset
|
2341 parents = marker.parentnodes() |
2229d757802d
debugobsolete: display parents information from markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22250
diff
changeset
|
2342 if parents is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2343 fm.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2344 b'parentnodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2345 b'{%s} ', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2346 fm.formatlist(map(hex, parents), name=b'node', sep=b', '), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2347 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2348 fm.write(b'date', b'(%s) ', fm.formatdate(marker.date())) |
29806
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29770
diff
changeset
|
2349 meta = marker.metadata().copy() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2350 meta.pop(b'date', None) |
38576
152f4822d210
pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents:
38543
diff
changeset
|
2351 smeta = pycompat.rapply(pycompat.maybebytestr, meta) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2352 fm.write( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2353 b'metadata', b'{%s}', fm.formatdict(smeta, fmt=b'%r: %r', sep=b', ') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2354 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2355 fm.plain(b'\n') |
20470
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
2356 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2357 |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
2358 def finddate(ui, repo, date): |
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
2359 """Find the tipmost changeset that matches the given date spec""" |
45468
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2360 mrevs = repo.revs(b'date(%s)', date) |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2361 try: |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2362 rev = mrevs.max() |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2363 except ValueError: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
2364 raise error.InputError(_(b"revision matching date not found")) |
45468
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2365 |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2366 ui.status( |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2367 _(b"found revision %d from %s\n") |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2368 % (rev, dateutil.datestr(repo[rev].date())) |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2369 ) |
d2b5a7659fff
cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
45408
diff
changeset
|
2370 return b'%d' % rev |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
2371 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2372 |
41661
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41660
diff
changeset
|
2373 def add(ui, repo, match, prefix, uipathfn, explicitonly, **opts): |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2374 bad = [] |
25436
9724cbe2d546
add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25424
diff
changeset
|
2375 |
9724cbe2d546
add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25424
diff
changeset
|
2376 badfn = lambda x, y: bad.append(x) or match.bad(x, y) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2377 names = [] |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
2378 wctx = repo[None] |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
2379 cca = None |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
2380 abort, warn = scmutil.checkportabilityalert(ui) |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
2381 if abort or warn: |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17182
diff
changeset
|
2382 cca = scmutil.casecollisionauditor(ui, abort, repo.dirstate) |
25436
9724cbe2d546
add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25424
diff
changeset
|
2383 |
40088
1d09ba0d2ed3
narrow: move remaining narrow-limited dirstate walks to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
40030
diff
changeset
|
2384 match = repo.narrowmatch(match, includeexact=True) |
26206
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
2385 badmatch = matchmod.badmatch(match, badfn) |
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
2386 dirstate = repo.dirstate |
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
2387 # We don't want to just call wctx.walk here, since it would return a lot of |
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
2388 # clean files, which we aren't interested in and takes time. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2389 for f in sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2390 dirstate.walk( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2391 badmatch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2392 subrepos=sorted(wctx.substate), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2393 unknown=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2394 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2395 full=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2396 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2397 ): |
51194
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2398 entry = dirstate.get_entry(f) |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2399 # We don't want to even attmpt to add back files that have been removed |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2400 # It would lead to a misleading message saying we're adding the path, |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2401 # and can also lead to file/dir conflicts when attempting to add it. |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2402 removed = entry and entry.removed |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2403 exact = match.exact(f) |
51194
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2404 if ( |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2405 exact |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2406 or not explicitonly |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2407 and f not in wctx |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2408 and repo.wvfs.lexists(f) |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2409 and not removed |
b8f9911c8dca
add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents:
50952
diff
changeset
|
2410 ): |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
2411 if cca: |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
2412 cca(f) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2413 names.append(f) |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2414 if ui.verbose or not exact: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2415 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2416 _(b'adding %s\n') % uipathfn(f), label=b'ui.addremove.added' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2417 ) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
2418 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
2419 for subpath in sorted(wctx.substate): |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
2420 sub = wctx.sub(subpath) |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
2421 try: |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27985
diff
changeset
|
2422 submatch = matchmod.subdirmatcher(subpath, match) |
41639
ed046348675c
subrepo: adjust subrepo prefix before calling subrepo.add() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41638
diff
changeset
|
2423 subprefix = repo.wvfs.reljoin(prefix, subpath) |
41661
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41660
diff
changeset
|
2424 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn) |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43539
diff
changeset
|
2425 if opts.get('subrepos'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2426 bad.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2427 sub.add(ui, submatch, subprefix, subuipathfn, False, **opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2428 ) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
2429 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2430 bad.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2431 sub.add(ui, submatch, subprefix, subuipathfn, True, **opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2432 ) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
2433 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2434 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2435 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2436 ) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
2437 |
43554
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43539
diff
changeset
|
2438 if not opts.get('dry_run'): |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
2439 rejected = wctx.add(names, prefix) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2440 bad.extend(f for f in rejected if f in match.files()) |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2441 return bad |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
2442 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2443 |
32005
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2444 def addwebdirpath(repo, serverpath, webconf): |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2445 webconf[serverpath] = repo.root |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2446 repo.ui.debug(b'adding %s = %s\n' % (serverpath, repo.root)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2447 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2448 for r in repo.revs(b'filelog("path:.hgsub")'): |
32005
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2449 ctx = repo[r] |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2450 for subpath in ctx.substate: |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2451 ctx.sub(subpath).addwebdirpath(serverpath, webconf) |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
2452 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2453 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2454 def forget( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2455 ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2456 ): |
37778
f10cb49951e1
forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37774
diff
changeset
|
2457 if dryrun and interactive: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
2458 raise error.InputError( |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
2459 _(b"cannot specify both --dry-run and --interactive") |
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
2460 ) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2461 bad = [] |
25437
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
2462 badfn = lambda x, y: bad.append(x) or match.bad(x, y) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2463 wctx = repo[None] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2464 forgot = [] |
25437
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
2465 |
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
2466 s = repo.status(match=matchmod.badmatch(match, badfn), clean=True) |
32223
e4a4ebfd9d8e
forget: access status fields by name, not index
Martin von Zweigbergk <martinvonz@google.com>
parents:
32204
diff
changeset
|
2467 forget = sorted(s.modified + s.added + s.deleted + s.clean) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2468 if explicitonly: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2469 forget = [f for f in forget if match.exact(f)] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2470 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
2471 for subpath in sorted(wctx.substate): |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2472 sub = wctx.sub(subpath) |
41638
f92844cb942c
subrepo: adjust subrepo prefix before calling subrepo.forget() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41637
diff
changeset
|
2473 submatch = matchmod.subdirmatcher(subpath, match) |
f92844cb942c
subrepo: adjust subrepo prefix before calling subrepo.forget() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41637
diff
changeset
|
2474 subprefix = repo.wvfs.reljoin(prefix, subpath) |
41664
16a49c778bde
forget: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41663
diff
changeset
|
2475 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2476 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2477 subbad, subforgot = sub.forget( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2478 submatch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2479 subprefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2480 subuipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2481 dryrun=dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2482 interactive=interactive, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2483 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2484 bad.extend([subpath + b'/' + f for f in subbad]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2485 forgot.extend([subpath + b'/' + f for f in subforgot]) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2486 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2487 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2488 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2489 ) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2490 |
16070
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
2491 if not explicitonly: |
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
2492 for f in match.files(): |
23673
69cd91d04117
forget: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23579
diff
changeset
|
2493 if f not in repo.dirstate and not repo.wvfs.isdir(f): |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2494 if f not in forgot: |
23673
69cd91d04117
forget: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23579
diff
changeset
|
2495 if repo.wvfs.exists(f): |
24548
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2496 # Don't complain if the exact case match wasn't given. |
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2497 # But don't do this until after checking 'forgot', so |
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2498 # that subrepo files aren't normalized, and this op is |
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2499 # purely from data cached by the status walk above. |
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2500 if repo.dirstate.normalize(f) in repo.dirstate: |
c780a63f61ca
forget: cleanup the output for an inexact case match on icasefs
Matt Harbison <matt_harbison@yahoo.com>
parents:
24169
diff
changeset
|
2501 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2502 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2503 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2504 b'not removing %s: ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2505 b'file is already untracked\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2506 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2507 % uipathfn(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2508 ) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2509 bad.append(f) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2510 |
37778
f10cb49951e1
forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37774
diff
changeset
|
2511 if interactive: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2512 responses = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2513 b'[Ynsa?]' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2514 b'$$ &Yes, forget this file' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2515 b'$$ &No, skip this file' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2516 b'$$ &Skip remaining files' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2517 b'$$ Include &all remaining files' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2518 b'$$ &? (display help)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2519 ) |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2520 for filename in forget[:]: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2521 r = ui.promptchoice( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2522 _(b'forget %s %s') % (uipathfn(filename), responses) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2523 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2524 if r == 4: # ? |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2525 while r == 4: |
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2526 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
|
2527 ui.write(b'%s - %s\n' % (c, encoding.lower(t))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2528 r = ui.promptchoice( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2529 _(b'forget %s %s') % (uipathfn(filename), responses) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2530 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2531 if r == 0: # yes |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2532 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2533 elif r == 1: # no |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2534 forget.remove(filename) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2535 elif r == 2: # Skip |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2536 fnindex = forget.index(filename) |
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2537 del forget[fnindex:] |
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2538 break |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2539 elif r == 3: # All |
37756
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2540 break |
e7bf5a73e4e1
forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37621
diff
changeset
|
2541 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2542 for f in forget: |
37778
f10cb49951e1
forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37774
diff
changeset
|
2543 if ui.verbose or not match.exact(f) or interactive: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2544 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2545 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2546 ) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2547 |
36945
45bfcd16f27e
forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
36742
diff
changeset
|
2548 if not dryrun: |
45bfcd16f27e
forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
36742
diff
changeset
|
2549 rejected = wctx.forget(forget, prefix) |
45bfcd16f27e
forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
36742
diff
changeset
|
2550 bad.extend(f for f in rejected if f in match.files()) |
45bfcd16f27e
forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
36742
diff
changeset
|
2551 forgot.extend(f for f in forget if f not in rejected) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2552 return bad, forgot |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2553 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2554 |
41757
980e05204ed8
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
Martin von Zweigbergk <martinvonz@google.com>
parents:
41696
diff
changeset
|
2555 def files(ui, ctx, m, uipathfn, fm, fmt, subrepos): |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2556 ret = 1 |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2557 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2558 needsfctx = ui.verbose or {b'size', b'flags'} & fm.datahint() |
44920
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2559 if fm.isplain() and not needsfctx: |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2560 # Fast path. The speed-up comes from skipping the formatter, and batching |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2561 # calls to ui.write. |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2562 buf = [] |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2563 for f in ctx.matches(m): |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2564 buf.append(fmt % uipathfn(f)) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2565 if len(buf) > 100: |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2566 ui.write(b''.join(buf)) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2567 del buf[:] |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2568 ret = 0 |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2569 if buf: |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2570 ui.write(b''.join(buf)) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2571 else: |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2572 for f in ctx.matches(m): |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2573 fm.startitem() |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2574 fm.context(ctx=ctx) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2575 if needsfctx: |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2576 fc = ctx[f] |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2577 fm.write(b'size flags', b'% 10d % 1s ', fc.size(), fc.flags()) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2578 fm.data(path=f) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2579 fm.plain(fmt % uipathfn(f)) |
065421e12248
files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44915
diff
changeset
|
2580 ret = 0 |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2581 |
25228
63a57a2727b6
files: recurse into subrepos automatically with an explicit path
Matt Harbison <matt_harbison@yahoo.com>
parents:
25169
diff
changeset
|
2582 for subpath in sorted(ctx.substate): |
29813
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29806
diff
changeset
|
2583 submatch = matchmod.subdirmatcher(subpath, m) |
41757
980e05204ed8
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
Martin von Zweigbergk <martinvonz@google.com>
parents:
41696
diff
changeset
|
2584 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2585 if subrepos or m.exact(subpath) or any(submatch.files()): |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2586 sub = ctx.sub(subpath) |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2587 try: |
28387
97175d9bf7cf
files: don't recurse into subrepos without a path or -S (issue5127)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28253
diff
changeset
|
2588 recurse = m.exact(subpath) or subrepos |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2589 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2590 sub.printfiles(ui, submatch, subuipathfn, fm, fmt, recurse) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2591 == 0 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2592 ): |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2593 ret = 0 |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2594 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2595 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2596 _(b"skipping missing subrepository: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2597 % uipathfn(subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2598 ) |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2599 |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2600 return ret |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2601 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2602 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2603 def remove( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2604 ui, repo, m, prefix, uipathfn, after, force, subrepos, dryrun, warnings=None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2605 ): |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2606 ret = 0 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2607 s = repo.status(match=m, clean=True) |
43688
e01e0641f18a
cmdutil: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43571
diff
changeset
|
2608 modified, added, deleted, clean = s.modified, s.added, s.deleted, s.clean |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2609 |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2610 wctx = repo[None] |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2611 |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2612 if warnings is None: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2613 warnings = [] |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2614 warn = True |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2615 else: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2616 warn = False |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2617 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2618 subs = sorted(wctx.substate) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2619 progress = ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2620 _(b'searching'), total=len(subs), unit=_(b'subrepos') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2621 ) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2622 for subpath in subs: |
29813
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29806
diff
changeset
|
2623 submatch = matchmod.subdirmatcher(subpath, m) |
41637
2c549abc6b85
subrepo: adjust subrepo prefix before calling subrepo.removefiles() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41636
diff
changeset
|
2624 subprefix = repo.wvfs.reljoin(prefix, subpath) |
41662
b2df5dc3ebfb
remove: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41661
diff
changeset
|
2625 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn) |
29813
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29806
diff
changeset
|
2626 if subrepos or m.exact(subpath) or any(submatch.files()): |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2627 progress.increment() |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2628 sub = wctx.sub(subpath) |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2629 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2630 if sub.removefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2631 submatch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2632 subprefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2633 subuipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2634 after, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2635 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2636 subrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2637 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2638 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2639 ): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2640 ret = 1 |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2641 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2642 warnings.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2643 _(b"skipping missing subrepository: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2644 % uipathfn(subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2645 ) |
38379
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38353
diff
changeset
|
2646 progress.complete() |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2647 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2648 # warn about failure to delete explicit files/dirs |
43571
c21aca51b392
utils: move the `dirs` definition in pathutil (API)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43554
diff
changeset
|
2649 deleteddirs = pathutil.dirs(deleted) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2650 files = m.files() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2651 progress = ui.makeprogress( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2652 _(b'deleting'), total=len(files), unit=_(b'files') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2653 ) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2654 for f in files: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2655 |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2656 def insubrepo(): |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2657 for subpath in wctx.substate: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2658 if f.startswith(subpath + b'/'): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2659 return True |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2660 return False |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2661 |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2662 progress.increment() |
24955
1df233bcb7f6
remove: use ctx.hasdir(f) instead of 'f in ctx.dirs()'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
2663 isdir = f in deleteddirs or wctx.hasdir(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2664 if f in repo.dirstate or isdir or f == b'.' or insubrepo() or f in subs: |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2665 continue |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2666 |
23674
6e36b9fc7869
remove: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23673
diff
changeset
|
2667 if repo.wvfs.exists(f): |
6e36b9fc7869
remove: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23673
diff
changeset
|
2668 if repo.wvfs.isdir(f): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2669 warnings.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2670 _(b'not removing %s: no tracked files\n') % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2671 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2672 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2673 warnings.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2674 _(b'not removing %s: file is untracked\n') % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2675 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2676 # missing files will generate a warning elsewhere |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2677 ret = 1 |
38379
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38353
diff
changeset
|
2678 progress.complete() |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2679 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2680 if force: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2681 list = modified + deleted + clean + added |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2682 elif after: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2683 list = deleted |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2684 remaining = modified + added + clean |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2685 progress = ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2686 _(b'skipping'), total=len(remaining), unit=_(b'files') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2687 ) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2688 for f in remaining: |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2689 progress.increment() |
35144
7a58608281dd
remove: print message for each file in verbose mode only while using `-A` (BC)
pavanpc@fb.com
parents:
35130
diff
changeset
|
2690 if ui.verbose or (f in files): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2691 warnings.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2692 _(b'not removing %s: file still exists\n') % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2693 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2694 ret = 1 |
38379
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38353
diff
changeset
|
2695 progress.complete() |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2696 else: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2697 list = deleted + clean |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2698 progress = ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2699 _(b'skipping'), total=(len(modified) + len(added)), unit=_(b'files') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2700 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2701 for f in modified: |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2702 progress.increment() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2703 warnings.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2704 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2705 b'not removing %s: file is modified (use -f' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2706 b' to force removal)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2707 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2708 % uipathfn(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2709 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2710 ret = 1 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2711 for f in added: |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2712 progress.increment() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2713 warnings.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2714 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2715 b"not removing %s: file has been marked for add" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2716 b" (use 'hg forget' to undo add)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2717 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2718 % uipathfn(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2719 ) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2720 ret = 1 |
38379
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38353
diff
changeset
|
2721 progress.complete() |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2722 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2723 list = sorted(list) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2724 progress = ui.makeprogress( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2725 _(b'deleting'), total=len(list), unit=_(b'files') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2726 ) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2727 for f in list: |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2728 if ui.verbose or not m.exact(f): |
38353
89db59e5cf3e
remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38348
diff
changeset
|
2729 progress.increment() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2730 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2731 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2732 ) |
38379
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38353
diff
changeset
|
2733 progress.complete() |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2734 |
37153
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2735 if not dryrun: |
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2736 with repo.wlock(): |
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2737 if not after: |
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2738 for f in list: |
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2739 if f in added: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2740 continue # we never unlink added files on remove |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2741 rmdir = repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2742 b'experimental', b'removeemptydirs' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2743 ) |
38497
da2a7d8354b2
unlinkpath: make empty directory removal optional (issue5901) (issue5826)
Kyle Lippincott <spectral@google.com>
parents:
38465
diff
changeset
|
2744 repo.wvfs.unlinkpath(f, ignoremissing=True, rmdir=rmdir) |
37153
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37106
diff
changeset
|
2745 repo[None].forget(list) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2746 |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2747 if warn: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2748 for warning in warnings: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2749 ui.warn(warning) |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2750 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2751 return ret |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2752 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2753 |
42494
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2754 def _catfmtneedsdata(fm): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2755 return not fm.datahint() or b'data' in fm.datahint() |
42494
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2757 |
35662
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2758 def _updatecatformatter(fm, ctx, matcher, path, decode): |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2759 """Hook for adding data to the formatter used by ``hg cat``. |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2760 |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2761 Extensions (e.g., lfs) can wrap this to inject keywords/data, but must call |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2762 this method first.""" |
42494
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2763 |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2764 # data() can be expensive to fetch (e.g. lfs), so don't fetch it if it |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2765 # wasn't requested. |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2766 data = b'' |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2767 if _catfmtneedsdata(fm): |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2768 data = ctx[path].data() |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2769 if decode: |
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2770 data = ctx.repo().wwritedata(path, data) |
35662
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2771 fm.startitem() |
38540
b1bbff1dd99a
cat: add support for log-like template keywords and functions
Yuya Nishihara <yuya@tcha.org>
parents:
38497
diff
changeset
|
2772 fm.context(ctx=ctx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2773 fm.write(b'data', b'%s', data) |
39396
34ba47117164
formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
39377
diff
changeset
|
2774 fm.data(path=path) |
35662
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2775 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2776 |
32610
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32609
diff
changeset
|
2777 def cat(ui, repo, ctx, matcher, basefm, fntemplate, prefix, **opts): |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2778 err = 1 |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2779 |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2780 def write(path): |
32610
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32609
diff
changeset
|
2781 filename = None |
32608
7f4435078a8f
cat: stop using makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
32573
diff
changeset
|
2782 if fntemplate: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2783 filename = makefilename( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2784 ctx, fntemplate, pathname=os.path.join(prefix, path) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2785 ) |
35048
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
35037
diff
changeset
|
2786 # attempt to create the directory if it does not already exist |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
35037
diff
changeset
|
2787 try: |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
35037
diff
changeset
|
2788 os.makedirs(os.path.dirname(filename)) |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
35037
diff
changeset
|
2789 except OSError: |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
35037
diff
changeset
|
2790 pass |
37597
d110167610db
formatter: carry opts to file-based formatters by basefm
Yuya Nishihara <yuya@tcha.org>
parents:
37470
diff
changeset
|
2791 with formatter.maybereopen(basefm, filename) as fm: |
50407
4fafc6642bee
cat: drop unnecessary internal roundtrip of kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50263
diff
changeset
|
2792 _updatecatformatter(fm, ctx, matcher, path, opts.get('decode')) |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2793 |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2794 # Automation often uses hg cat on single files, so special case it |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2795 # for performance to avoid the cost of parsing the manifest. |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2796 if len(matcher.files()) == 1 and not matcher.anypats(): |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2797 file = matcher.files()[0] |
30350
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2798 mfl = repo.manifestlog |
24718
a4191e0c728f
cat: use ctx.manifestnode() in place of ctx._changeset[0]
Yuya Nishihara <yuya@tcha.org>
parents:
24711
diff
changeset
|
2799 mfnode = ctx.manifestnode() |
30350
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2800 try: |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2801 if mfnode and mfl[mfnode].find(file)[0]: |
42494
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2802 if _catfmtneedsdata(basefm): |
45073
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
2803 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)]) |
30350
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2804 write(file) |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2805 return 0 |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2806 except KeyError: |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30342
diff
changeset
|
2807 pass |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2808 |
42494
561cd02c58ff
cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents:
42489
diff
changeset
|
2809 if _catfmtneedsdata(basefm): |
45073
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
2810 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)]) |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37756
diff
changeset
|
2811 |
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37756
diff
changeset
|
2812 for abs in ctx.walk(matcher): |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2813 write(abs) |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2814 err = 0 |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2815 |
41674
28ce9184d495
cat: respect ui.relative-paths for "skipping missing subrepository"
Martin von Zweigbergk <martinvonz@google.com>
parents:
41672
diff
changeset
|
2816 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2817 for subpath in sorted(ctx.substate): |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2818 sub = ctx.sub(subpath) |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2819 try: |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27985
diff
changeset
|
2820 submatch = matchmod.subdirmatcher(subpath, matcher) |
41660
799e156785f7
subrepo: (mostly) use relative path in "skipping missing subrepository"
Martin von Zweigbergk <martinvonz@google.com>
parents:
41639
diff
changeset
|
2821 subprefix = os.path.join(prefix, subpath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2822 if not sub.cat( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2823 submatch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2824 basefm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2825 fntemplate, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2826 subprefix, |
50407
4fafc6642bee
cat: drop unnecessary internal roundtrip of kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50263
diff
changeset
|
2827 **opts, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2828 ): |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2829 err = 0 |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2830 except error.RepoLookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2831 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2832 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2833 ) |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2834 |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2835 return err |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2836 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2837 |
50085
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2838 class _AddRemoveContext: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2839 """a small (hacky) context to deal with lazy opening of context |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2840 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2841 This is to be used in the `commit` function right below. This deals with |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2842 lazily open a `changing_files` context inside a `transaction` that span the |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2843 full commit operation. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2844 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2845 We need : |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2846 - a `changing_files` context to wrap the dirstate change within the |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2847 "addremove" operation, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2848 - a transaction to make sure these change are not written right after the |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2849 addremove, but when the commit operation succeed. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2850 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2851 However it get complicated because: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2852 - opening a transaction "this early" shuffle hooks order, especially the |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2853 `precommit` one happening after the `pretxtopen` one which I am not too |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2854 enthusiastic about. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2855 - the `mq` extensions + the `record` extension stacks many layers of call |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2856 to implement `qrefresh --interactive` and this result with `mq` calling a |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2857 `strip` in the middle of this function. Which prevent the existence of |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2858 transaction wrapping all of its function code. (however, `qrefresh` never |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2859 call the `addremove` bits. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2860 - the largefile extensions (and maybe other extensions?) wraps `addremove` |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2861 so slicing `addremove` in smaller bits is a complex endeavour. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2862 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2863 So I eventually took a this shortcut that open the transaction if we |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2864 actually needs it, not disturbing much of the rest of the code. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2865 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2866 It will result in some hooks order change for `hg commit --addremove`, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2867 however it seems a corner case enough to ignore that for now (hopefully). |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2868 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2869 Notes that None of the above problems seems insurmountable, however I have |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2870 been fighting with this specific piece of code for a couple of day already |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2871 and I need a solution to keep moving forward on the bigger work around |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2872 `changing_files` context that is being introduced at the same time as this |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2873 hack. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2874 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2875 Each problem seems to have a solution: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2876 - the hook order issue could be solved by refactoring the many-layer stack |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2877 that currently composes a commit and calling them earlier, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2878 - the mq issue could be solved by refactoring `mq` so that the final strip |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2879 is done after transaction closure. Be warned that the mq code is quite |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2880 antic however. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2881 - large-file could be reworked in parallel of the `addremove` to be |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2882 friendlier to this. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2883 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2884 However each of these tasks are too much a diversion right now. In addition |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2885 they will be much easier to undertake when the `changing_files` dust has |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2886 settled.""" |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2887 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2888 def __init__(self, repo): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2889 self._repo = repo |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2890 self._transaction = None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2891 self._dirstate_context = None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2892 self._state = None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2893 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2894 def __enter__(self): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2895 assert self._state is None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2896 self._state = True |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2897 return self |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2898 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2899 def open_transaction(self): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2900 """open a `transaction` and `changing_files` context |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2901 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2902 Call this when you know that change to the dirstate will be needed and |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2903 we need to open the transaction early |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2904 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2905 This will also open the dirstate `changing_files` context, so you should |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2906 call `close_dirstate_context` when the distate changes are done. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2907 """ |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2908 assert self._state is not None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2909 if self._transaction is None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2910 self._transaction = self._repo.transaction(b'commit') |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2911 self._transaction.__enter__() |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2912 if self._dirstate_context is None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2913 self._dirstate_context = self._repo.dirstate.changing_files( |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2914 self._repo |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2915 ) |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2916 self._dirstate_context.__enter__() |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2917 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2918 def close_dirstate_context(self): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2919 """close the change_files if any |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2920 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2921 Call this after the (potential) `open_transaction` call to close the |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2922 (potential) changing_files context. |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2923 """ |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2924 if self._dirstate_context is not None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2925 self._dirstate_context.__exit__(None, None, None) |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2926 self._dirstate_context = None |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2927 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2928 def __exit__(self, *args): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2929 if self._dirstate_context is not None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2930 self._dirstate_context.__exit__(*args) |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2931 if self._transaction is not None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2932 self._transaction.__exit__(*args) |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2933 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2934 |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
2935 def commit(ui, repo, commitfunc, pats, opts): |
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
2936 '''commit the specified files or all outstanding changes''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2937 date = opts.get(b'date') |
6139
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
2938 if date: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2939 opts[b'date'] = dateutil.parsedate(date) |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
2940 |
50085
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2941 with repo.wlock(), repo.lock(): |
50084
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2942 message = logmessage(ui, opts) |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2943 matcher = scmutil.match(repo[None], pats, opts) |
50085
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2944 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2945 with _AddRemoveContext(repo) as c: |
50084
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2946 # extract addremove carefully -- this function can be called from a |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2947 # command that doesn't support addremove |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2948 if opts.get(b'addremove'): |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2949 relative = scmutil.anypats(pats, opts) |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2950 uipathfn = scmutil.getuipathfn( |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2951 repo, |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2952 legacyrelativevalue=relative, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2953 ) |
50084
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2954 r = scmutil.addremove( |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2955 repo, |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2956 matcher, |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2957 b"", |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2958 uipathfn, |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2959 opts, |
50085
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2960 open_tr=c.open_transaction, |
50084
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2961 ) |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2962 m = _(b"failed to mark all new/missing files as added/removed") |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2963 if r != 0: |
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2964 raise error.Abort(m) |
50085
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2965 c.close_dirstate_context() |
50084
a46dfc2b58a3
commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
2966 return commitfunc(ui, repo, message, matcher, opts) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2967 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2968 |
29830
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2969 def samefile(f, ctx1, ctx2): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2970 if f in ctx1.manifest(): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2971 a = ctx1.filectx(f) |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2972 if f in ctx2.manifest(): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2973 b = ctx2.filectx(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2974 return not a.cmp(b) and a.flags() == b.flags() |
29830
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2975 else: |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2976 return False |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2977 else: |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2978 return f not in ctx2.manifest() |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29813
diff
changeset
|
2979 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2980 |
50145
ce60c8d4ac87
typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents:
50098
diff
changeset
|
2981 def amend(ui, repo, old, extra, pats, opts: Dict[str, Any]): |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
2982 # avoid cycle context -> subrepo -> cmdutil |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
2983 from . import context |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
2984 |
23101
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2985 # amend will reuse the existing user if not specified, but the obsolete |
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2986 # marker creation requires that the current user's name is specified. |
24379
8c445d8a915b
obsolete: remove last instance of _enabled
Durham Goode <durham@fb.com>
parents:
24364
diff
changeset
|
2987 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
2988 ui.username() # raise exception if username not set |
23101
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2989 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2990 ui.note(_(b'amending changeset %s\n') % old) |
16458
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2991 base = old.p1() |
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2992 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2993 with repo.wlock(), repo.lock(), repo.transaction(b'amend'): |
33438 | 2994 # Participating changesets: |
2995 # | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
2996 # wctx o - workingctx that contains changes from working copy |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
2997 # | to go into amending commit |
33438 | 2998 # | |
2999 # old o - changeset to amend | |
3000 # | | |
34073 | 3001 # base o - first parent of the changeset to amend |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3002 wctx = repo[None] |
33438 | 3003 |
35207
5cc14407a739
amend: make a copy of "extra" to avoid mutating an input
Martin von Zweigbergk <martinvonz@google.com>
parents:
35184
diff
changeset
|
3004 # Copy to avoid mutating input |
5cc14407a739
amend: make a copy of "extra" to avoid mutating an input
Martin von Zweigbergk <martinvonz@google.com>
parents:
35184
diff
changeset
|
3005 extra = extra.copy() |
33438 | 3006 # Update extra dict from amended commit (e.g. to preserve graft |
3007 # source) | |
3008 extra.update(old.extra()) | |
3009 | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3010 # Also update it from the from the wctx |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3011 extra.update(wctx.extra()) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3012 |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
3013 # date-only change should be ignored? |
47438
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
3014 datemaydiffer = resolve_commit_options(ui, opts) |
7f7457f84311
cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
3015 opts = pycompat.byteskwargs(opts) |
42936
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
3016 |
e4803231f538
amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents:
42925
diff
changeset
|
3017 date = old.date() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3018 if opts.get(b'date'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3019 date = dateutil.parsedate(opts.get(b'date')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3020 user = opts.get(b'user') or old.user() |
34136
ae95853c250a
cmdutil: fix amend when passing a date
Boris Feld <boris.feld@octobus.net>
parents:
34103
diff
changeset
|
3021 |
33438 | 3022 if len(old.parents()) > 1: |
3023 # ctx.files() isn't reliable for merges, so fall back to the | |
3024 # slower repo.status() method | |
43688
e01e0641f18a
cmdutil: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43571
diff
changeset
|
3025 st = base.status(old) |
e01e0641f18a
cmdutil: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43571
diff
changeset
|
3026 files = set(st.modified) | set(st.added) | set(st.removed) |
33438 | 3027 else: |
3028 files = set(old.files()) | |
3029 | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3030 # add/remove the files to the working copy if the "addremove" option |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3031 # was specified. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3032 matcher = scmutil.match(wctx, pats, opts) |
41663
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41662
diff
changeset
|
3033 relative = scmutil.anypats(pats, opts) |
41696
b81ecf3571d5
addremove: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41694
diff
changeset
|
3034 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=relative) |
50098
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3035 if opts.get(b'addremove'): |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3036 with repo.dirstate.changing_files(repo): |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3037 if scmutil.addremove(repo, matcher, b"", uipathfn, opts) != 0: |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3038 m = _( |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3039 b"failed to mark all new/missing files as added/removed" |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3040 ) |
237e9d2e1c71
dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50094
diff
changeset
|
3041 raise error.Abort(m) |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3042 |
34978
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3043 # Check subrepos. This depends on in-place wctx._status update in |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3044 # subrepo.precommit(). To minimize the risk of this hack, we do |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3045 # nothing if .hgsub does not exist. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3046 if b'.hgsub' in wctx or b'.hgsub' in old: |
36047
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35993
diff
changeset
|
3047 subs, commitsubs, newsubstate = subrepoutil.precommit( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3048 ui, wctx, wctx._status, matcher |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3049 ) |
34978
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3050 # amend should abort if commitsubrepos is enabled |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3051 assert not commitsubs |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3052 if subs: |
36047
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35993
diff
changeset
|
3053 subrepoutil.writestate(repo, newsubstate) |
34978
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
34975
diff
changeset
|
3054 |
44915
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44772
diff
changeset
|
3055 ms = mergestatemod.mergestate.read(repo) |
35853
eeb87b24aea7
amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents:
35746
diff
changeset
|
3056 mergeutil.checkunresolved(ms) |
eeb87b24aea7
amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents:
35746
diff
changeset
|
3057 |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44460
diff
changeset
|
3058 filestoamend = {f for f in wctx.files() if matcher(f)} |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3059 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3060 changes = len(filestoamend) > 0 |
48815
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3061 changeset_copies = ( |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3062 repo.ui.config(b'experimental', b'copies.read-from') |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3063 != b'filelog-only' |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3064 ) |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3065 # If there are changes to amend or if copy information needs to be read |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3066 # from the changeset extras, we cannot take the fast path of using |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3067 # filectxs from the old commit. |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3068 if changes or changeset_copies: |
33438 | 3069 # Recompute copies (avoid recording a -> b -> a) |
48864
df68d64b0d50
amend: stop specifying matcher, get all copies in wctx
Kyle Lippincott <spectral@google.com>
parents:
48841
diff
changeset
|
3070 copied = copies.pathcopies(base, wctx) |
df68d64b0d50
amend: stop specifying matcher, get all copies in wctx
Kyle Lippincott <spectral@google.com>
parents:
48841
diff
changeset
|
3071 if old.p2(): |
df68d64b0d50
amend: stop specifying matcher, get all copies in wctx
Kyle Lippincott <spectral@google.com>
parents:
48841
diff
changeset
|
3072 copied.update(copies.pathcopies(old.p2(), wctx)) |
33438 | 3073 |
3074 # Prune files which were reverted by the updates: if old | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3075 # introduced file X and the file was renamed in the working |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3076 # copy, then those two files are the same and |
33438 | 3077 # we can discard X from our list of files. Likewise if X |
34975
5f40efa472db
amend: do not drop missing files (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34974
diff
changeset
|
3078 # was removed, it's no longer relevant. If X is missing (aka |
5f40efa472db
amend: do not drop missing files (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34974
diff
changeset
|
3079 # deleted), old X must be preserved. |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3080 files.update(filestoamend) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3081 files = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3082 f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3083 for f in files |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3084 if (f not in filestoamend or not samefile(f, wctx, base)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3085 ] |
33438 | 3086 |
3087 def filectxfn(repo, ctx_, path): | |
3088 try: | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3089 # If the file being considered is not amongst the files |
48815
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3090 # to be amended, we should use the file context from the |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3091 # old changeset. This avoids issues when only some files in |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3092 # the working copy are being amended but there are also |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3093 # changes to other files from the old changeset. |
48815
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3094 if path in filestoamend: |
49199
f45e1618cbf6
amend: move "return None for removed files" into block handling filestoamend
Kyle Lippincott <spectral@google.com>
parents:
49139
diff
changeset
|
3095 # Return None for removed files. |
f45e1618cbf6
amend: move "return None for removed files" into block handling filestoamend
Kyle Lippincott <spectral@google.com>
parents:
49139
diff
changeset
|
3096 if path in wctx.removed(): |
f45e1618cbf6
amend: move "return None for removed files" into block handling filestoamend
Kyle Lippincott <spectral@google.com>
parents:
49139
diff
changeset
|
3097 return None |
48815
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3098 fctx = wctx[path] |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3099 else: |
877d7e1a4223
amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
3100 fctx = old.filectx(path) |
33438 | 3101 flags = fctx.flags() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3102 mctx = context.memfilectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3103 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3104 ctx_, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3105 fctx.path(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3106 fctx.data(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3107 islink=b'l' in flags, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3108 isexec=b'x' in flags, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3109 copysource=copied.get(path), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3110 ) |
33438 | 3111 return mctx |
3112 except KeyError: | |
3113 return None | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3114 |
33438 | 3115 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3116 ui.note(_(b'copying changeset %s to %s\n') % (old, base)) |
33438 | 3117 |
3118 # Use version of files as in the old cset | |
3119 def filectxfn(repo, ctx_, path): | |
3120 try: | |
3121 return old.filectx(path) | |
3122 except KeyError: | |
3123 return None | |
3124 | |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3125 # See if we got a message from -m or -l, if not, open the editor with |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3126 # the message of the changeset to amend. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3127 message = logmessage(ui, opts) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3128 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3129 editform = mergeeditform(old, b'commit.amend') |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3130 |
33438 | 3131 if not message: |
3132 message = old.description() | |
42418
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3133 # Default if message isn't provided and --edit is not passed is to |
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3134 # invoke editor, but allow --no-edit. If somehow we don't have any |
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3135 # description, let's always start the editor. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3136 doedit = not message or opts.get(b'edit') in [True, None] |
42418
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3137 else: |
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3138 # Default if message is provided is to not invoke editor, but allow |
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3139 # --edit. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3140 doedit = opts.get(b'edit') is True |
42418
64ed405dd342
commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents:
42297
diff
changeset
|
3141 editor = getcommiteditor(edit=doedit, editform=editform) |
33438 | 3142 |
3143 pureextra = extra.copy() | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3144 extra[b'amend_source'] = old.hex() |
33438 | 3145 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3146 new = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3147 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3148 parents=[base.node(), old.p2().node()], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3149 text=message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3150 files=files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3151 filectxfn=filectxfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3152 user=user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3153 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3154 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3155 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3156 ) |
33438 | 3157 |
3158 newdesc = changelog.stripdesc(new.description()) | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3159 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3160 (not changes) |
33438 | 3161 and newdesc == old.description() |
3162 and user == old.user() | |
41127
cffa8e0ba77a
amend: add boolean to ignore date-only change
Yuya Nishihara <yuya@tcha.org>
parents:
41126
diff
changeset
|
3163 and (date == old.date() or datemaydiffer) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3164 and pureextra == old.extra() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3165 ): |
33438 | 3166 # nothing changed. continuing here would create a new node |
3167 # anyway because of the amend_source noise. | |
17472
965fbe04fd96
amend: wrap all commit operations in a single transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17471
diff
changeset
|
3168 # |
33438 | 3169 # This not what we expect from amend. |
41127
cffa8e0ba77a
amend: add boolean to ignore date-only change
Yuya Nishihara <yuya@tcha.org>
parents:
41126
diff
changeset
|
3170 return old.node() |
33438 | 3171 |
38429
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38379
diff
changeset
|
3172 commitphase = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3173 if opts.get(b'secret'): |
38429
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38379
diff
changeset
|
3174 commitphase = phases.secret |
49883
e78a41686464
amend: add a --draft option to set phase to draft
Martin von Zweigbergk <martinvonz@google.com>
parents:
49480
diff
changeset
|
3175 elif opts.get(b'draft'): |
e78a41686464
amend: add a --draft option to set phase to draft
Martin von Zweigbergk <martinvonz@google.com>
parents:
49480
diff
changeset
|
3176 commitphase = phases.draft |
38429
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38379
diff
changeset
|
3177 newid = repo.commitctx(new) |
45408
6ba7190ff863
commit: clear mergestate also with --amend (issue6304)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45395
diff
changeset
|
3178 ms.reset() |
34072
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34046
diff
changeset
|
3179 |
50023
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50022
diff
changeset
|
3180 with repo.dirstate.changing_parents(repo): |
47608
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3181 # Reroute the working copy parent to the new changeset |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3182 repo.setparents(newid, repo.nullid) |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3183 |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3184 # Fixing the dirstate because localrepo.commitctx does not update |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3185 # it. This is rather convenient because we did not need to update |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3186 # the dirstate for all the files in the new commit which commitctx |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3187 # could have done if it updated the dirstate. Now, we can |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3188 # selectively update the dirstate only for the amended files. |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3189 dirstate = repo.dirstate |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3190 |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3191 # Update the state of the files which were added and modified in the |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3192 # amend to "normal" in the dirstate. We need to use "normallookup" since |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3193 # the files may have changed since the command started; using "normal" |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3194 # would mark them as clean but with uncommitted contents. |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3195 normalfiles = set(wctx.modified() + wctx.added()) & filestoamend |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3196 for f in normalfiles: |
47728
4d1ae9cba551
amend: use `update_file` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47707
diff
changeset
|
3197 dirstate.update_file( |
4d1ae9cba551
amend: use `update_file` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47707
diff
changeset
|
3198 f, p1_tracked=True, wc_tracked=True, possibly_dirty=True |
4d1ae9cba551
amend: use `update_file` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47707
diff
changeset
|
3199 ) |
47608
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3200 |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3201 # Update the state of files which were removed in the amend |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3202 # to "removed" in the dirstate. |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3203 removedfiles = set(wctx.removed()) & filestoamend |
3c0efa0eeea6
amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47603
diff
changeset
|
3204 for f in removedfiles: |
47746
56297381af90
amend: use `update_file` instead of `drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47732
diff
changeset
|
3205 dirstate.update_file(f, p1_tracked=False, wc_tracked=False) |
34102
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34100
diff
changeset
|
3206 |
46778
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3207 mapping = {old.node(): (newid,)} |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3208 obsmetadata = None |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3209 if opts.get(b'note'): |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3210 obsmetadata = {b'note': encoding.fromlocal(opts[b'note'])} |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3211 backup = ui.configbool(b'rewrite', b'backup-bundle') |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3212 scmutil.cleanupnodes( |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3213 repo, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3214 mapping, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3215 b'amend', |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3216 metadata=obsmetadata, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3217 fixphase=True, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3218 targetphase=commitphase, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3219 backup=backup, |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3220 ) |
62c2857a174b
amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
46364
diff
changeset
|
3221 |
16458
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
3222 return newid |
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
3223 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3224 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3225 def commiteditor(repo, ctx, subs, editform=b''): |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3226 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3227 return ctx.description() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3228 return commitforceeditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3229 repo, ctx, subs, editform=editform, unchangedmessagedetection=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3230 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3231 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3232 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3233 def commitforceeditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3234 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3235 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3236 subs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3237 finishdesc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3238 extramsg=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3239 editform=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3240 unchangedmessagedetection=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3241 ): |
21923
e582e20cd3e6
commiteditor: refactor default extramsg
Matt Mackall <mpm@selenic.com>
parents:
21878
diff
changeset
|
3242 if not extramsg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3243 extramsg = _(b"Leave message empty to abort commit.") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3244 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3245 forms = [e for e in editform.split(b'.') if e] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3246 forms.insert(0, b'changeset') |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
3247 templatetext = None |
22012
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
3248 while forms: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3249 ref = b'.'.join(forms) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3250 if repo.ui.config(b'committemplate', ref): |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
3251 templatetext = committext = buildcommittemplate( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3252 repo, ctx, subs, extramsg, ref |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3253 ) |
22012
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
3254 break |
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
3255 forms.pop() |
21924
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3256 else: |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3257 committext = buildcommittext(repo, ctx, subs, extramsg) |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3258 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3259 # run editor in the repository root |
39823
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39753
diff
changeset
|
3260 olddir = encoding.getcwd() |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3261 os.chdir(repo.root) |
26750
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3262 |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3263 # make in-memory changes visible to external process |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3264 tr = repo.currenttransaction() |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3265 repo.dirstate.write(tr) |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3266 pending = tr and tr.writepending() and repo.root |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
3267 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3268 editortext = repo.ui.edit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3269 committext, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3270 ctx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3271 ctx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3272 editform=editform, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3273 pending=pending, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3274 repopath=repo.path, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3275 action=b'commit', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3276 ) |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
3277 text = editortext |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
3278 |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
3279 # strip away anything below this special string (used for editors that want |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
3280 # to display the diff) |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
3281 stripbelow = re.search(_linebelow, text, flags=re.MULTILINE) |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
3282 if stripbelow: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3283 text = text[: stripbelow.start()] |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
3284 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3285 text = re.sub(b"(?m)^HG:.*(\n|$)", b"", text) |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3286 os.chdir(olddir) |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3287 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3288 if finishdesc: |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3289 text = finishdesc(text) |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3290 if not text.strip(): |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
3291 raise error.InputError(_(b"empty commit message")) |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
3292 if unchangedmessagedetection and editortext == templatetext: |
45846
8d72e29ad1e0
errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45831
diff
changeset
|
3293 raise error.InputError(_(b"commit message unchanged")) |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3294 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3295 return text |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3296 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3297 |
32896
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32895
diff
changeset
|
3298 def buildcommittemplate(repo, ctx, subs, extramsg, ref): |
21924
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3299 ui = repo.ui |
45288
8cce9f77ca73
templatespec: create a factory function for each type there is
Martin von Zweigbergk <martinvonz@google.com>
parents:
45073
diff
changeset
|
3300 spec = formatter.reference_templatespec(ref) |
35993
386c1e45e671
logcmdutil: drop default arguments from changesetdisplayer/templater() calls
Yuya Nishihara <yuya@tcha.org>
parents:
35966
diff
changeset
|
3301 t = logcmdutil.changesettemplater(ui, repo, spec) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3302 t.t.cache.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3303 (k, templater.unquotestring(v)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3304 for k, v in repo.ui.configitems(b'committemplate') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3305 ) |
22013
de5cee8ba088
cmdutil: use '[committemplate]' section like as map file for style definition
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22012
diff
changeset
|
3306 |
21924
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3307 if not extramsg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3308 extramsg = b'' # ensure that extramsg is string |
21924
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3309 |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3310 ui.pushbuffer() |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3311 t.show(ctx, extramsg=extramsg) |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3312 return ui.popbuffer() |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
3313 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3314 |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
3315 def hgprefix(msg): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3316 return b"\n".join([b"HG: %s" % a for a in msg.split(b"\n") if a]) |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
3317 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3318 |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
3319 def buildcommittext(repo, ctx, subs, extramsg): |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3320 edittext = [] |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
3321 modified, added, removed = ctx.modified(), ctx.added(), ctx.removed() |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3322 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3323 edittext.append(ctx.description()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3324 edittext.append(b"") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3325 edittext.append(b"") # Empty line between message and comments. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3326 edittext.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3327 hgprefix( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3328 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3329 b"Enter commit message." |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3330 b" Lines beginning with 'HG:' are removed." |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3331 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3332 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3333 ) |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
3334 edittext.append(hgprefix(extramsg)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3335 edittext.append(b"HG: --") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3336 edittext.append(hgprefix(_(b"user: %s") % ctx.user())) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3337 if ctx.p2(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3338 edittext.append(hgprefix(_(b"branch merge"))) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
3339 if ctx.branch(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3340 edittext.append(hgprefix(_(b"branch '%s'") % ctx.branch())) |
24986
fb9b7b937b3e
bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24955
diff
changeset
|
3341 if bookmarks.isactivewdirparent(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3342 edittext.append(hgprefix(_(b"bookmark '%s'") % repo._activebookmark)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3343 edittext.extend([hgprefix(_(b"subrepo %s") % s) for s in subs]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3344 edittext.extend([hgprefix(_(b"added %s") % f) for f in added]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3345 edittext.extend([hgprefix(_(b"changed %s") % f) for f in modified]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3346 edittext.extend([hgprefix(_(b"removed %s") % f) for f in removed]) |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
3347 if not added and not modified and not removed: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3348 edittext.append(hgprefix(_(b"no files changed"))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3349 edittext.append(b"") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3350 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3351 return b"\n".join(edittext) |
14297
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
3352 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3353 |
50848
489268c8ee7e
cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50587
diff
changeset
|
3354 def commitstatus(repo, node, branch, bheads=None, tip=None, **opts): |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3355 ctx = repo[node] |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3356 parents = ctx.parents() |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3357 |
45831
976b26bdd0d8
commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45819
diff
changeset
|
3358 if tip is not None and repo.changelog.tip() == tip: |
976b26bdd0d8
commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45819
diff
changeset
|
3359 # avoid reporting something like "committed new head" when |
976b26bdd0d8
commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45819
diff
changeset
|
3360 # recommitting old changesets, and issue a helpful warning |
976b26bdd0d8
commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45819
diff
changeset
|
3361 # for most instances |
46364
f0982c76ef1b
cmdutil: add a missing byte prefix to string introduce in 976b26bdd0d8
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46241
diff
changeset
|
3362 repo.ui.warn(_(b"warning: commit already existed in the repository!\n")) |
45831
976b26bdd0d8
commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45819
diff
changeset
|
3363 elif ( |
50848
489268c8ee7e
cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50587
diff
changeset
|
3364 not opts.get('amend') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3365 and bheads |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3366 and node not in bheads |
45039
c05ac059749f
cleanup: use any() instead of checking truthiness of temporary list
Manuel Jacob <me@manueljacob.de>
parents:
44920
diff
changeset
|
3367 and not any( |
45040
0c40d2d151cb
cleanup: use slightly more meaningful name for temporary variable
Manuel Jacob <me@manueljacob.de>
parents:
45039
diff
changeset
|
3368 p.node() in bheads and p.branch() == branch for p in parents |
45039
c05ac059749f
cleanup: use any() instead of checking truthiness of temporary list
Manuel Jacob <me@manueljacob.de>
parents:
44920
diff
changeset
|
3369 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3370 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3371 repo.ui.status(_(b'created new head\n')) |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3372 # The message is not printed for initial roots. For the other |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3373 # changesets, it is printed in the following situations: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3374 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3375 # Par column: for the 2 parents with ... |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3376 # N: null or no parent |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3377 # B: parent is on another named branch |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3378 # C: parent is a regular non head changeset |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3379 # H: parent was a branch head of the current branch |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3380 # Msg column: whether we print "created new head" message |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3381 # In the following, it is assumed that there already exists some |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3382 # initial branch heads of the current branch, otherwise nothing is |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3383 # printed anyway. |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3384 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3385 # Par Msg Comment |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3386 # N N y additional topo root |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3387 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3388 # B N y additional branch root |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3389 # C N y additional topo head |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3390 # H N n usual case |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3391 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3392 # B B y weird additional branch root |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3393 # C B y branch merge |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3394 # H B n merge with named branch |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3395 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3396 # C C y additional head from merge |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3397 # C H n merge with a head |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3398 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3399 # H H n head merge: head count decreases |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3400 |
50848
489268c8ee7e
cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50587
diff
changeset
|
3401 if not opts.get('close_branch'): |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3402 for r in parents: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3403 if r.closesbranch() and r.branch() == branch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3404 repo.ui.status( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3405 _(b'reopening closed branch head %d\n') % r.rev() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3406 ) |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3407 |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3408 if repo.ui.debugflag: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3409 repo.ui.write( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3410 _(b'committed changeset %d:%s\n') % (ctx.rev(), ctx.hex()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3411 ) |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3412 elif repo.ui.verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3413 repo.ui.write(_(b'committed changeset %d:%s\n') % (ctx.rev(), ctx)) |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
3414 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3415 |
27943
02c5f8ad00ac
commit: factor the post commit status check into a cmdutil method
Matt Harbison <matt_harbison@yahoo.com>
parents:
27868
diff
changeset
|
3416 def postcommitstatus(repo, pats, opts): |
02c5f8ad00ac
commit: factor the post commit status check into a cmdutil method
Matt Harbison <matt_harbison@yahoo.com>
parents:
27868
diff
changeset
|
3417 return repo.status(match=scmutil.match(repo[None], pats, opts)) |
02c5f8ad00ac
commit: factor the post commit status check into a cmdutil method
Matt Harbison <matt_harbison@yahoo.com>
parents:
27868
diff
changeset
|
3418 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3419 |
45395
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45392
diff
changeset
|
3420 def revert(ui, repo, ctx, *pats, **opts): |
35168
3da4bd50103d
py3: fix handling of keyword arguments in revert
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35144
diff
changeset
|
3421 opts = pycompat.byteskwargs(opts) |
45395
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45392
diff
changeset
|
3422 parent, p2 = repo.dirstate.parents() |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3423 node = ctx.node() |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3424 |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3425 mf = ctx.manifest() |
21579
87a972b5c039
revert: use p2 as parent when reverting against it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21578
diff
changeset
|
3426 if node == p2: |
87a972b5c039
revert: use p2 as parent when reverting against it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21578
diff
changeset
|
3427 parent = p2 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3428 |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3429 # need all matching names in dirstate and manifest of target rev, |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3430 # so have to walk both. do not print errors if files exist in one |
24451
c3bbafef25d6
revert: comment that filesets are always evaluated against workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
24450
diff
changeset
|
3431 # but not other. in both cases, filesets should be evaluated against |
c3bbafef25d6
revert: comment that filesets are always evaluated against workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
24450
diff
changeset
|
3432 # workingctx to get consistent result (issue4497). this means 'set:**' |
c3bbafef25d6
revert: comment that filesets are always evaluated against workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
24450
diff
changeset
|
3433 # cannot be used to select missing files from target rev. |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3434 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3435 # `names` is a mapping for all elements in working copy and target revision |
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3436 # The mapping is in the form: |
39314
6b81d2ff118f
cmdutil: fix typo in revert()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39305
diff
changeset
|
3437 # <abs path in repo> -> (<path from CWD>, <exactly specified by matcher?>) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3438 names = {} |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3439 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3440 |
50094
6cdcab3ae3fa
dirstate: use `dirstate.change_files` to scope the change in `revert`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3441 with repo.wlock(), repo.dirstate.changing_files(repo): |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3442 ## filling of the `names` mapping |
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3443 # walk dirstate to fill `names` |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3444 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3445 interactive = opts.get(b'interactive', False) |
24449
bab983bb6fd1
revert: define 'wctx' a little earlier and use it more
Martin von Zweigbergk <martinvonz@google.com>
parents:
24438
diff
changeset
|
3446 wctx = repo[None] |
bab983bb6fd1
revert: define 'wctx' a little earlier and use it more
Martin von Zweigbergk <martinvonz@google.com>
parents:
24438
diff
changeset
|
3447 m = scmutil.match(wctx, pats, opts) |
24479
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
3448 |
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
3449 # we'll need this later |
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
3450 targetsubs = sorted(s for s in wctx.substate if m(s)) |
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
3451 |
24450
961790c35b4f
revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24449
diff
changeset
|
3452 if not m.always(): |
32401
7b3c27af90c2
cmdutil: use repo[None].walk instead of repo.walk
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
3453 matcher = matchmod.badmatch(m, lambda x, y: False) |
32421
c87db79b9507
cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents:
32414
diff
changeset
|
3454 for abs in wctx.walk(matcher): |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3455 names[abs] = m.exact(abs) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3456 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3457 # walk target manifest to fill `names` |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3458 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3459 def badfn(path, msg): |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3460 if path in names: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3461 return |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3462 if path in ctx.substate: |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3463 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3464 path_ = path + b'/' |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3465 for f in names: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3466 if f.startswith(path_): |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3467 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3468 ui.warn(b"%s: %s\n" % (uipathfn(path), msg)) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3469 |
25439
aaede04c0ba6
revert: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25438
diff
changeset
|
3470 for abs in ctx.walk(matchmod.badmatch(m, badfn)): |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3471 if abs not in names: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3472 names[abs] = m.exact(abs) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3473 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3474 # Find status of all file in `names`. |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3475 m = scmutil.matchfiles(repo, names) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3476 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3477 changes = repo.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3478 node1=node, match=m, unknown=True, ignored=True, clean=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3479 ) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3480 else: |
24450
961790c35b4f
revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24449
diff
changeset
|
3481 changes = repo.status(node1=node, match=m) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3482 for kind in changes: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3483 for abs in kind: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3484 names[abs] = m.exact(abs) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3485 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3486 m = scmutil.matchfiles(repo, names) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
3487 |
23374
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
3488 modified = set(changes.modified) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3489 added = set(changes.added) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3490 removed = set(changes.removed) |
23374
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
3491 _deleted = set(changes.deleted) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3492 unknown = set(changes.unknown) |
23374
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
3493 unknown.update(changes.ignored) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3494 clean = set(changes.clean) |
22610
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
3495 modadded = set() |
22185
afead12e724b
revert: triage "deleted" files into more appropriate categories
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22173
diff
changeset
|
3496 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
3497 # We need to account for the state of the file in the dirstate, |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
3498 # even when we revert against something else than parent. This will |
22155
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3499 # slightly alter the behavior of revert (doing back up or not, delete |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23101
diff
changeset
|
3500 # or just forget etc). |
22155
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3501 if parent == node: |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3502 dsmodified = modified |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3503 dsadded = added |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3504 dsremoved = removed |
23403
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
3505 # store all local modifications, useful later for rename detection |
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
3506 localchanges = dsmodified | dsadded |
22155
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3507 modified, added, removed = set(), set(), set() |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3508 else: |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
3509 changes = repo.status(node1=parent, match=m) |
23374
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
3510 dsmodified = set(changes.modified) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3511 dsadded = set(changes.added) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3512 dsremoved = set(changes.removed) |
23403
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
3513 # store all local modifications, useful later for rename detection |
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
3514 localchanges = dsmodified | dsadded |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3515 |
22188
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3516 # only take into account for removes between wc and target |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3517 clean |= dsremoved - removed |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3518 dsremoved &= removed |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3519 # distinct between dirstate remove and other |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3520 removed -= dsremoved |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
3521 |
22610
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
3522 modadded = added & dsmodified |
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
3523 added -= modadded |
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
3524 |
22190
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
3525 # tell newly modified apart. |
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
3526 dsmodified &= modified |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3527 dsmodified |= modified & dsadded # dirstate added may need backup |
22190
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
3528 modified -= dsmodified |
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
3529 |
22488
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3530 # We need to wait for some post-processing to update this set |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3531 # before making the distinction. The dirstate will be used for |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3532 # that purpose. |
22208
d3659b3795e9
revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22205
diff
changeset
|
3533 dsadded = added |
d3659b3795e9
revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22205
diff
changeset
|
3534 |
22209
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
3535 # in case of merge, files that are actually added can be reported as |
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
3536 # modified, we need to post process the result |
47055
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46969
diff
changeset
|
3537 if p2 != repo.nullid: |
31149
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31095
diff
changeset
|
3538 mergeadd = set(dsmodified) |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31095
diff
changeset
|
3539 for path in dsmodified: |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31095
diff
changeset
|
3540 if path in mf: |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31095
diff
changeset
|
3541 mergeadd.remove(path) |
22209
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
3542 dsadded |= mergeadd |
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
3543 dsmodified -= mergeadd |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3544 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3545 # if f is a rename, update `names` to also revert the source |
23403
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
3546 for f in localchanges: |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3547 src = repo.dirstate.copied(f) |
22213
f1debbcd71cd
revert: add an XXX about rename tracking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22212
diff
changeset
|
3548 # XXX should we check for rename down to target node? |
48116
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3549 if ( |
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3550 src |
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3551 and src not in names |
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3552 and repo.dirstate.get_entry(src).removed |
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3553 ): |
22154
fc422de25773
revert: prefix variable names for dirstate status with "ds"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22153
diff
changeset
|
3554 dsremoved.add(src) |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3555 names[src] = True |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3556 |
31167
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3557 # determine the exact nature of the deleted changesets |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3558 deladded = set(_deleted) |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3559 for path in _deleted: |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3560 if path in mf: |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3561 deladded.remove(path) |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3562 deleted = _deleted - deladded |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31149
diff
changeset
|
3563 |
22488
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3564 # distinguish between file to forget and the other |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3565 added = set() |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3566 for abs in dsadded: |
48116
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3567 if not repo.dirstate.get_entry(abs).added: |
22488
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3568 added.add(abs) |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3569 dsadded -= added |
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3570 |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
3571 for abs in deladded: |
48116
e8d6261513b9
dirstate-item: use item's property instead of `state` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48114
diff
changeset
|
3572 if repo.dirstate.get_entry(abs).added: |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
3573 dsadded.add(abs) |
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
3574 deladded -= dsadded |
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
3575 |
22396
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3576 # For files marked as removed, we check if an unknown file is present at |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3577 # the same path. If a such file exists it may need to be backed up. |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3578 # Making the distinction at this stage helps have simpler backup |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3579 # logic. |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3580 removunk = set() |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3581 for abs in removed: |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3582 target = repo.wjoin(abs) |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3583 if os.path.lexists(target): |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3584 removunk.add(abs) |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3585 removed -= removunk |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3586 |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3587 dsremovunk = set() |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3588 for abs in dsremoved: |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3589 target = repo.wjoin(abs) |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3590 if os.path.lexists(target): |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3591 dsremovunk.add(abs) |
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3592 dsremoved -= dsremovunk |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3593 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3594 # action to be actually performed by revert |
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3595 # (<list of file>, message>) tuple |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3596 actions = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3597 b'revert': ([], _(b'reverting %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3598 b'add': ([], _(b'adding %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3599 b'remove': ([], _(b'removing %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3600 b'drop': ([], _(b'removing %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3601 b'forget': ([], _(b'forgetting %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3602 b'undelete': ([], _(b'undeleting %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3603 b'noop': (None, _(b'no changes needed to %s\n')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3604 b'unknown': (None, _(b'file not managed: %s\n')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3605 } |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3606 |
22608
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
3607 # "constant" that convey the backup strategy. |
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
3608 # All set to `discard` if `no-backup` is set do avoid checking |
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
3609 # no_backup lower in the code. |
22609
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
3610 # These values are ordered for comparison purposes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3611 backupinteractive = 3 # do backup if interactively modified |
22608
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
3612 backup = 2 # unconditionally do backup |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3613 check = 1 # check if the existing file differs from target |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3614 discard = 0 # never do backup |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3615 if opts.get(b'no_backup'): |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3616 backupinteractive = backup = check = discard |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3617 if interactive: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3618 dsmodifiedbackup = backupinteractive |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3619 else: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3620 dsmodifiedbackup = backup |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3621 tobackup = set() |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3622 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3623 backupanddel = actions[b'remove'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3624 if not opts.get(b'no_backup'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3625 backupanddel = actions[b'drop'] |
22611
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
3626 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3627 disptable = ( |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3628 # dispatch table: |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3629 # file state |
22153
fc8bc2787528
revert: move manifest membership condition outside of the loop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22013
diff
changeset
|
3630 # action |
fc8bc2787528
revert: move manifest membership condition outside of the loop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22013
diff
changeset
|
3631 # make backup |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3632 ## Sets that results that will change file on disk |
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3633 # Modified compared to target, no local change |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3634 (modified, actions[b'revert'], discard), |
22397
1db04829bdc1
revert: distinguish between deleted file and locally modified
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22396
diff
changeset
|
3635 # Modified compared to target, but local file is deleted |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3636 (deleted, actions[b'revert'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3637 # Modified compared to target, local change |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3638 (dsmodified, actions[b'revert'], dsmodifiedbackup), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3639 # Added since target |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3640 (added, actions[b'remove'], discard), |
22488
6c52ed3f888e
revert: split between newly added file and file added in other changeset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22485
diff
changeset
|
3641 # Added in working directory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3642 (dsadded, actions[b'forget'], discard), |
22610
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
3643 # Added since target, have local modification |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3644 (modadded, backupanddel, backup), |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
3645 # Added since target but file is missing in working directory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3646 (deladded, actions[b'drop'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3647 # Removed since target, before working copy parent |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3648 (removed, actions[b'add'], discard), |
22396
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3649 # Same as `removed` but an unknown file exists at the same path |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3650 (removunk, actions[b'add'], check), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3651 # Removed since targe, marked as such in working copy parent |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3652 (dsremoved, actions[b'undelete'], discard), |
22396
c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22395
diff
changeset
|
3653 # Same as `dsremoved` but an unknown file exists at the same path |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3654 (dsremovunk, actions[b'undelete'], check), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3655 ## the following sets does not result in any file changes |
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3656 # File with no modification |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3657 (clean, actions[b'noop'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
3658 # Existing file, not tracked anywhere |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3659 (unknown, actions[b'unknown'], discard), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3660 ) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3661 |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3662 for abs, exact in sorted(names.items()): |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3663 # target file to be touch on disk (relative to cwd) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3664 target = repo.wjoin(abs) |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3665 # search the entry in the dispatch table. |
22212
f18aca03ddd9
revert: inline a now useless closure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22211
diff
changeset
|
3666 # if the file is in any of these sets, it was touched in the working |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3667 # directory parent and we are sure it needs to be reverted. |
22232
91df98701e9e
revert: explode the action tuple in the for loop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22231
diff
changeset
|
3668 for table, (xlist, msg), dobackup in disptable: |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3669 if abs not in table: |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3670 continue |
22233
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
3671 if xlist is not None: |
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
3672 xlist.append(abs) |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3673 if dobackup: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3674 # If in interactive mode, don't automatically create |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3675 # .orig files (issue4793) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3676 if dobackup == backupinteractive: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3677 tobackup.add(abs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3678 elif backup <= dobackup or wctx[abs].cmp(ctx[abs]): |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3679 absbakname = scmutil.backuppath(ui, repo, abs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3680 bakname = os.path.relpath( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3681 absbakname, start=repo.root |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3682 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3683 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3684 _(b'saving current version of %s as %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3685 % (uipathfn(abs), uipathfn(bakname)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3686 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3687 if not opts.get(b'dry_run'): |
24475
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
3688 if interactive: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3689 util.copyfile(target, absbakname) |
24475
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
3690 else: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3691 util.rename(target, absbakname) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3692 if opts.get(b'dry_run'): |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3693 if ui.verbose or not exact: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3694 ui.status(msg % uipathfn(abs)) |
22233
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
3695 elif exact: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3696 ui.warn(msg % uipathfn(abs)) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
3697 break |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
3698 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3699 if not opts.get(b'dry_run'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3700 needdata = (b'revert', b'add', b'undelete') |
35963
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35950
diff
changeset
|
3701 oplist = [actions[name][0] for name in needdata] |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37756
diff
changeset
|
3702 prefetch = scmutil.prefetchfiles |
45073
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
3703 matchfiles = scmutil.matchfiles( |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
3704 repo, [f for sublist in oplist for f in sublist] |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
45040
diff
changeset
|
3705 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3706 prefetch( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3707 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3708 [(ctx.rev(), matchfiles)], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3709 ) |
42071
db72f9f6580e
interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
42057
diff
changeset
|
3710 match = scmutil.match(repo[None], pats) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3711 _performrevert( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3712 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3713 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3714 names, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3715 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3716 actions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3717 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3718 interactive, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3719 tobackup, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3720 ) |
19129
bd19587a3347
revert: ensure that copies and renames are honored (issue3920)
Bryan O'Sullivan <bryano@fb.com>
parents:
19024
diff
changeset
|
3721 |
24134
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24064
diff
changeset
|
3722 if targetsubs: |
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24064
diff
changeset
|
3723 # Revert the subrepos on the revert list |
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24064
diff
changeset
|
3724 for sub in targetsubs: |
24463
06d199e66bbc
revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents:
24455
diff
changeset
|
3725 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3726 wctx.sub(sub).revert( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3727 ctx.substate[sub], *pats, **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3728 ) |
24463
06d199e66bbc
revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents:
24455
diff
changeset
|
3729 except KeyError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3730 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3731 b"subrepository '%s' does not exist in %s!" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3732 % (sub, short(ctx.node())) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3733 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3734 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3735 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3736 def _performrevert( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3737 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3738 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3739 names, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3740 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3741 actions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3742 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3743 interactive=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3744 tobackup=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3745 ): |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
3746 """function that actually perform all the actions computed for revert |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3747 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3748 This is an independent function to let extension to plug in and react to |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3749 the imminent revert. |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3750 |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20790
diff
changeset
|
3751 Make sure you have the working directory locked when calling this function. |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3752 """ |
45395
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45392
diff
changeset
|
3753 parent, p2 = repo.dirstate.parents() |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3754 node = ctx.node() |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3755 excluded_files = [] |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3756 |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3757 def checkout(f): |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3758 fc = ctx[f] |
25755
72d395e399c1
cmdutil: remove useless dirstate.normallookup() invocation in revert()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25739
diff
changeset
|
3759 repo.wwrite(f, fc.data(), fc.flags()) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3760 |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3761 def doremove(f): |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3762 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3763 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs') |
38497
da2a7d8354b2
unlinkpath: make empty directory removal optional (issue5901) (issue5826)
Kyle Lippincott <spectral@google.com>
parents:
38465
diff
changeset
|
3764 repo.wvfs.unlinkpath(f, rmdir=rmdir) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3765 except OSError: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3766 pass |
47602
8f0c3533e28c
revert: use `set_untracked` when performing a revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47596
diff
changeset
|
3767 repo.dirstate.set_untracked(f) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3768 |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3769 def prntstatusmsg(action, f): |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3770 exact = names[f] |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3771 if repo.ui.verbose or not exact: |
41618
7068c6b0114b
revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41610
diff
changeset
|
3772 repo.ui.status(actions[action][1] % uipathfn(f)) |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3773 |
33647
377e8ddaebef
pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents:
33616
diff
changeset
|
3774 audit_path = pathutil.pathauditor(repo.root, cached=True) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3775 for f in actions[b'forget'][0]: |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3776 if interactive: |
30539
74013a831872
style: avoid an unnecessary line split
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30528
diff
changeset
|
3777 choice = repo.ui.promptchoice( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3778 _(b"forget added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3779 ) |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3780 if choice == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3781 prntstatusmsg(b'forget', f) |
47603
7c64688e554d
revert: use `set_untracked` instead of `drop` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47602
diff
changeset
|
3782 repo.dirstate.set_untracked(f) |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3783 else: |
36232
39b3aab6231e
revert: use an exact matcher in interactive diff selection (issue5789)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
36179
diff
changeset
|
3784 excluded_files.append(f) |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
3785 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3786 prntstatusmsg(b'forget', f) |
47603
7c64688e554d
revert: use `set_untracked` instead of `drop` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47602
diff
changeset
|
3787 repo.dirstate.set_untracked(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3788 for f in actions[b'remove'][0]: |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3789 audit_path(f) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3790 if interactive: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3791 choice = repo.ui.promptchoice( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3792 _(b"remove added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3793 ) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3794 if choice == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3795 prntstatusmsg(b'remove', f) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3796 doremove(f) |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3797 else: |
36232
39b3aab6231e
revert: use an exact matcher in interactive diff selection (issue5789)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
36179
diff
changeset
|
3798 excluded_files.append(f) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3799 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3800 prntstatusmsg(b'remove', f) |
30541
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30540
diff
changeset
|
3801 doremove(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3802 for f in actions[b'drop'][0]: |
22491
5e16fe6fdd32
revert: add a `drop` action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22490
diff
changeset
|
3803 audit_path(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3804 prntstatusmsg(b'drop', f) |
47602
8f0c3533e28c
revert: use `set_untracked` when performing a revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47596
diff
changeset
|
3805 repo.dirstate.set_untracked(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3806 |
48432
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3807 # We are reverting to our parent. If possible, we had like `hg status` |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3808 # to report the file as clean. We have to be less agressive for |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3809 # merges to avoid losing information about copy introduced by the merge. |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3810 # This might comes with bugs ? |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3811 reset_copy = p2 == repo.nullid |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3812 |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3813 def normal(filename): |
9f1b9e128788
dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48412
diff
changeset
|
3814 return repo.dirstate.set_tracked(filename, reset_copy=reset_copy) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3815 |
25259
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3816 newlyaddedandmodifiedfiles = set() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3817 if interactive: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3818 # Prompt the user for changes to revert |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3819 torevert = [f for f in actions[b'revert'][0] if f not in excluded_files] |
36232
39b3aab6231e
revert: use an exact matcher in interactive diff selection (issue5789)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
36179
diff
changeset
|
3820 m = scmutil.matchfiles(repo, torevert) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3821 diffopts = patch.difffeatureopts( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3822 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3823 whitespace=True, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3824 section=b'commands', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3825 configprefix=b'revert.interactive.', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3826 ) |
25258
f37a69ec3f47
revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents:
25257
diff
changeset
|
3827 diffopts.nodates = True |
f37a69ec3f47
revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents:
25257
diff
changeset
|
3828 diffopts.git = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3829 operation = b'apply' |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3830 if node == parent: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3831 if repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3832 b'experimental', b'revert.interactive.select-to-keep' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3833 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3834 operation = b'keep' |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3835 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3836 operation = b'discard' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3837 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3838 if operation == b'apply': |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3839 diff = patch.diff(repo, None, ctx.node(), m, opts=diffopts) |
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3840 else: |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
3841 diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts) |
47565
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
3842 original_headers = patch.parsepatch(diff) |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
3843 |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3844 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3845 chunks, opts = recordfilter( |
47565
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
3846 repo.ui, original_headers, match, operation=operation |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3847 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3848 if operation == b'discard': |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
3849 chunks = patch.reversehunks(chunks) |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
3850 |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3851 except error.PatchParseError as err: |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3852 raise error.InputError(_(b'error parsing patch: %s') % err) |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3853 except error.PatchApplicationError as err: |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3854 raise error.StateError(_(b'error applying patch: %s') % err) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3855 |
42862
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
3856 # FIXME: when doing an interactive revert of a copy, there's no way of |
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
3857 # performing a partial revert of the added file, the only option is |
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
3858 # "remove added file <name> (Yn)?", so we don't need to worry about the |
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
3859 # alsorestore value. Ideally we'd be able to partially revert |
3cf091843b4f
split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents:
42643
diff
changeset
|
3860 # copied/renamed files. |
47565
00ae1fb6c459
cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents:
47438
diff
changeset
|
3861 newlyaddedandmodifiedfiles, unusedalsorestore = newandmodified(chunks) |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3862 if tobackup is None: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3863 tobackup = set() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3864 # Apply changes |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28837
diff
changeset
|
3865 fp = stringio() |
39441
1cbe19eb496d
revert: stabilize status message of chunks selected interactively
Yuya Nishihara <yuya@tcha.org>
parents:
39432
diff
changeset
|
3866 # chunks are serialized per file, but files aren't sorted |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44460
diff
changeset
|
3867 for f in sorted({c.header.filename() for c in chunks if ishunk(c)}): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3868 prntstatusmsg(b'revert', f) |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3869 files = set() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3870 for c in chunks: |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3871 if ishunk(c): |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3872 abs = c.header.filename() |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3873 # Create a backup file only if this hunk should be backed up |
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3874 if c.header.filename() in tobackup: |
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3875 target = repo.wjoin(abs) |
41610
9e545c9a4dfe
revert: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41604
diff
changeset
|
3876 bakname = scmutil.backuppath(repo.ui, repo, abs) |
39432
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3877 util.copyfile(target, bakname) |
cb70501d8b71
revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39431
diff
changeset
|
3878 tobackup.remove(abs) |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3879 if abs not in files: |
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3880 files.add(abs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3881 if operation == b'keep': |
41987
c1d83d916e85
revert: option to choose what to keep, not what to discard
Martin von Zweigbergk <martinvonz@google.com>
parents:
41985
diff
changeset
|
3882 checkout(abs) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3883 c.write(fp) |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3884 dopatch = fp.tell() |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3885 fp.seek(0) |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3886 if dopatch: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3887 try: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3888 patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None) |
48411
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3889 except error.PatchParseError as err: |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3890 raise error.InputError(pycompat.bytestr(err)) |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3891 except error.PatchApplicationError as err: |
6a454e7053a1
errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
48258
diff
changeset
|
3892 raise error.StateError(pycompat.bytestr(err)) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3893 del fp |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3894 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3895 for f in actions[b'revert'][0]: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3896 prntstatusmsg(b'revert', f) |
25755
72d395e399c1
cmdutil: remove useless dirstate.normallookup() invocation in revert()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25739
diff
changeset
|
3897 checkout(f) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3898 if normal: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3899 normal(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3900 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3901 for f in actions[b'add'][0]: |
25259
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3902 # Don't checkout modified files, they are already created by the diff |
49096
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3903 if f in newlyaddedandmodifiedfiles: |
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3904 continue |
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3905 |
49097
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3906 if interactive: |
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3907 choice = repo.ui.promptchoice( |
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3908 _(b"add new file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f) |
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3909 ) |
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3910 if choice != 0: |
3f6ef67e7a60
revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents:
49096
diff
changeset
|
3911 continue |
49096
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3912 prntstatusmsg(b'add', f) |
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3913 checkout(f) |
9be7da341885
revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents:
49059
diff
changeset
|
3914 repo.dirstate.set_tracked(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3915 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3916 for f in actions[b'undelete'][0]: |
41536
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3917 if interactive: |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3918 choice = repo.ui.promptchoice( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3919 _(b"add back removed file %s (Yn)?$$ &Yes $$ &No") % f |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3920 ) |
41536
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3921 if choice == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3922 prntstatusmsg(b'undelete', f) |
41536
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3923 checkout(f) |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3924 normal(f) |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3925 else: |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3926 excluded_files.append(f) |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3927 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3928 prntstatusmsg(b'undelete', f) |
41536
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3929 checkout(f) |
d783c937aa53
revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents:
41396
diff
changeset
|
3930 normal(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3931 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3932 copied = copies.pathcopies(repo[parent], ctx) |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3933 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3934 for f in ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3935 actions[b'add'][0] + actions[b'undelete'][0] + actions[b'revert'][0] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3936 ): |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3937 if f in copied: |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3938 repo.dirstate.copy(copied[f], f) |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3939 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3940 |
21051
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3941 # a list of (ui, repo, otherpeer, opts, missing) functions called by |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3942 # commands.outgoing. "missing" is "missing" of the result of |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3943 # "findcommonoutgoing()" |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3944 outgoinghooks = util.hooks() |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3945 |
19211
3bfd7f1e7485
summary: augment output with info from extensions
Bryan O'Sullivan <bryano@fb.com>
parents:
19129
diff
changeset
|
3946 # a list of (ui, repo) functions called by commands.summary |
3bfd7f1e7485
summary: augment output with info from extensions
Bryan O'Sullivan <bryano@fb.com>
parents:
19129
diff
changeset
|
3947 summaryhooks = util.hooks() |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3948 |
21047
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3949 # a list of (ui, repo, opts, changes) functions called by commands.summary. |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3950 # |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3951 # functions should return tuple of booleans below, if 'changes' is None: |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3952 # (whether-incomings-are-needed, whether-outgoings-are-needed) |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3953 # |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3954 # otherwise, 'changes' is a tuple of tuples below: |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3955 # - (sourceurl, sourcebranch, sourcepeer, incoming) |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3956 # - (desturl, destbranch, destpeer, outgoing) |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3957 summaryremotehooks = util.hooks() |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3958 |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3959 |
42539
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42538
diff
changeset
|
3960 def checkunfinished(repo, commit=False, skipmerge=False): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3961 """Look for an unfinished multistep operation, like graft, and abort |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3962 if found. It's probably good to check this right before |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3963 bailifchanged(). |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3964 """ |
37855
79c54e7c0c52
rebase: prioritize indicating an interrupted rebase over update (issue5838)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37815
diff
changeset
|
3965 # Check for non-clearable states first, so things like rebase will take |
79c54e7c0c52
rebase: prioritize indicating an interrupted rebase over update (issue5838)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37815
diff
changeset
|
3966 # precedence over update. |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3967 for state in statemod._unfinishedstates: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3968 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3969 state._clearable |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3970 or (commit and state._allowcommit) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3971 or state._reportonly |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3972 ): |
37855
79c54e7c0c52
rebase: prioritize indicating an interrupted rebase over update (issue5838)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37815
diff
changeset
|
3973 continue |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3974 if state.isunfinished(repo): |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
3975 raise error.StateError(state.msg(), hint=state.hint()) |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3976 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3977 for s in statemod._unfinishedstates: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3978 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3979 not s._clearable |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3980 or (commit and s._allowcommit) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3981 or (s._opname == b'merge' and skipmerge) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3982 or s._reportonly |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3983 ): |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3984 continue |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3985 if s.isunfinished(repo): |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
3986 raise error.StateError(s.msg(), hint=s.hint()) |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3987 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
3988 |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3989 def clearunfinished(repo): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3990 """Check for unfinished operations (as above), and clear the ones |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3991 that are clearable. |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
3992 """ |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3993 for state in statemod._unfinishedstates: |
42539
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42538
diff
changeset
|
3994 if state._reportonly: |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42538
diff
changeset
|
3995 continue |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3996 if not state._clearable and state.isunfinished(repo): |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
3997 raise error.StateError(state.msg(), hint=state.hint()) |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3998 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
3999 for s in statemod._unfinishedstates: |
46969
d9531094cf8e
cmdutil: fix an uninitialize variable usage in clearunfinished()
Matt Harbison <matt_harbison@yahoo.com>
parents:
46842
diff
changeset
|
4000 if s._opname == b'merge' or s._reportonly: |
42539
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42538
diff
changeset
|
4001 continue |
42537
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
4002 if s._clearable and s.isunfinished(repo): |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42536
diff
changeset
|
4003 util.unlink(repo.vfs.join(s._fname)) |
24991
4169a4f83548
cmdutil: add class to restore dirstate during unexpected failure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24988
diff
changeset
|
4004 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4005 |
42579
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4006 def getunfinishedstate(repo): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4007 """Checks for unfinished operations and returns statecheck object |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4008 for it""" |
42579
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4009 for state in statemod._unfinishedstates: |
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4010 if state.isunfinished(repo): |
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4011 return state |
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4012 return None |
b8d54f4625cb
merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents:
42577
diff
changeset
|
4013 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4014 |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4015 def howtocontinue(repo): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4016 """Check for an unfinished operation and return the command to finish |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4017 it. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4018 |
42577
ceb31d96d3ae
statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42568
diff
changeset
|
4019 statemod._unfinishedstates list is checked for an unfinished operation |
ceb31d96d3ae
statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42568
diff
changeset
|
4020 and the corresponding message to finish it is generated if a method to |
ceb31d96d3ae
statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42568
diff
changeset
|
4021 continue is supported by the operation. |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4022 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4023 Returns a (msg, warning) tuple. 'msg' is a string and 'warning' is |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4024 a boolean. |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4025 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4026 contmsg = _(b"continue: %s") |
42540
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42539
diff
changeset
|
4027 for state in statemod._unfinishedstates: |
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42539
diff
changeset
|
4028 if not state._continueflag: |
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42539
diff
changeset
|
4029 continue |
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42539
diff
changeset
|
4030 if state.isunfinished(repo): |
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42539
diff
changeset
|
4031 return contmsg % state.continuemsg(), True |
33362
e48fb90f80c8
cmdutil: simplify the dirty check in howtocontinue()
Matt Harbison <matt_harbison@yahoo.com>
parents:
33334
diff
changeset
|
4032 if repo[None].dirty(missing=True, merge=False, branch=False): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4033 return contmsg % _(b"hg commit"), False |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4034 return None, None |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4035 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4036 |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4037 def checkafterresolved(repo): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4038 """Inform the user about the next action after completing hg resolve |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4039 |
42577
ceb31d96d3ae
statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42568
diff
changeset
|
4040 If there's a an unfinished operation that supports continue flag, |
ceb31d96d3ae
statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42568
diff
changeset
|
4041 howtocontinue will yield repo.ui.warn as the reporter. |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4042 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4043 Otherwise, it will yield repo.ui.note. |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4044 """ |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4045 msg, warning = howtocontinue(repo) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4046 if msg is not None: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4047 if warning: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4048 repo.ui.warn(b"%s\n" % msg) |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4049 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4050 repo.ui.note(b"%s\n" % msg) |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4051 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4052 |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4053 def wrongtooltocontinue(repo, task): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4054 """Raise an abort suggesting how to properly continue if there is an |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4055 active task. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4056 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4057 Uses howtocontinue() to find the active task. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4058 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4059 If there's no task (repo.ui.note for 'hg commit'), it does not offer |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4060 a hint. |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45865
diff
changeset
|
4061 """ |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4062 after = howtocontinue(repo) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4063 hint = None |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4064 if after[1]: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
4065 hint = after[0] |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
4066 raise error.StateError(_(b'no %s in progress') % task, hint=hint) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4067 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4068 |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4069 def abortgraft(ui, repo, graftstate): |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4070 """abort the interrupted graft and rollbacks to the state before interrupted |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4071 graft""" |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4072 if not graftstate.exists(): |
45859
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45846
diff
changeset
|
4073 raise error.StateError(_(b"no interrupted graft to abort")) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4074 statedata = readgraftstate(repo, graftstate) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4075 newnodes = statedata.get(b'newnodes') |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4076 if newnodes is None: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4077 # and old graft state which does not have all the data required to abort |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4078 # the graft |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4079 raise error.Abort(_(b"cannot abort using an old graftstate")) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4080 |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4081 # changeset from which graft operation was started |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4082 if len(newnodes) > 0: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4083 startctx = repo[newnodes[0]].p1() |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4084 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4085 startctx = repo[b'.'] |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4086 # whether to strip or not |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4087 cleanup = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4088 |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4089 if newnodes: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4090 newnodes = [repo[r].rev() for r in newnodes] |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4091 cleanup = True |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4092 # checking that none of the newnodes turned public or is public |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4093 immutable = [c for c in newnodes if not repo[c].mutable()] |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4094 if immutable: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4095 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4096 _(b"cannot clean up public changesets %s\n") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4097 % b', '.join(bytes(repo[r]) for r in immutable), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4098 hint=_(b"see 'hg help phases' for details"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4099 ) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4100 cleanup = False |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4101 |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4102 # checking that no new nodes are created on top of grafted revs |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4103 desc = set(repo.changelog.descendants(newnodes)) |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4104 if desc - set(newnodes): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4105 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4106 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4107 b"new changesets detected on destination " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4108 b"branch, can't strip\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4109 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4110 ) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4111 cleanup = False |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4112 |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4113 if cleanup: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4114 with repo.wlock(), repo.lock(): |
45562
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45558
diff
changeset
|
4115 mergemod.clean_update(startctx) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4116 # stripping the new nodes created |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4117 strippoints = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4118 c.node() for c in repo.set(b"roots(%ld)", newnodes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4119 ] |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4120 repair.strip(repo.ui, repo, strippoints, backup=False) |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4121 |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4122 if not cleanup: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4123 # we don't update to the startnode if we can't strip |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4124 startctx = repo[b'.'] |
45562
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45558
diff
changeset
|
4125 mergemod.clean_update(startctx) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4126 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4127 ui.status(_(b"graft aborted\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4128 ui.status(_(b"working directory is now at %s\n") % startctx.hex()[:12]) |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4129 graftstate.delete() |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4130 return 0 |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4131 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4132 |
51304
f15cb5111a1e
pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51302
diff
changeset
|
4133 def readgraftstate( |
f15cb5111a1e
pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51302
diff
changeset
|
4134 repo: Any, |
f15cb5111a1e
pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51302
diff
changeset
|
4135 graftstate: statemod.cmdstate, |
f15cb5111a1e
pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51302
diff
changeset
|
4136 ) -> Dict[bytes, Any]: |
42568
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4137 """read the graft state file and return a dict of the data stored in it""" |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4138 try: |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4139 return graftstate.read() |
f9da9d5f3f5a
graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents:
42540
diff
changeset
|
4140 except error.CorruptedState: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4141 nodes = repo.vfs.read(b'graftstate').splitlines() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4142 return {b'nodes': nodes} |
42582
5171937ad0f9
abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents:
42579
diff
changeset
|
4143 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42937
diff
changeset
|
4144 |
42582
5171937ad0f9
abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents:
42579
diff
changeset
|
4145 def hgabortgraft(ui, repo): |
47031
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46969
diff
changeset
|
4146 """abort logic for aborting graft using 'hg abort'""" |
42582
5171937ad0f9
abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents:
42579
diff
changeset
|
4147 with repo.wlock(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4148 graftstate = statemod.cmdstate(repo, b'graftstate') |
42582
5171937ad0f9
abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents:
42579
diff
changeset
|
4149 return abortgraft(ui, repo, graftstate) |
51592
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4150 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4151 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4152 def postincoming(ui, repo, modheads, optupdate, checkout, brev): |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4153 """Run after a changegroup has been added via pull/unbundle |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4154 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4155 This takes arguments below: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4156 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4157 :modheads: change of heads by pull/unbundle |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4158 :optupdate: updating working directory is needed or not |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4159 :checkout: update destination revision (or None to default destination) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4160 :brev: a name, which might be a bookmark to be activated after updating |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4161 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4162 return True if update raise any conflict, False otherwise. |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4163 """ |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4164 if modheads == 0: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4165 return False |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4166 if optupdate: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4167 # avoid circular import |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4168 from . import hg |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4169 |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4170 try: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4171 return hg.updatetotally(ui, repo, checkout, brev) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4172 except error.UpdateAbort as inst: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4173 msg = _(b"not updating: %s") % stringutil.forcebytestr(inst) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4174 hint = inst.hint |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4175 raise error.UpdateAbort(msg, hint=hint) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4176 if ui.quiet: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4177 pass # we won't report anything so the other clause are useless. |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4178 elif modheads is not None and modheads > 1: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4179 currentbranchheads = len(repo.branchheads()) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4180 if currentbranchheads == modheads: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4181 ui.status( |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4182 _(b"(run 'hg heads' to see heads, 'hg merge' to merge)\n") |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4183 ) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4184 elif currentbranchheads > 1: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4185 ui.status( |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4186 _(b"(run 'hg heads .' to see heads, 'hg merge' to merge)\n") |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4187 ) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4188 else: |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4189 ui.status(_(b"(run 'hg heads' to see heads)\n")) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4190 elif not ui.configbool(b'commands', b'update.requiredest'): |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4191 ui.status(_(b"(run 'hg update' to get a working copy)\n")) |
a151fd01e98c
postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51304
diff
changeset
|
4192 return False |
51593
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4193 |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4194 |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4195 def unbundle_files(ui, repo, fnames, unbundle_source=b'unbundle'): |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4196 """utility for `hg unbundle` and `hg debug::unbundle`""" |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4197 assert fnames |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4198 # avoid circular import |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4199 from . import hg |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4200 |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4201 with repo.lock(): |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4202 for fname in fnames: |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4203 f = hg.openpath(ui, fname) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4204 gen = exchange.readbundle(ui, f, fname) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4205 if isinstance(gen, streamclone.streamcloneapplier): |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4206 raise error.InputError( |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4207 _( |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4208 b'packed bundles cannot be applied with ' |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4209 b'"hg unbundle"' |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4210 ), |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4211 hint=_(b'use "hg debugapplystreamclonebundle"'), |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4212 ) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4213 url = b'bundle:' + fname |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4214 try: |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4215 txnname = b'unbundle' |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4216 if not isinstance(gen, bundle2.unbundle20): |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4217 txnname = b'unbundle\n%s' % urlutil.hidepassword(url) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4218 with repo.transaction(txnname) as tr: |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4219 op = bundle2.applybundle( |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4220 repo, |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4221 gen, |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4222 tr, |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4223 source=unbundle_source, # used by debug::unbundle |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4224 url=url, |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4225 ) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4226 except error.BundleUnknownFeatureError as exc: |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4227 raise error.Abort( |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4228 _(b'%s: unknown bundle feature, %s') % (fname, exc), |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4229 hint=_( |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4230 b"see https://mercurial-scm.org/" |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4231 b"wiki/BundleFeature for more " |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4232 b"information" |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4233 ), |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4234 ) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4235 modheads = bundle2.combinechangegroupresults(op) |
15e680a44502
unbundle: move most of the logic on cmdutil to help debug::unbundle reuse
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51592
diff
changeset
|
4236 return modheads |