annotate mercurial/cmdutil.py @ 52481:9d79ffeed7c0

typing: use the `Status` protocol wherever `scmutil.status` was being used This likely isn't everything, but these were all of the places the latter was referenced in the generated *.pyi files, plus a few cases that were inferred as `Any`, but found in a module that was being changed anyway. We should figure out some sort of consistency as far as naming these Protocol classes (stdlib ones tend to be CamelCase and imported directly). The current convention of `from xxx.interfaces import foo as ifoo` is a little clever, but a little annoying to type out. Also, this package is likely to grow beyond just Protocol classes, where treating the types as interfaces is wrong (e.g. a theoretical `NodeT` type to represent the binary form of a node, instead of treating that and the incompatible hex form as both bytes). But that's a project for another day.
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 09 Dec 2024 00:21:38 -0500
parents 00f5966f0483
children 89215c5b714c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2957
6e062d9b188f fix comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2885
diff changeset
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10249
diff changeset
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,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
20 Dict,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
21 Iterable,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
22 Optional,
51302
9d3721552b6c pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51194
diff changeset
23 TYPE_CHECKING,
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
24 cast,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
25 )
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
26
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
27 from .i18n import _
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
28 from .node import (
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
29 hex,
46842
ad878e3f282b refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
30 nullrev,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
31 short,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
32 )
43859
fb4a6d584756 status: split morestatus data loading from display
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 43838
diff changeset
33 from .thirdparty import attr
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
34
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
35 # 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
36 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
37 # 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
38 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
39
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
40 from . import (
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
41 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
42 bundle2,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
43 changelog,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
44 copies,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
45 crecord as crecordmod,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
46 encoding,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
47 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
48 exchange,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
49 formatter,
35925
7625b4f7db70 cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35914
diff changeset
50 logcmdutil,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
51 match as matchmod,
36048
46a54de96a54 merge: cut import cycle at merge -> extensions
Yuya Nishihara <yuya@tcha.org>
parents: 36047
diff changeset
52 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
53 mergestate as mergestatemod,
35853
eeb87b24aea7 amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents: 35746
diff changeset
54 mergeutil,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
55 obsolete,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
56 patch,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
57 pathutil,
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
58 phases,
30528
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30515
diff changeset
59 pycompat,
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
60 repair,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
61 revlog,
35745
3bd8ab4c80a5 branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35743
diff changeset
62 rewriteutil,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
63 scmutil,
42536
5f2f6912c9e6 states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42494
diff changeset
64 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
65 streamclone,
36047
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35993
diff changeset
66 subrepoutil,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
67 templatekw,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
68 templater,
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
69 util,
31247
1b08aca7870a vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31226
diff changeset
70 vfs as vfsmod,
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
71 )
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
72
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
73 from .utils import (
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
74 dateutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
75 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
76 urlutil,
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
77 )
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36991
diff changeset
78
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
79 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
80 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
81 )
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
51302
9d3721552b6c pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51194
diff changeset
83 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
84 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
85 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
86 )
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
87 from . import (
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
88 ui as uimod,
43740
a58d2361b231 cmdutil: add a pytype annotation to help out some callsites
Augie Fackler <augie@google.com>
parents: 43738
diff changeset
89 )
a58d2361b231 cmdutil: add a pytype annotation to help out some callsites
Augie Fackler <augie@google.com>
parents: 43738
diff changeset
90
28861
86db5cb55d46 pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents: 28837
diff changeset
91 stringio = util.stringio
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
92
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
93 # 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
94
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
95 dryrunopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
96 (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
97 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
98
38667
572dff5c946e rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 38648
diff changeset
99 confirmopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
100 (b'', b'confirm', None, _(b'ask before applying actions')),
38667
572dff5c946e rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 38648
diff changeset
101 ]
572dff5c946e rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 38648
diff changeset
102
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
103 remoteopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
104 (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
105 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
106 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
107 b'remotecmd',
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'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
110 _(b'CMD'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
111 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
112 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
113 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
114 b'insecure',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
115 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
116 _(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
117 ),
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
118 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
119
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
120 walkopts = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
121 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
122 b'I',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
123 b'include',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
124 [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
125 _(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
126 _(b'PATTERN'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
127 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
128 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
129 b'X',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
130 b'exclude',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
131 [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
132 _(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
133 _(b'PATTERN'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
134 ),
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
135 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
136
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
137 commitopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
138 (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
139 (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
140 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
141
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
142 commitopts2 = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
143 (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
144 b'd',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
145 b'date',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
146 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
147 _(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
148 _(b'DATE'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
149 ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
150 (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
151 b'u',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
152 b'user',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
153 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
154 _(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
155 _(b'USER'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
156 ),
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
157 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
158
42909
66048f6b5d0d uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42898
diff changeset
159 commitopts3 = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
160 (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
161 (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
162 ]
66048f6b5d0d uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42898
diff changeset
163
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
164 formatteropts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
165 (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
166 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
167
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
168 templateopts = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
169 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
170 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
171 b'style',
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'display using template map file (DEPRECATED)'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
174 _(b'STYLE'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
175 ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
176 (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
177 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
178
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
179 logopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
180 (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
181 (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
182 (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
183 (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
184 (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
185 (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
186 ] + templateopts
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
187
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
188 diffopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
189 (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
190 (
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
191 b'g',
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
192 b'git',
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
193 None,
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
194 _(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
195 ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
196 (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
197 (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
198 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
199
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
200 diffwsopts = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
201 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
202 b'w',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
203 b'ignore-all-space',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
204 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
205 _(b'ignore white space when comparing lines'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
206 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
207 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 b'b',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
209 b'ignore-space-change',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
210 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
211 _(b'ignore changes in the amount of white space'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
212 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
213 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
214 b'B',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
215 b'ignore-blank-lines',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
216 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
217 _(b'ignore changes whose lines are all blank'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
218 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
219 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
220 b'Z',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
221 b'ignore-space-at-eol',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
222 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
223 _(b'ignore changes in whitespace at EOL'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
224 ),
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
225 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
226
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
227 diffopts2 = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
228 [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
229 (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
230 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
231 b'p',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
232 b'show-function',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
233 None,
44349
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
234 _(
a0ec05d93c8e cleanup: re-run black on the codebase
Augie Fackler <augie@google.com>
parents: 44342
diff changeset
235 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
236 ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
237 ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
238 (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
239 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
240 + diffwsopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
241 + [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
242 (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
243 b'U',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
244 b'unified',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
245 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
246 _(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
247 _(b'NUM'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
248 ),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
249 (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
250 (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
251 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
252 b'root',
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'produce diffs relative to subdirectory'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
255 _(b'DIR'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
256 ),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
257 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
258 )
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
259
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
260 mergetoolopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
261 (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
262 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
263
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
264 similarityopts = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
265 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
266 b's',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
267 b'similarity',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
268 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
269 _(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
270 _(b'SIMILARITY'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
271 )
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
272 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
273
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
274 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
275
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
276 debugrevlogopts = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
277 (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
278 (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
279 (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
280 ]
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32401
diff changeset
281
30703
5c85c93cdd61 cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents: 30695
diff changeset
282 # 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
283 # editor text
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
284 _linebelow = b"^HG: ------------------------ >8 ------------------------$"
30703
5c85c93cdd61 cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents: 30695
diff changeset
285
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
286
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
287 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
288 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
289 *args: AnyStr,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
290 ) -> Optional[AnyStr]:
43905
fff21278554b rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents: 43904
diff changeset
291 """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
292
fff21278554b rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents: 43904
diff changeset
293 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
294 """
43947
dfac25883dbf cmdutil: return underscore-separate name from check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43945
diff changeset
295
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
296 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
297 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
298
43898
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
299 previous = None
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
300 for x in args:
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
301 if opts.get(x):
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
302 if previous:
45846
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
303 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
304 _(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
305 % (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
306 )
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
307 previous = x
43905
fff21278554b rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents: 43904
diff changeset
308 return previous
43898
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
309
d587937600be clone: extract helper for checking mutually exclusive args
Martin von Zweigbergk <martinvonz@google.com>
parents: 43872
diff changeset
310
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
311 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
312 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
313 first: AnyStr,
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
314 others: Iterable[AnyStr],
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
315 ) -> None:
43904
023ad45e2fd2 releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43900
diff changeset
316 """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
317
023ad45e2fd2 releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43900
diff changeset
318 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
319 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
320 """
023ad45e2fd2 releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43900
diff changeset
321 for other in others:
023ad45e2fd2 releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43900
diff changeset
322 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
323
023ad45e2fd2 releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43900
diff changeset
324
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
325 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
326 """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
327
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
328 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
329 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
330 """
47438
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
331 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
332 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
333
42936
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
334 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
335
47438
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
336 if opts.get('currentdate'):
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
337 opts['date'] = b'%d %d' % dateutil.makedate()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
338 elif (
47438
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
339 not opts.get('date')
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
340 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
341 and opts.get('currentdate') is None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
342 ):
47438
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
343 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
344 datemaydiffer = True
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
345
47438
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
346 if opts.get('currentuser'):
7f7457f84311 cmdutil: make resolvecommitoptions() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47437
diff changeset
347 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
348
42936
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
349 return datemaydiffer
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
350
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
351
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
352 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
353 """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
354
47434
54849b65dc5f cmdutil: make checknotesize() work on str-keyed opts
Martin von Zweigbergk <martinvonz@google.com>
parents: 47164
diff changeset
355 note = opts.get('note')
42937
7e9997041781 amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents: 42936
diff changeset
356 if not note:
7e9997041781 amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents: 42936
diff changeset
357 return
7e9997041781 amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents: 42936
diff changeset
358
7e9997041781 amend: prevent '\n' in the note string
Matt Harbison <matt_harbison@yahoo.com>
parents: 42936
diff changeset
359 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
360 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
361 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
362 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
363
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
364
25256
5a8398b085ed record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents: 25228
diff changeset
365 def ishunk(x):
5a8398b085ed record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents: 25228
diff changeset
366 hunkclasses = (crecordmod.uihunk, patch.recordhunk)
5a8398b085ed record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents: 25228
diff changeset
367 return isinstance(x, hunkclasses)
5a8398b085ed record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents: 25228
diff changeset
368
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
369
47565
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
370 def isheader(x):
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
371 headerclasses = (crecordmod.uiheader, patch.header)
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
372 return isinstance(x, headerclasses)
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
373
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
374
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
375 def newandmodified(chunks):
25257
07326d76f19d record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents: 25256
diff changeset
376 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
377 alsorestore = set()
25257
07326d76f19d record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents: 25256
diff changeset
378 for chunk in chunks:
47565
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
379 if isheader(chunk) and chunk.isnewfile():
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
380 newlyaddedandmodifiedfiles.add(chunk.filename())
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
381 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
382 return newlyaddedandmodifiedfiles, alsorestore
25257
07326d76f19d record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents: 25256
diff changeset
383
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
384
10401
6252852b4332 mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents: 10344
diff changeset
385 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
386 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
387 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
388 extra_aliases = []
012e25abc603 command: automatically create alias for command using '-' in names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45957
diff changeset
389 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
390 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
391 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
392 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
393 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
394 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
395 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
396 return base_aliases
10401
6252852b4332 mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents: 10344
diff changeset
397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
398
24356
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
399 def setupwrapcolorwrite(ui):
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
400 # 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
401 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
402 label = kw.pop('label', b'')
24356
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
403 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
404 orig(chunk, label=label + l)
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
405
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
406 oldwrite = ui.write
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
407
24356
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
408 def wrap(*args, **kwargs):
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
409 return wrapwrite(oldwrite, *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
410
24356
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
411 setattr(ui, 'write', wrap)
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
412 return oldwrite
a38f384f2a57 record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents: 24345
diff changeset
413
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
414
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
415 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
416 try:
dabc2237963c crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents: 38002
diff changeset
417 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
418 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
419 recordfn = crecordmod.testdecorator(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
420 testfile, crecordmod.testchunkselector
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
421 )
38080
dabc2237963c crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents: 38002
diff changeset
422 else:
dabc2237963c crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents: 38002
diff changeset
423 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
424
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
425 return crecordmod.filterpatch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
426 ui, originalhunks, recordfn, operation
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
427 )
38080
dabc2237963c crecord: fallback to text mode if diffs are too big for curses mode
Kyle Lippincott <spectral@google.com>
parents: 38002
diff changeset
428 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
429 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
430 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
431
42071
db72f9f6580e interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 42057
diff changeset
432 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
433
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
434
42071
db72f9f6580e interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 42057
diff changeset
435 def recordfilter(ui, originalhunks, match, operation=None):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
436 """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
437 selected hunks.
29326
d48fc6f318a3 patch: define full messages for interactive record/revert
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 29283
diff changeset
438 *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
439 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
440 (see patch.filterpatch).
25310
c1f5ef76d1c2 record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents: 25273
diff changeset
441 """
27531
84d686cb62c4 cmdutil: use crecordmod.checkcurses
Sean Farley <sean@farley.io>
parents: 27370
diff changeset
442 usecurses = crecordmod.checkcurses(ui)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
443 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
444 oldwrite = setupwrapcolorwrite(ui)
8d9e9063b040 record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents: 24357
diff changeset
445 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
446 newchunks, newopts = filterchunks(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
447 ui, originalhunks, usecurses, testfile, match, operation
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
448 )
24358
8d9e9063b040 record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents: 24357
diff changeset
449 finally:
8d9e9063b040 record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents: 24357
diff changeset
450 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
451 return newchunks, newopts
24357
2da601ab3125 record: refactor the filtering code
Laurent Charignon <lcharignon@fb.com>
parents: 24356
diff changeset
452
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
453
50242
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
454 def _record(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
455 ui,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
456 repo,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
457 message,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
458 match,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
459 opts,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
460 commitfunc,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
461 backupall,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
462 filterfn,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
463 pats,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
464 ):
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
465 """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
466
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
467 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
468 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
469 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
470 'commit' or 'qrefresh'.
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
471
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
472 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
473 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
474
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
475 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
476 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
477 """
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
478 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
479 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
480 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
481 wctx = repo[None]
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
482 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
483 if merge:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
484 raise error.InputError(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
485 _(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
486 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
487
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
488 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
489 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
490
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
491 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
492 if not force:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
493 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
494
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
495 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
496
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
497 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
498
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
499 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
500 # 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
501 tmpstatus = scmutil.status(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
502 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
503 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
504 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
505 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
506 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
507 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
508 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
509 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
510
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
511 # 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
512 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
513 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
514 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
515 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
516 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
517 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
518 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
519
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
520 if not force:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
521 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
522 diffopts = patch.difffeatureopts(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
523 ui,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
524 opts=opts,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
525 whitespace=True,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
526 section=b'commands',
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
527 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
528 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
529 diffopts.nodates = True
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
530 diffopts.git = True
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
531 diffopts.showfunc = True
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
532 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
533 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
534 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
535
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
536 # 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
537 try:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
538 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
539 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
540 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
541 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
542 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
543 opts.update(newopts)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
544
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
545 # 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
546 # 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
547 # 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
548 # 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
549 # works.
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
550 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
551 contenders = set()
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
552 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
553 if isheader(h):
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
554 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
555
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
556 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
557 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
558 if not newfiles:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
559 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
560 return 0
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
561
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
562 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
563
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
564 # 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
565
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
566 if backupall:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
567 tobackup = changed
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
568 else:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
569 tobackup = [
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
570 f
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
571 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
572 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
573 ]
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
574 backups = {}
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
575 if tobackup:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
576 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
577 try:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
578 os.mkdir(backupdir)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
579 except FileExistsError:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
580 pass
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
581 try:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
582 # backup continues
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
583 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
584 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
585 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
586 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
587 os.close(fd)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
588 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
589 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
590 backups[f] = tmpname
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
591
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
592 fp = stringio()
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
593 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
594 fname = c.filename()
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
595 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
596 c.write(fp)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
597 dopatch = fp.tell()
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
598 fp.seek(0)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
599
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
600 # 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
601 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
602 patchtext = (
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
603 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
604 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
605 reviewedpatch = ui.edit(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
606 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
607 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
608 fp.truncate(0)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
609 fp.write(reviewedpatch)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
610 fp.seek(0)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
611
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
612 [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
613 # 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
614 if backups:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
615 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
616 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
617
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
618 # 3b. (apply)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
619 if dopatch:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
620 try:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
621 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
622 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
623 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
624 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
625 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
626 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
627 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
628 del fp
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
629
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
630 # 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
631 # 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
632 # 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
633
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
634 # 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
635 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
636 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
637 finally:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
638 # 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
639 try:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
640 dirstate = repo.dirstate
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
641 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
642 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
643
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
644 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
645 # 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
646 # 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
647 # 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
648
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
649 # 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
650 # 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
651 # 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
652 # 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
653 # 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
654 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
655 dirstate.update_file(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
656 realname,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
657 p1_tracked=True,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
658 wc_tracked=True,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
659 possibly_dirty=True,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
660 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
661
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
662 # 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
663 # 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
664 #
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
665 # 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
666 # 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
667 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
668 os.unlink(tmpname)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
669 if tobackup:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
670 os.rmdir(backupdir)
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
671 except OSError:
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
672 pass
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
673
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
674
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
675 def dorecord(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
676 ui, repo, commitfunc, cmdsuggest, backupall, filterfn, *pats, **opts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
677 ):
32193
93155367a2a6 py3: convert opts to bytes in cmdutil.dorecord()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32046
diff changeset
678 opts = pycompat.byteskwargs(opts)
24272
26a1c617e047 record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents: 24260
diff changeset
679 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
680 if cmdsuggest:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
681 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
682 else:
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')
45846
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
684 raise error.InputError(msg)
24272
26a1c617e047 record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents: 24260
diff changeset
685
26a1c617e047 record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents: 24260
diff changeset
686 # 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
687 if not opts.get(b'user'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
688 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
689
50242
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
690 func = functools.partial(
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
691 _record,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
692 commitfunc=commitfunc,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
693 backupall=backupall,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
694 filterfn=filterfn,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
695 pats=pats,
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
696 )
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
697
ee7a7155de10 record: extract a closure to the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50241
diff changeset
698 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
699
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
700
49037
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 49004
diff changeset
701 class dirnode:
33548
4cd4344a53c4 status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33509
diff changeset
702 """
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
703 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
704 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
705
38231
51e420a7a41a cmdutil: use internal separators when building the terse list
Matt Harbison <matt_harbison@yahoo.com>
parents: 38197
diff changeset
706 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
707
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
708 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
709 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
710
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
711 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
712
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
713 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
714 dirnode object as the value
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
715 """
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
716
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
717 def __init__(self, dirpath):
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
718 self.path = dirpath
42057
566daffc607d cleanup: use set literals where possible
Martin von Zweigbergk <martinvonz@google.com>
parents: 41994
diff changeset
719 self.statuses = set()
34682
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
720 self.files = []
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
721 self.subdirs = {}
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
722
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
723 def _addfileindir(self, filename, status):
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
724 """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
725 self.files.append((filename, status))
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
726
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
727 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
728 """
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
729 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
730
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
731 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
732 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
733 there.
33548
4cd4344a53c4 status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33509
diff changeset
734 """
34682
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
735
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
736 # 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
737 # child of this directory
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
738 if b'/' in filename:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
739 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
740
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
741 # 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
742 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
743 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
744 self.subdirs[subdir] = dirnode(subdirpath)
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
745
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
746 # 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
747 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
748
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
749 else:
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
750 self._addfileindir(filename, status)
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
751
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
752 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
753 self.statuses.add(status)
7e3001b74ab3 tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34373
diff changeset
754
34684
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
755 def iterfilepaths(self):
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
756 """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
757 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
758 yield st, pathutil.join(self.path, f)
34684
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
759
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
760 def tersewalk(self, terseargs):
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
761 """
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
762 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
763 dirnode.
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
764
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
765 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
766 flag.
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
767
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
768 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
769
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
770 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
771 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
772 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
773
34698
23eb03f46929 tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents: 34684
diff changeset
774 2) Otherwise, we do following:
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
775
34684
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
776 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
777 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
778
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
779 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
780 directory
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
781 """
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
782
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
783 if len(self.statuses) == 1:
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
784 onlyst = self.statuses.pop()
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
785
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
786 # 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
787 # passed as terse argument
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
788 if onlyst in terseargs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
789 yield onlyst, self.path + b'/'
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
790 return
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
791
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
792 # add the files to status list
34684
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
793 for st, fpath in self.iterfilepaths():
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
794 yield st, fpath
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
795
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
796 # recurse on the subdirs
34683
3d6d4b12128e tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents: 34682
diff changeset
797 for dirobj in self.subdirs.values():
34684
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
798 for st, fpath in dirobj.tersewalk(terseargs):
5d98674df18a tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents: 34683
diff changeset
799 yield st, fpath
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
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
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())
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25657
diff changeset
1164 except IOError 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
36540
aa3294027936 cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 36538
diff changeset
1363 def makefilename(ctx, pat, **props):
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:
27418
2ce4661ac226 cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents: 27417
diff changeset
1379 def __init__(self, fp):
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
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1398 def makefileobj(ctx, pat, mode=b'wb', **props):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1399 writable = mode not in (b'r', b'rb')
7319
eae1767cc6a8 export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 7308
diff changeset
1400
32572
447bbd970047 cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents: 32571
diff changeset
1401 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
1402 repo = ctx.repo()
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24301
diff changeset
1403 if writable:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24301
diff changeset
1404 fp = repo.ui.fout
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24301
diff changeset
1405 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24301
diff changeset
1406 fp = repo.ui.fin
27419
7e2495bf0ad8 cmdutil: do not duplicate stdout by makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents: 27418
diff changeset
1407 return _unclosablefile(fp)
36538
d7a23d6184a2 cmdutil: reorder optional arguments passed to makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents: 36537
diff changeset
1408 fn = makefilename(ctx, pat, **props)
52402
00f5966f0483 cmdutil: stop using the `pycompat.open()` shim
Matt Harbison <matt_harbison@yahoo.com>
parents: 51901
diff changeset
1409 return open(fn, pycompat.sysstr(mode))
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
1410
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1411
39305
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1412 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
1413 """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
1414 cl = opts[b'changelog']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1415 mf = opts[b'manifest']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1416 dir = opts[b'dir']
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1417 msg = None
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1418 if cl and mf:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1419 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
1420 elif cl and dir:
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 --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
1422 elif cl or mf or dir:
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1423 if file_:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1424 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
1425 elif not repo:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1426 msg = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1427 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
1428 b'without a repository'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1429 )
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1430 if msg:
45846
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
1431 raise error.InputError(msg)
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1432
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1433 r = None
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1434 if repo:
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1435 if cl:
21033
254f55b64e31 debugrevlog: use unfiltered view for changelog
Matt Mackall <mpm@selenic.com>
parents: 21024
diff changeset
1436 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
1437 elif dir:
45558
10284ce3d5ed scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45491
diff changeset
1438 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
1439 raise error.InputError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1440 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1441 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
1442 b"treemanifest enabled"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1443 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1444 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1445 if not dir.endswith(b'/'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1446 dir = dir + b'/'
39272
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39127
diff changeset
1447 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
1448 if len(dirlog):
49c583ca48c4 treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents: 25100
diff changeset
1449 r = dirlog
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1450 elif mf:
39272
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39127
diff changeset
1451 r = repo.manifestlog.getstorage(b'')
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1452 elif file_:
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1453 filelog = repo.file(file_)
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1454 if len(filelog):
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1455 r = filelog
39305
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1456
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1457 # 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
1458 # revlog instance.
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1459 if returnrevlog:
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1460 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
1461 pass
50951
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50933
diff changeset
1462 elif hasattr(r, '_revlog'):
43539
9391784299e9 cmdutil: suppress bogus pytype errors
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
1463 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
1464 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
1465 raise error.InputError(
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
1466 _(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
1467 )
39305
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1468
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1469 if not r:
39305
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1470 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
1471 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
1472
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1473 if not file_:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1474 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
1475 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
1476 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
1477
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47062
diff changeset
1478 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
1479 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
1480 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
1481 target=target,
47164
8d3c2f9d4af7 revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47142
diff changeset
1482 radix=file_[:-2],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1483 )
14323
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1484 return r
a79fea6b3e77 debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents: 14322
diff changeset
1485
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1486
39305
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1487 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
1488 """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
1489
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1490 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
1491
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1492 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
1493 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
1494 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
1495 commands.
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1496 """
53e532007878 cmdutil: return a revlog from openrevlog() and split function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1497 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
1498
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1499
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
1500 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
1501 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
1502
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1503 # called with the repo lock held
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1504 #
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1505 # hgsep => pathname that uses "/" to separate directories
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1506 # 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
1507 cwd = repo.getcwd()
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1508 targets = {}
44398
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1509 forget = opts.get(b"forget")
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1510 after = opts.get(b"after")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1511 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
1512 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
1513 if rev:
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1514 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
1515 # 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
1516 # 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
1517 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
1518 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
1519 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
1520 raise error.InputError(
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
1521 _(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
1522 )
44401
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1523 else:
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1524 ctx = repo[None]
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1525
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
1526 pctx = ctx.p1()
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1527
41668
e41449818bee copy: respect ui.relative-paths in copy/rename
Martin von Zweigbergk <martinvonz@google.com>
parents: 41664
diff changeset
1528 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1529
44398
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1530 if forget:
44399
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1531 if ctx.rev() is None:
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1532 new_ctx = ctx
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1533 else:
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1534 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
1535 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
1536 # avoid cycle context -> subrepo -> cmdutil
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1537 from . import context
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1538
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1539 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
1540 new_ctx = context.overlayworkingctx(repo)
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1541 new_ctx.setbase(ctx.p1())
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1542 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
1543
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1544 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
1545
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1546 current_copies = ctx.p1copies()
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1547 current_copies.update(ctx.p2copies())
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1548
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1549 uipathfn = scmutil.getuipathfn(repo)
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1550 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
1551 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
1552 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
1553 elif match.exact(f):
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1554 ui.warn(
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1555 _(
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1556 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
1557 )
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1558 % uipathfn(f)
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1559 )
44399
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1560
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1561 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
1562 with repo.lock():
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1563 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
1564 new_node = mem_ctx.commit()
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1565
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1566 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
1567 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
1568 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
1569 replacements = {ctx.node(): [new_node]}
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1570 scmutil.cleanupnodes(
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1571 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
1572 )
7c4b98a4e536 copy: add experimetal support for unmarking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44398
diff changeset
1573
44398
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1574 return
8be0c63535b5 copy: add option to unmark file as copied
Martin von Zweigbergk <martinvonz@google.com>
parents: 44395
diff changeset
1575
44400
d8b49bf6cfec copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents: 44399
diff changeset
1576 pats = scmutil.expandpats(pats)
d8b49bf6cfec copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents: 44399
diff changeset
1577 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
1578 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
1579 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
1580 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
1581 dest = pats.pop()
d8b49bf6cfec copy: move argument validation a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents: 44399
diff changeset
1582
5605
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1583 def walkpat(pat):
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1584 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
1585 # 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
1586 # 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
1587 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
1588 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
1589 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
1590 rel = uipathfn(abs)
6584
29c77e5dfb3c walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents: 6582
diff changeset
1591 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
1592 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
1593 if abs in pctx:
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1594 if not after:
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1595 if exact:
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1596 ui.warn(
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1597 _(
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1598 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
1599 b'for remove\n'
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1600 )
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1601 % rel
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 continue
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1604 else:
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1605 if exact:
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1606 ui.warn(
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1607 _(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
1608 )
44394
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1609 continue
2bd3b95fdce0 copy: rewrite walkpat() to depend less on dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 44349
diff changeset
1610
5605
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1611 # abs: hgsep
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1612 # rel: ossep
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1613 srcs.append((abs, rel, exact))
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1614 return srcs
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1615
44401
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1616 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
1617 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
1618 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
1619 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
1620 raise error.InputError(
44401
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1621 _(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
1622 % uipathfn(absdest)
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1623 )
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1624 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
1625 raise error.InputError(
44401
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1626 _(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
1627 % (uipathfn(absdest), ctx)
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1628 )
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1629
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1630 # avoid cycle context -> subrepo -> cmdutil
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1631 from . import context
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1632
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1633 copylist = []
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1634 for pat in pats:
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1635 srcs = walkpat(pat)
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1636 if not srcs:
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1637 continue
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1638 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
1639 copylist.append(abs)
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1640
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
1641 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
1642 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
1643 # 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
1644 # `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
1645 # existing functions below.
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1646 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
1647 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
1648
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1649 new_ctx = context.overlayworkingctx(repo)
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1650 new_ctx.setbase(ctx.p1())
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1651 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
1652
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1653 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
1654
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1655 with repo.lock():
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1656 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
1657 new_node = mem_ctx.commit()
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1658
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1659 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
1660 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
1661 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
1662 replacements = {ctx.node(): [new_node]}
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1663 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
1664
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1665 return
9dab3fa64325 copy: add experimental support for marking committed copies
Martin von Zweigbergk <martinvonz@google.com>
parents: 44400
diff changeset
1666
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1667 # abssrc: hgsep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1668 # relsrc: ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1669 # otarget: ossep
5605
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1670 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
1671 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
1672 if b'/' in abstarget:
16542
e596a631210e dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents: 16458
diff changeset
1673 # 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
1674 # 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
1675 abspath, absname = abstarget.rsplit(b'/', 1)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1676 abstarget = repo.dirstate.normalize(abspath) + b'/' + absname
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1677 reltarget = repo.pathto(abstarget, cwd)
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1678 target = repo.wjoin(abstarget)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1679 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
1680 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
1681
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 already_commited = entry.tracked and not entry.added
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1683
13962
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13945
diff changeset
1684 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
1685
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1686 # check for collisions
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1687 prevsrc = targets.get(abstarget)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1688 if prevsrc is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1689 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1690 _(b'%s: not overwriting - %s collides with %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1691 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1692 reltarget,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1693 repo.pathto(abssrc, cwd),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1694 repo.pathto(prevsrc, cwd),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1695 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1696 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1697 return True # report a failure
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1698
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1699 # check for overwrites
12342
70236d6fd844 rename: do not overwrite existing broken symlinks
Patrick Mezard <pmezard@gmail.com>
parents: 11950
diff changeset
1700 exists = os.path.lexists(target)
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1701 samefile = False
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1702 if exists and abssrc != abstarget:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1703 if repo.dirstate.normalize(abssrc) == repo.dirstate.normalize(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1704 abstarget
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1705 ):
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1706 if not rename:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1707 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
1708 return True # report a failure
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1709 exists = False
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1710 samefile = True
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1711
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
1712 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
1713 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
1714 if already_commited:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1715 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
1716 # 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
1717 # 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
1718 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
1719 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
1720 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
1721 )
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1722 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
1723 if rename:
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1724 hint = _(
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1725 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
1726 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
1727 )
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1728 else:
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1729 hint = _(
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1730 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
1731 b"the parent of the working copy)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1732 )
30151
381293e1135e copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents: 30142
diff changeset
1733 else:
48258
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1734 if after:
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1735 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
1736 else:
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'--force'
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1738 if rename:
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1739 hint = (
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1740 _(
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1741 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
1742 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
1743 )
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1744 % flags
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1745 )
48258
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1746 else:
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1747 hint = (
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1748 _(
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1749 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
1750 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
1751 )
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1752 % flags
c62e4397eb28 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 48130
diff changeset
1753 )
30151
381293e1135e copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents: 30142
diff changeset
1754 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1755 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
1756 if rename:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1757 hint = _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1758 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
1759 )
30151
381293e1135e copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents: 30142
diff changeset
1760 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1761 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
1762 ui.warn(msg % reltarget)
381293e1135e copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents: 30142
diff changeset
1763 ui.warn(hint)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1764 return True # report a failure
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1765
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1766 if after:
5608
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1767 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
1768 if rename:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1769 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1770 _(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
1771 % (relsrc, reltarget)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1772 )
11152
e8d10d085f47 cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents: 11061
diff changeset
1773 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1774 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1775 _(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
1776 % (relsrc, reltarget)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1777 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1778 return True # report a failure
5608
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1779 elif not dryrun:
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1780 try:
5608
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1781 if exists:
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1782 os.unlink(target)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1783 targetdir = os.path.dirname(target) or b'.'
5608
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1784 if not os.path.isdir(targetdir):
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1785 os.makedirs(targetdir)
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1786 if samefile:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1787 tmp = target + b"~hgrename"
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1788 os.rename(src, tmp)
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1789 os.rename(tmp, target)
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1790 else:
37091
08890706366e copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents: 37087
diff changeset
1791 # 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
1792 # Linux CLI behavior.
08890706366e copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents: 37087
diff changeset
1793 util.copyfile(src, target, copystat=rename)
14518
a67e866f46f9 workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents: 14442
diff changeset
1794 srcexists = True
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25657
diff changeset
1795 except IOError as inst:
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1796 if inst.errno == errno.ENOENT:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1797 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
1798 srcexists = False
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1799 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1800 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1801 _(b'%s: cannot copy - %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1802 % (relsrc, encoding.strtolocal(inst.strerror))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1803 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1804 return True # report a failure
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1805
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1806 if ui.verbose or not exact:
7894
caef5fdf1375 cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents: 7879
diff changeset
1807 if rename:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1808 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
1809 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1810 ui.status(_(b'copying %s to %s\n') % (relsrc, reltarget))
5608
784eadabd985 copy: simplify inner copy
Matt Mackall <mpm@selenic.com>
parents: 5607
diff changeset
1811
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1812 targets[abstarget] = abssrc
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1813
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1814 # fix up dirstate
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1815 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
1816 ui, repo, ctx, abssrc, abstarget, dryrun=dryrun, cwd=cwd
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1817 )
5610
2493a478f395 copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents: 5609
diff changeset
1818 if rename and not dryrun:
16283
6c4dbe28dda3 rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents: 16165
diff changeset
1819 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
1820 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
1821 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
1822 ctx.forget([abssrc])
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1823
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1824 # pat: ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1825 # dest ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1826 # srcs: list of (hgsep, hgsep, ossep, bool)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1827 # return: function that takes hgsep and returns ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1828 def targetpathfn(pat, dest, srcs):
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1829 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
1830 abspfx = pathutil.canonpath(repo.root, cwd, pat)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1831 abspfx = util.localpath(abspfx)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1832 if destdirexists:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1833 striplen = len(os.path.split(abspfx)[0])
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1834 else:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1835 striplen = len(abspfx)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1836 if striplen:
30620
bb77654dc7ae py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30543
diff changeset
1837 striplen += len(pycompat.ossep)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1838 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
1839 elif destdirexists:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1840 res = lambda p: os.path.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1841 dest, os.path.basename(util.localpath(p))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1842 )
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1843 else:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1844 res = lambda p: dest
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1845 return res
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1846
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1847 # pat: ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1848 # dest ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1849 # srcs: list of (hgsep, hgsep, ossep, bool)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1850 # return: function that takes hgsep and returns ossep
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1851 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
1852 if matchmod.patkind(pat):
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1853 # a mercurial pattern
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1854 res = lambda p: os.path.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1855 dest, os.path.basename(util.localpath(p))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1856 )
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1857 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
1858 abspfx = pathutil.canonpath(repo.root, cwd, pat)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1859 if len(abspfx) < len(srcs[0][0]):
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1860 # 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
1861 # 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
1862 def evalpath(striplen):
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1863 score = 0
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1864 for s in srcs:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1865 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
1866 if os.path.lexists(t):
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1867 score += 1
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1868 return score
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1869
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1870 abspfx = util.localpath(abspfx)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1871 striplen = len(abspfx)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1872 if striplen:
30620
bb77654dc7ae py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30543
diff changeset
1873 striplen += len(pycompat.ossep)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1874 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
1875 score = evalpath(striplen)
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1876 striplen1 = len(os.path.split(abspfx)[0])
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1877 if striplen1:
30620
bb77654dc7ae py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30543
diff changeset
1878 striplen1 += len(pycompat.ossep)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1879 if evalpath(striplen1) > score:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1880 striplen = striplen1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1881 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
1882 else:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1883 # a file
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1884 if destdirexists:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1885 res = lambda p: os.path.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1886 dest, os.path.basename(util.localpath(p))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1887 )
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1888 else:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1889 res = lambda p: dest
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1890 return res
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1891
6258
c24f4b3f156b Fix issue995 (copy --after and symlinks pointing to a directory)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6211
diff changeset
1892 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
1893 if not destdirexists:
12085
6f833fc3ccab Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents: 12032
diff changeset
1894 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
1895 raise error.InputError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1896 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1897 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
1898 b'existing directory'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1899 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1900 )
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
1901 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
1902 raise error.InputError(
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
1903 _(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
1904 )
5607
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1905
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1906 tfn = targetpathfn
e9bae5c80ab4 copy: minor cleanups
Matt Mackall <mpm@selenic.com>
parents: 5606
diff changeset
1907 if after:
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1908 tfn = targetpathafterfn
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1909 copylist = []
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1910 for pat in pats:
5605
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1911 srcs = walkpat(pat)
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1912 if not srcs:
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1913 continue
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1914 copylist.append((tfn(pat, dest, srcs), srcs))
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1915 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
1916 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
1917 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
1918 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
1919 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
1920
5606
447ea621e50e copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents: 5605
diff changeset
1921 errors = 0
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1922 for targetpath, srcs in copylist:
5605
e7a9ad999308 copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents: 5604
diff changeset
1923 for abssrc, relsrc, exact in srcs:
5606
447ea621e50e copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents: 5605
diff changeset
1924 if copyfile(abssrc, relsrc, targetpath(abssrc), exact):
447ea621e50e copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents: 5605
diff changeset
1925 errors += 1
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1926
11177
6a64813276ed commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents: 11152
diff changeset
1927 return errors != 0
5589
9981b6b19ecf move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents: 5550
diff changeset
1928
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1929
26561
1f14920a892c import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26547
diff changeset
1930 ## 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
1931 # 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
1932 extrapreimport = [] # run before commit
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1933 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
1934 # 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
1935 #
1f14920a892c import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26547
diff changeset
1936 # '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
1937 # arguments:
1f14920a892c import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26547
diff changeset
1938 # - 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
1939 # - 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
1940 # - 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
1941 # - 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
1942 # 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
1943 # 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
1944 # there.
1f14920a892c import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26547
diff changeset
1945 extrapreimportmap = {}
26562
dd2f5e014806 import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26561
diff changeset
1946 # '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
1947 # argument:
dd2f5e014806 import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26561
diff changeset
1948 # - 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
1949 extrapostimportmap = {}
26561
1f14920a892c import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26547
diff changeset
1950
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
1951
37620
fd1dd79cff20 cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37604
diff changeset
1952 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
1953 """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
1954
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1955 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
1956 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
1957
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1958 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
1959 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
1960
37620
fd1dd79cff20 cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37604
diff changeset
1961 :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
1962 ``patch.extract()``)
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1963 :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
1964 :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
1965 :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
1966 (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
1967 :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
1968 updatefunc(<repo>, <node>)
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1969 """
25930
221491bbaf7e cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25795
diff changeset
1970 # avoid cycle context -> subrepo -> cmdutil
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
1971 from . import context
37620
fd1dd79cff20 cmdutil: pass in parsed patch to tryimportone() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37604
diff changeset
1972
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1973 tmpname = patchdata.get(b'filename')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1974 message = patchdata.get(b'message')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1975 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
1976 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
1977 branch = patchdata.get(b'branch')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1978 nodeid = patchdata.get(b'nodeid')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1979 p1 = patchdata.get(b'p1')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1980 p2 = patchdata.get(b'p2')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1981
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1982 nocommit = opts.get(b'no_commit')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1983 importbranch = opts.get(b'import_branch')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1984 update = not opts.get(b'bypass')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1985 strip = opts[b"strip"]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1986 prefix = opts[b"prefix"]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1987 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
1988
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1989 if not tmpname:
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1990 return None, None, False
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
1991
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
1992 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
1993
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1994 cmdline_message = logmessage(ui, opts)
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1995 if cmdline_message:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1996 # pickup the cmdline msg
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1997 message = cmdline_message
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1998 elif message:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
1999 # pickup the patch msg
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2000 message = message.strip()
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2001 else:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2002 # launch the editor
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2003 message = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2004 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
2005
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2006 if len(parents) == 1:
46842
ad878e3f282b refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
2007 parents.append(repo[nullrev])
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2008 if opts.get(b'exact'):
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2009 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
2010 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
2011 p1 = repo[p1]
46842
ad878e3f282b refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
2012 p2 = repo[p2 or nullrev]
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2013 elif p2:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2014 try:
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
2015 p1 = repo[p1]
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2016 p2 = repo[p2]
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2017 # 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
2018 # 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
2019 # first parent.
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2020 if p1 != parents[0]:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2021 p1 = parents[0]
46842
ad878e3f282b refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
2022 p2 = repo[nullrev]
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2023 except error.RepoError:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2024 p1, p2 = parents
46842
ad878e3f282b refactor: prefer lookup by revision, even for null
Joerg Sonnenberger <joerg@bec.de>
parents: 46819
diff changeset
2025 if p2.rev() == nullrev:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2026 ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2027 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2028 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
2029 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
2030 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2031 )
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2032 else:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2033 p1, p2 = parents
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2034
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2035 n = None
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2036 if update:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2037 if p1 != parents[0]:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2038 updatefunc(repo, p1.node())
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2039 if p2 != parents[1]:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2040 repo.setparents(p1.node(), p2.node())
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2041
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2042 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
2043 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
2044 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
2045 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2046
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2047 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
2048 files = set()
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2049 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2050 patch.patch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2051 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2052 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2053 tmpname,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2054 strip=strip,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2055 prefix=prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2056 files=files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2057 eolmode=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2058 similarity=sim / 100.0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2059 )
48411
6a454e7053a1 errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48258
diff changeset
2060 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
2061 raise error.InputError(
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2062 pycompat.bytestr(e),
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2063 hint=_(
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2064 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
2065 ),
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2066 )
48411
6a454e7053a1 errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48258
diff changeset
2067 except error.PatchApplicationError as e:
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2068 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
2069 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
2070 if partial:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2071 rejects = True
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2072
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2073 files = list(files)
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2074 if nocommit:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2075 if message:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2076 msgs.append(message)
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
2077 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2078 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
2079 # 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
2080 # 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
2081 # being updated to its first parent.
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2082 m = None
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2083 else:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2084 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
2085 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
2086 if opts.get(b'exact'):
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2087 editor = None
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2088 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2089 editor = getcommiteditor(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2090 editform=editform, **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2091 )
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2092 extra = {}
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2093 for idfunc in extrapreimport:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2094 extrapreimportmap[idfunc](repo, patchdata, extra, opts)
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2095 overrides = {}
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2096 if partial:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2097 overrides[(b'ui', b'allowemptycommit')] = True
43758
71dbd6f6fcb8 import: add a --secret option
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 43751
diff changeset
2098 if opts.get(b'secret'):
71dbd6f6fcb8 import: add a --secret option
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 43751
diff changeset
2099 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
2100 with repo.ui.configoverride(overrides, b'import'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2101 n = repo.commit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2102 message, user, date, match=m, editor=editor, extra=extra
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2103 )
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2104 for idfunc in extrapostimport:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2105 extrapostimportmap[idfunc](repo[n])
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2106 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2107 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
2108 branch = branch or b'default'
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2109 else:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2110 branch = p1.branch()
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2111 store = patch.filestore()
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2112 try:
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
2113 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
2114 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2115 patch.patchrepo(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2116 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2117 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2118 p1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2119 store,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2120 tmpname,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2121 strip,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2122 prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2123 files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2124 eolmode=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2125 )
48411
6a454e7053a1 errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48258
diff changeset
2126 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
2127 raise error.InputError(
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2128 stringutil.forcebytestr(e),
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2129 hint=_(
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2130 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
2131 ),
220506bb213e patch: add hint about mangled whitespace on bad patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48411
diff changeset
2132 )
48411
6a454e7053a1 errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48258
diff changeset
2133 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
2134 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
2135 if opts.get(b'exact'):
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2136 editor = None
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
2137 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2138 editor = getcommiteditor(editform=b'import.bypass')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2139 memctx = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2140 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2141 (p1.node(), p2.node()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2142 message,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2143 files=files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2144 filectxfn=store,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2145 user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2146 date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2147 branch=branch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2148 editor=editor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2149 )
44184
b339faf3f843 import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents: 44098
diff changeset
2150
b339faf3f843 import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents: 44098
diff changeset
2151 overrides = {}
b339faf3f843 import: don't ignore `--secret` when `--bypass` is specified
Matt Harbison <matt_harbison@yahoo.com>
parents: 44098
diff changeset
2152 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
2153 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
2154 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
2155 n = memctx.commit()
37621
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2156 finally:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2157 store.close()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2158 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
2159 # --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
2160 # and branch bits
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2161 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
2162 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
2163 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
2164 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
2165 if n:
5537d8f5e989 patch: make extract() a context manager (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37620
diff changeset
2166 # 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
2167 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
2168 return msg, n, rejects
20500
ce3f3082ec45 import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 20470
diff changeset
2169
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2170
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
2171 # 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
2172 # 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
2173 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
2174 # 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
2175 # 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
2176 # 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
2177 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
2178
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2179
37602
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2180 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
2181 node = scmutil.binnode(ctx)
32471
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2182 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
2183 branch = ctx.branch()
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2184 if switch_parent:
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2185 parents.reverse()
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2186
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2187 if parents:
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2188 prev = parents[0]
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2189 else:
47055
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46969
diff changeset
2190 prev = repo.nullid
32471
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2191
37602
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2192 fm.context(ctx=ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2193 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
2194 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
2195 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
2196 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
2197 fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2198 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
2199 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2200 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
2201 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
2202 if len(parents) > 1:
43077
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(parents[1]))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2204 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
2205
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2206 # 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
2207 for headerid in extraexport:
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2208 header = extraexportmap[headerid](seqno, ctx)
7feaf5550a9e cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents: 32470
diff changeset
2209 if header is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2210 fm.plain(b'# %s\n' % header)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2211
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2212 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
2213 fm.plain(b'\n')
37602
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2214
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2215 if fm.isplain():
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2216 chunkiter = patch.diffui(repo, prev, node, match, opts=diffopts)
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2217 for chunk, label in chunkiter:
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2218 fm.plain(chunk, label=label)
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2219 else:
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2220 chunkiter = patch.diff(repo, prev, node, match, opts=diffopts)
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2221 # TODO: make it structured?
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2222 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
2223
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2224
37604
daafaff4e5be export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37603
diff changeset
2225 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
2226 """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
2227 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
2228 ctx = repo[rev]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2229 if not dest.startswith(b'<'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2230 repo.ui.note(b"%s\n" % dest)
37602
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2231 fm.startitem()
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2232 _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
2233
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2234
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2235 def _exportfntemplate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2236 repo, revs, basefm, fntemplate, switch_parent, diffopts, match
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2237 ):
37600
7800ed2e4980 export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents: 37599
diff changeset
2238 """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
2239 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
2240 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
2241 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
2242
7800ed2e4980 export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents: 37599
diff changeset
2243 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
2244 ctx = repo[rev]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2245 dest = makefilename(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2246 ctx, fntemplate, total=total, seqno=seqno, revwidth=revwidth
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2247 )
37601
2e0e61312a25 export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents: 37600
diff changeset
2248 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
2249
2e0e61312a25 export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents: 37600
diff changeset
2250 for dest in filemap:
37604
daafaff4e5be export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37603
diff changeset
2251 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
2252 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
2253 for seqno, rev in filemap[dest]:
37602
52670eaa14b4 export: port _exportsingle() to formatter
Yuya Nishihara <yuya@tcha.org>
parents: 37601
diff changeset
2254 fm.startitem()
37601
2e0e61312a25 export: serialize revisions to be exported per destination file
Yuya Nishihara <yuya@tcha.org>
parents: 37600
diff changeset
2255 ctx = repo[rev]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2256 _exportsingle(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2257 repo, ctx, fm, match, switch_parent, seqno, diffopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2258 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2259
37600
7800ed2e4980 export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents: 37599
diff changeset
2260
42489
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2261 def _prefetchchangedfiles(repo, revs, match):
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2262 allfiles = set()
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2263 for rev in revs:
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2264 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
2265 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
2266 allfiles.add(file)
45073
a56ba57c837d scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 45040
diff changeset
2267 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
2268 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
2269 scmutil.prefetchfiles(repo, revmatches)
42489
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2270
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2271
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2272 def export(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2273 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2274 revs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2275 basefm,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2276 fntemplate=b'hg-%h.patch',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2277 switch_parent=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2278 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2279 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2280 ):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
2281 """export changesets as hg patches
32468
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2282
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2283 Args:
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2284 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
2285 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
2286 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
2287 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
2288 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
2289 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
2290 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
2291 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
2292
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2293 Returns:
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2294 Nothing.
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2295
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2296 Side Effect:
1f4be037f558 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents: 32421
diff changeset
2297 "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
2298 destinations:
32469
9fd9f91b0c43 cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents: 32468
diff changeset
2299 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
2300 the given template.
37604
daafaff4e5be export: enable formatter support (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37603
diff changeset
2301 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
2302 """
42489
307f67d4aee3 export: don't prefetch *all* files in manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 42418
diff changeset
2303 _prefetchchangedfiles(repo, revs, match)
37763
b54404d66f7e export: invoke the file prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents: 37762
diff changeset
2304
37603
678d760c71ff export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37602
diff changeset
2305 if not fntemplate:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2306 _exportfile(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2307 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
2308 )
37600
7800ed2e4980 export: split cmdutil.export() to single-file and maybe-multiple-files cases
Yuya Nishihara <yuya@tcha.org>
parents: 37599
diff changeset
2309 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2310 _exportfntemplate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2311 repo, revs, basefm, fntemplate, switch_parent, opts, match
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2312 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2313
10611
e764f24a45ee patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10608
diff changeset
2314
37603
678d760c71ff export: extract function to write patch to file object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37602
diff changeset
2315 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
2316 """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
2317 _prefetchchangedfiles(repo, revs, match)
37763
b54404d66f7e export: invoke the file prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents: 37762
diff changeset
2318
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2319 dest = getattr(fp, 'name', b'<unnamed>')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2320 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
2321 _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
2322
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2323
29806
142ae01820a3 debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents: 29770
diff changeset
2324 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
2325 """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
2326
78f4c2b7052f debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 20392
diff changeset
2327 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
2328 if index is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2329 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
2330 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
2331 succs = marker.succnodes()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2332 fm.condwrite(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2333 succs,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2334 b'succnodes',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2335 b'%s ',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2336 fm.formatlist(map(hex, succs), name=b'node'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2337 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2338 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
2339 parents = marker.parentnodes()
2229d757802d debugobsolete: display parents information from markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22250
diff changeset
2340 if parents is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2341 fm.write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2342 b'parentnodes',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2343 b'{%s} ',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2344 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
2345 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2346 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
2347 meta = marker.metadata().copy()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2348 meta.pop(b'date', None)
38576
152f4822d210 pycompat: move rapply() from util
Yuya Nishihara <yuya@tcha.org>
parents: 38543
diff changeset
2349 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
2350 fm.write(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2351 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
2352 )
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2353 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
2354
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2355
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3738
diff changeset
2356 def finddate(ui, repo, date):
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3738
diff changeset
2357 """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
2358 mrevs = repo.revs(b'date(%s)', date)
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2359 try:
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2360 rev = mrevs.max()
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2361 except ValueError:
45846
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
2362 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
2363
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2364 ui.status(
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2365 _(b"found revision %d from %s\n")
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2366 % (rev, dateutil.datestr(repo[rev].date()))
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2367 )
d2b5a7659fff cmdutil: reimplement finddate() without using walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents: 45408
diff changeset
2368 return b'%d' % rev
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3738
diff changeset
2369
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2370
41661
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41660
diff changeset
2371 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
2372 bad = []
25436
9724cbe2d546 add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25424
diff changeset
2373
9724cbe2d546 add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25424
diff changeset
2374 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
2375 names = []
12270
166b9866580a add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents: 12269
diff changeset
2376 wctx = repo[None]
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14129
diff changeset
2377 cca = None
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14129
diff changeset
2378 abort, warn = scmutil.checkportabilityalert(ui)
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14129
diff changeset
2379 if abort or warn:
17201
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17182
diff changeset
2380 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
2381
40088
1d09ba0d2ed3 narrow: move remaining narrow-limited dirstate walks to core
Martin von Zweigbergk <martinvonz@google.com>
parents: 40030
diff changeset
2382 match = repo.narrowmatch(match, includeexact=True)
26206
ab1c6e4efda4 add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents: 26098
diff changeset
2383 badmatch = matchmod.badmatch(match, badfn)
ab1c6e4efda4 add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents: 26098
diff changeset
2384 dirstate = repo.dirstate
ab1c6e4efda4 add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents: 26098
diff changeset
2385 # 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
2386 # 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
2387 for f in sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2388 dirstate.walk(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2389 badmatch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2390 subrepos=sorted(wctx.substate),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2391 unknown=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2392 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2393 full=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2394 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2395 ):
51194
b8f9911c8dca add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents: 50952
diff changeset
2396 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
2397 # 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
2398 # 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
2399 # 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
2400 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
2401 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
2402 if (
b8f9911c8dca add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents: 50952
diff changeset
2403 exact
b8f9911c8dca add: don't attempt to add back removed files unless explicitly listed
Martin von Zweigbergk <martinvonz@google.com>
parents: 50952
diff changeset
2404 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
2405 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
2406 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
2407 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
2408 ):
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14129
diff changeset
2409 if cca:
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14129
diff changeset
2410 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
2411 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
2412 if ui.verbose or not exact:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2413 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2414 _(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
2415 )
12270
166b9866580a add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents: 12269
diff changeset
2416
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18340
diff changeset
2417 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
2418 sub = wctx.sub(subpath)
9e99d2bbb1b1 add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents: 15231
diff changeset
2419 try:
28017
d3f1b7ee5e70 match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 27985
diff changeset
2420 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
2421 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
2422 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
2423 if opts.get('subrepos'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2424 bad.extend(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2425 sub.add(ui, submatch, subprefix, subuipathfn, False, **opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2426 )
15410
9e99d2bbb1b1 add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents: 15231
diff changeset
2427 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2428 bad.extend(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2429 sub.add(ui, submatch, subprefix, subuipathfn, True, **opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2430 )
15410
9e99d2bbb1b1 add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents: 15231
diff changeset
2431 except error.LookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2432 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2433 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2434 )
12270
166b9866580a add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents: 12269
diff changeset
2435
43554
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43539
diff changeset
2436 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
2437 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
2438 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
2439 return bad
877236cdd437 add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents: 12266
diff changeset
2440
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2441
32005
2406dbba49bd serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
2442 def addwebdirpath(repo, serverpath, webconf):
2406dbba49bd serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
2443 webconf[serverpath] = repo.root
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2444 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
2445
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2446 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
2447 ctx = repo[r]
2406dbba49bd serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
2448 for subpath in ctx.substate:
2406dbba49bd serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
2449 ctx.sub(subpath).addwebdirpath(serverpath, webconf)
2406dbba49bd serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
2450
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2451
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2452 def forget(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2453 ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2454 ):
37778
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37774
diff changeset
2455 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
2456 raise error.InputError(
8d72e29ad1e0 errors: introduce InputError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45831
diff changeset
2457 _(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
2458 )
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2459 bad = []
25437
9c1bcd95b3ff forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25436
diff changeset
2460 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
2461 wctx = repo[None]
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2462 forgot = []
25437
9c1bcd95b3ff forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25436
diff changeset
2463
9c1bcd95b3ff forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25436
diff changeset
2464 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
2465 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
2466 if explicitonly:
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2467 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
2468
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18340
diff changeset
2469 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
2470 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
2471 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
2472 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
2473 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
2474 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2475 subbad, subforgot = sub.forget(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2476 submatch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2477 subprefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2478 subuipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2479 dryrun=dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2480 interactive=interactive,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2481 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2482 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
2483 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
2484 except error.LookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2485 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2486 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2487 )
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2488
16070
f11eee00c652 forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 15912
diff changeset
2489 if not explicitonly:
f11eee00c652 forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 15912
diff changeset
2490 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
2491 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
2492 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
2493 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
2494 # 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
2495 # 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
2496 # 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
2497 # 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
2498 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
2499 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2500 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2501 _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2502 b'not removing %s: '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2503 b'file is already untracked\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2504 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2505 % uipathfn(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2506 )
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2507 bad.append(f)
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2508
37778
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37774
diff changeset
2509 if interactive:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2510 responses = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2511 b'[Ynsa?]'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2512 b'$$ &Yes, forget this file'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2513 b'$$ &No, skip this file'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2514 b'$$ &Skip remaining files'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2515 b'$$ Include &all remaining files'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2516 b'$$ &? (display help)'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2517 )
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2518 for filename in forget[:]:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2519 r = ui.promptchoice(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2520 _(b'forget %s %s') % (uipathfn(filename), responses)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2521 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2522 if r == 4: # ?
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2523 while r == 4:
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2524 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
2525 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
2526 r = ui.promptchoice(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2527 _(b'forget %s %s') % (uipathfn(filename), responses)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2528 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2529 if r == 0: # yes
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2530 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2531 elif r == 1: # no
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2532 forget.remove(filename)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2533 elif r == 2: # Skip
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2534 fnindex = forget.index(filename)
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2535 del forget[fnindex:]
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2536 break
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2537 elif r == 3: # All
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2538 break
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37621
diff changeset
2539
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2540 for f in forget:
37778
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37774
diff changeset
2541 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
2542 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2543 _(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
2544 )
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2545
36945
45bfcd16f27e forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 36742
diff changeset
2546 if not dryrun:
45bfcd16f27e forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 36742
diff changeset
2547 rejected = wctx.forget(forget, prefix)
45bfcd16f27e forget: add --dry-run mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 36742
diff changeset
2548 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
2549 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
2550 return bad, forgot
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15911
diff changeset
2551
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2552
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
2553 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
2554 ret = 1
e1cb460a3524 files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents: 24272
diff changeset
2555
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2556 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
2557 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
2558 # 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
2559 # 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
2560 buf = []
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2561 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
2562 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
2563 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
2564 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
2565 del buf[:]
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2566 ret = 0
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2567 if buf:
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2568 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
2569 else:
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2570 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
2571 fm.startitem()
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2572 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
2573 if needsfctx:
065421e12248 files: speed up `hg files` when no flags change display
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44915
diff changeset
2574 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
2575 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
2576 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
2577 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
2578 ret = 0
24275
e1cb460a3524 files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents: 24272
diff changeset
2579
25228
63a57a2727b6 files: recurse into subrepos automatically with an explicit path
Matt Harbison <matt_harbison@yahoo.com>
parents: 25169
diff changeset
2580 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
2581 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
2582 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2583 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
2584 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
2585 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
2586 recurse = m.exact(subpath) or subrepos
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2587 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2588 sub.printfiles(ui, submatch, subuipathfn, fm, fmt, recurse)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2589 == 0
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2590 ):
24413
a8595176dd64 subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents: 24391
diff changeset
2591 ret = 0
a8595176dd64 subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents: 24391
diff changeset
2592 except error.LookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2593 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2594 _(b"skipping missing subrepository: %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2595 % uipathfn(subpath)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2596 )
24413
a8595176dd64 subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents: 24391
diff changeset
2597
24275
e1cb460a3524 files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents: 24272
diff changeset
2598 return ret
e1cb460a3524 files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents: 24272
diff changeset
2599
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2600
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2601 def remove(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2602 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
2603 ):
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2604 ret = 0
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2605 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
2606 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
2607
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2608 wctx = repo[None]
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2609
28607
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2610 if warnings is None:
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2611 warnings = []
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2612 warn = True
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2613 else:
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2614 warn = False
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2615
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2616 subs = sorted(wctx.substate)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2617 progress = ui.makeprogress(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2618 _(b'searching'), total=len(subs), unit=_(b'subrepos')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2619 )
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2620 for subpath in subs:
29813
35560189677c subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29806
diff changeset
2621 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
2622 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
2623 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
29813
35560189677c subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29806
diff changeset
2624 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
2625 progress.increment()
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2626 sub = wctx.sub(subpath)
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2627 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2628 if sub.removefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2629 submatch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2630 subprefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2631 subuipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2632 after,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2633 force,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2634 subrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2635 dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2636 warnings,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2637 ):
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2638 ret = 1
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2639 except error.LookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2640 warnings.append(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2641 _(b"skipping missing subrepository: %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2642 % uipathfn(subpath)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2643 )
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38353
diff changeset
2644 progress.complete()
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2645
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2646 # 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
2647 deleteddirs = pathutil.dirs(deleted)
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2648 files = m.files()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2649 progress = ui.makeprogress(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2650 _(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
2651 )
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2652 for f in files:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2653
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2654 def insubrepo():
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2655 for subpath in wctx.substate:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2656 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
2657 return True
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2658 return False
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2659
38353
89db59e5cf3e remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38348
diff changeset
2660 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
2661 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
2662 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
2663 continue
23325
4165cfd67519 remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents: 23289
diff changeset
2664
23674
6e36b9fc7869 remove: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents: 23673
diff changeset
2665 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
2666 if repo.wvfs.isdir(f):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2667 warnings.append(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2668 _(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
2669 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2670 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2671 warnings.append(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2672 _(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
2673 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2674 # 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
2675 ret = 1
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38353
diff changeset
2676 progress.complete()
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2677
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2678 if force:
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2679 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
2680 elif after:
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2681 list = deleted
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2682 remaining = modified + added + clean
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2683 progress = ui.makeprogress(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2684 _(b'skipping'), total=len(remaining), unit=_(b'files')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2685 )
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2686 for f in remaining:
38353
89db59e5cf3e remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38348
diff changeset
2687 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
2688 if ui.verbose or (f in files):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2689 warnings.append(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2690 _(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
2691 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2692 ret = 1
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38353
diff changeset
2693 progress.complete()
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2694 else:
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2695 list = deleted + clean
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2696 progress = ui.makeprogress(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2697 _(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
2698 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2699 for f in modified:
38353
89db59e5cf3e remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38348
diff changeset
2700 progress.increment()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2701 warnings.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2702 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2703 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
2704 b' to force removal)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2705 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2706 % uipathfn(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2707 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2708 ret = 1
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2709 for f in added:
38353
89db59e5cf3e remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38348
diff changeset
2710 progress.increment()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2711 warnings.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2712 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2713 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
2714 b" (use 'hg forget' to undo add)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2715 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2716 % uipathfn(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2717 )
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2718 ret = 1
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38353
diff changeset
2719 progress.complete()
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2720
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2721 list = sorted(list)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2722 progress = ui.makeprogress(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2723 _(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
2724 )
28608
62e73d42bd14 remove: add progress support
timeless <timeless@mozdev.org>
parents: 28607
diff changeset
2725 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
2726 if ui.verbose or not m.exact(f):
38353
89db59e5cf3e remove: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38348
diff changeset
2727 progress.increment()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2728 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2729 _(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
2730 )
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38353
diff changeset
2731 progress.complete()
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2732
37153
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2733 if not dryrun:
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2734 with repo.wlock():
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2735 if not after:
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2736 for f in list:
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2737 if f in added:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2738 continue # we never unlink added files on remove
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2739 rmdir = repo.ui.configbool(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2740 b'experimental', b'removeemptydirs'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2741 )
38497
da2a7d8354b2 unlinkpath: make empty directory removal optional (issue5901) (issue5826)
Kyle Lippincott <spectral@google.com>
parents: 38465
diff changeset
2742 repo.wvfs.unlinkpath(f, ignoremissing=True, rmdir=rmdir)
37153
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37106
diff changeset
2743 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
2744
28607
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2745 if warn:
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2746 for warning in warnings:
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2747 ui.warn(warning)
a88959ae5938 remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents: 28601
diff changeset
2748
23289
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2749 return ret
ae5d0a22ee7e remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23258
diff changeset
2750
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2751
42494
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2752 def _catfmtneedsdata(fm):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2753 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
2754
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2755
35662
91f0979f16c0 cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35645
diff changeset
2756 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
2757 """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
2758
91f0979f16c0 cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35645
diff changeset
2759 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
2760 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
2761
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2762 # 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
2763 # wasn't requested.
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2764 data = b''
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2765 if _catfmtneedsdata(fm):
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2766 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
2767 if decode:
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2768 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
2769 fm.startitem()
38540
b1bbff1dd99a cat: add support for log-like template keywords and functions
Yuya Nishihara <yuya@tcha.org>
parents: 38497
diff changeset
2770 fm.context(ctx=ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2771 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
2772 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
2773
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2774
32610
746e12a767b3 cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents: 32609
diff changeset
2775 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
2776 err = 1
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2777
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2778 def write(path):
32610
746e12a767b3 cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents: 32609
diff changeset
2779 filename = None
32608
7f4435078a8f cat: stop using makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents: 32573
diff changeset
2780 if fntemplate:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2781 filename = makefilename(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2782 ctx, fntemplate, pathname=os.path.join(prefix, path)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2783 )
35048
407ec7f3ff02 cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents: 35037
diff changeset
2784 # 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
2785 try:
407ec7f3ff02 cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents: 35037
diff changeset
2786 os.makedirs(os.path.dirname(filename))
407ec7f3ff02 cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents: 35037
diff changeset
2787 except OSError:
407ec7f3ff02 cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents: 35037
diff changeset
2788 pass
37597
d110167610db formatter: carry opts to file-based formatters by basefm
Yuya Nishihara <yuya@tcha.org>
parents: 37470
diff changeset
2789 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
2790 _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
2791
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2792 # 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
2793 # 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
2794 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
2795 file = matcher.files()[0]
30350
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2796 mfl = repo.manifestlog
24718
a4191e0c728f cat: use ctx.manifestnode() in place of ctx._changeset[0]
Yuya Nishihara <yuya@tcha.org>
parents: 24711
diff changeset
2797 mfnode = ctx.manifestnode()
30350
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2798 try:
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2799 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
2800 if _catfmtneedsdata(basefm):
45073
a56ba57c837d scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 45040
diff changeset
2801 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)])
30350
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2802 write(file)
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2803 return 0
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2804 except KeyError:
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30342
diff changeset
2805 pass
21040
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2806
42494
561cd02c58ff cat: don't prefetch files unless the output requires it
Matt Harbison <matt_harbison@yahoo.com>
parents: 42489
diff changeset
2807 if _catfmtneedsdata(basefm):
45073
a56ba57c837d scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 45040
diff changeset
2808 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
2809
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37756
diff changeset
2810 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
2811 write(abs)
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2812 err = 0
21041
a2cc3c08c3ac cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 21040
diff changeset
2813
41674
28ce9184d495 cat: respect ui.relative-paths for "skipping missing subrepository"
Martin von Zweigbergk <martinvonz@google.com>
parents: 41672
diff changeset
2814 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
2815 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
2816 sub = ctx.sub(subpath)
a2cc3c08c3ac cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 21040
diff changeset
2817 try:
28017
d3f1b7ee5e70 match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 27985
diff changeset
2818 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
2819 subprefix = os.path.join(prefix, subpath)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2820 if not sub.cat(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2821 submatch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2822 basefm,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2823 fntemplate,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2824 subprefix,
50407
4fafc6642bee cat: drop unnecessary internal roundtrip of kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50263
diff changeset
2825 **opts,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2826 ):
21041
a2cc3c08c3ac cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 21040
diff changeset
2827 err = 0
a2cc3c08c3ac cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 21040
diff changeset
2828 except error.RepoLookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2829 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2830 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2831 )
21041
a2cc3c08c3ac cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 21040
diff changeset
2832
21040
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2833 return err
bdf5ed5246d2 cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents: 21036
diff changeset
2834
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2835
50085
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2836 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
2837 """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
2838
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2839 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
2840 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
2841 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
2842
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2843 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
2844 - 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
2845 "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
2846 - 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
2847 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
2848
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2849 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
2850 - 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
2851 `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
2852 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
2853 - 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
2854 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
2855 `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
2856 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
2857 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
2858 - 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
2859 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
2860
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 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
2862 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
2863
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2864 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
2865 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
2866
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2867 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
2868 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
2869 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
2870 `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
2871 hack.
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2872
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2873 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
2874 - 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
2875 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
2876 - 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
2877 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
2878 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
2879 - 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
2880 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
2881
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2882 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
2883 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
2884 settled."""
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2885
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2886 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
2887 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
2888 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
2889 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
2890 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
2891
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2892 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
2893 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
2894 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
2895 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
2896
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2897 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
2898 """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
2899
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2900 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
2901 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
2902
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2903 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
2904 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
2905 """
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2906 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
2907 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
2908 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
2909 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
2910 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
2911 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
2912 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
2913 )
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._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
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 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
2917 """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
2918
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2919 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
2920 (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
2921 """
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2922 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
2923 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
2924 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
2925
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2926 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
2927 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
2928 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
2929 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
2930 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
2931
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2932
5034
c0417a319e39 commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents: 4965
diff changeset
2933 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
2934 '''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
2935 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
2936 if date:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2937 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
2938
50085
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2939 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
2940 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
2941 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
2942
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50084
diff changeset
2943 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
2944 # 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
2945 # 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
2946 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
2947 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
2948 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
2949 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
2950 legacyrelativevalue=relative,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2951 )
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
2952 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
2953 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
2954 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
2955 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
2956 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
2957 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
2958 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
2959 )
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
2960 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
2961 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
2962 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
2963 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
2964 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
2965
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2966
29830
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2967 def samefile(f, ctx1, ctx2):
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2968 if f in ctx1.manifest():
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2969 a = ctx1.filectx(f)
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2970 if f in ctx2.manifest():
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2971 b = ctx2.filectx(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2972 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
2973 else:
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2974 return False
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 f not in ctx2.manifest()
2cec6eaf3610 cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29813
diff changeset
2977
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2978
50145
ce60c8d4ac87 typing: add type hints to argument checking functions in cmdutil
Matt Harbison <matt_harbison@yahoo.com>
parents: 50098
diff changeset
2979 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
2980 # avoid cycle context -> subrepo -> cmdutil
28322
ebd0e86bdf89 cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28313
diff changeset
2981 from . import context
25930
221491bbaf7e cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25795
diff changeset
2982
23101
b564330d4b1f amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents: 22951
diff changeset
2983 # 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
2984 # 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
2985 if obsolete.isenabled(repo, obsolete.createmarkersopt):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
2986 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
2987
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2988 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
2989 base = old.p1()
55982f62651f commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents: 16430
diff changeset
2990
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2991 with repo.wlock(), repo.lock(), repo.transaction(b'amend'):
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
2992 # Participating changesets:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
2993 #
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
2994 # 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
2995 # | to go into amending commit
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
2996 # |
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
2997 # old o - changeset to amend
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
2998 # |
34073
7e9ccb1670e3 amend: rectify comment
Saurabh Singh <singhsrb@fb.com>
parents: 34072
diff changeset
2999 # 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
3000 wctx = repo[None]
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3001
35207
5cc14407a739 amend: make a copy of "extra" to avoid mutating an input
Martin von Zweigbergk <martinvonz@google.com>
parents: 35184
diff changeset
3002 # 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
3003 extra = extra.copy()
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3004 # Update extra dict from amended commit (e.g. to preserve graft
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3005 # source)
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3006 extra.update(old.extra())
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3007
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3008 # 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
3009 extra.update(wctx.extra())
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3010
42936
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
3011 # 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
3012 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
3013 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
3014
e4803231f538 amend: add option to update to the current user
Matt Harbison <matt_harbison@yahoo.com>
parents: 42925
diff changeset
3015 date = old.date()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3016 if opts.get(b'date'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3017 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
3018 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
3019
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3020 if len(old.parents()) > 1:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3021 # ctx.files() isn't reliable for merges, so fall back to the
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3022 # 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
3023 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
3024 files = set(st.modified) | set(st.added) | set(st.removed)
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3025 else:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3026 files = set(old.files())
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3027
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3028 # 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
3029 # was specified.
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3030 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
3031 relative = scmutil.anypats(pats, opts)
41696
b81ecf3571d5 addremove: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41694
diff changeset
3032 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
3033 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
3034 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
3035 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
3036 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
3037 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
3038 )
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 raise error.Abort(m)
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3040
34978
691524f0bbf6 amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents: 34975
diff changeset
3041 # 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
3042 # 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
3043 # 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
3044 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
3045 subs, commitsubs, newsubstate = subrepoutil.precommit(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3046 ui, wctx, wctx._status, matcher
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3047 )
34978
691524f0bbf6 amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents: 34975
diff changeset
3048 # 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
3049 assert not commitsubs
691524f0bbf6 amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents: 34975
diff changeset
3050 if subs:
36047
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35993
diff changeset
3051 subrepoutil.writestate(repo, newsubstate)
34978
691524f0bbf6 amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents: 34975
diff changeset
3052
44915
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44772
diff changeset
3053 ms = mergestatemod.mergestate.read(repo)
35853
eeb87b24aea7 amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents: 35746
diff changeset
3054 mergeutil.checkunresolved(ms)
eeb87b24aea7 amend: abort if unresolved merge conflicts found (issue5805)
Yuya Nishihara <yuya@tcha.org>
parents: 35746
diff changeset
3055
44470
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44460
diff changeset
3056 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
3057
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3058 changes = len(filestoamend) > 0
48815
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3059 changeset_copies = (
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3060 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
3061 != b'filelog-only'
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3062 )
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3063 # 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
3064 # 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
3065 # filectxs from the old commit.
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3066 if changes or changeset_copies:
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3067 # 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
3068 copied = copies.pathcopies(base, wctx)
df68d64b0d50 amend: stop specifying matcher, get all copies in wctx
Kyle Lippincott <spectral@google.com>
parents: 48841
diff changeset
3069 if old.p2():
df68d64b0d50 amend: stop specifying matcher, get all copies in wctx
Kyle Lippincott <spectral@google.com>
parents: 48841
diff changeset
3070 copied.update(copies.pathcopies(old.p2(), wctx))
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3071
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3072 # 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
3073 # 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
3074 # copy, then those two files are the same and
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3075 # 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
3076 # 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
3077 # deleted), old X must be preserved.
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3078 files.update(filestoamend)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3079 files = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3080 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3081 for f in files
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3082 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
3083 ]
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3084
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3085 def filectxfn(repo, ctx_, path):
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3086 try:
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3087 # 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
3088 # 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
3089 # 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
3090 # 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
3091 # 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
3092 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
3093 # 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
3094 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
3095 return None
48815
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3096 fctx = wctx[path]
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3097 else:
877d7e1a4223 amend: fix amend with copies in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
3098 fctx = old.filectx(path)
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3099 flags = fctx.flags()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3100 mctx = context.memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3101 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3102 ctx_,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3103 fctx.path(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3104 fctx.data(),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3105 islink=b'l' in flags,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3106 isexec=b'x' in flags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3107 copysource=copied.get(path),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3108 )
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3109 return mctx
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3110 except KeyError:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3111 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3112
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3113 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3114 ui.note(_(b'copying changeset %s to %s\n') % (old, base))
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3115
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3116 # Use version of files as in the old cset
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3117 def filectxfn(repo, ctx_, path):
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3118 try:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3119 return old.filectx(path)
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3120 except KeyError:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3121 return None
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3122
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3123 # 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
3124 # the message of the changeset to amend.
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3125 message = logmessage(ui, opts)
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3126
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3127 editform = mergeeditform(old, b'commit.amend')
34102
e8a7c1a0565a cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents: 34100
diff changeset
3128
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3129 if not message:
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3130 message = old.description()
42418
64ed405dd342 commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents: 42297
diff changeset
3131 # 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
3132 # 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
3133 # 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
3134 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
3135 else:
64ed405dd342 commit: respect --no-edit in combination with --amend
Kyle Lippincott <spectral@google.com>
parents: 42297
diff changeset
3136 # 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
3137 # --edit.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3138 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
3139 editor = getcommiteditor(edit=doedit, editform=editform)
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3140
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3141 pureextra = extra.copy()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3142 extra[b'amend_source'] = old.hex()
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3143
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3144 new = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3145 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3146 parents=[base.node(), old.p2().node()],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3147 text=message,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3148 files=files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3149 filectxfn=filectxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3150 user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3151 date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3152 extra=extra,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3153 editor=editor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3154 )
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3155
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3156 newdesc = changelog.stripdesc(new.description())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3157 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3158 (not changes)
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3159 and newdesc == old.description()
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3160 and user == old.user()
41127
cffa8e0ba77a amend: add boolean to ignore date-only change
Yuya Nishihara <yuya@tcha.org>
parents: 41126
diff changeset
3161 and (date == old.date() or datemaydiffer)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3162 and pureextra == old.extra()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3163 ):
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3164 # nothing changed. continuing here would create a new node
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3165 # 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
3166 #
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3167 # 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
3168 return old.node()
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 33362
diff changeset
3169
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
3170 commitphase = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3171 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
3172 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
3173 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
3174 commitphase = phases.draft
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
3175 newid = repo.commitctx(new)
45408
6ba7190ff863 commit: clear mergestate also with --amend (issue6304)
Martin von Zweigbergk <martinvonz@google.com>
parents: 45395
diff changeset
3176 ms.reset()
34072
ae92e5c0441c amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents: 34046
diff changeset
3177
50023
7a8bfc05b691 dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
3178 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
3179 # 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
3180 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
3181
3c0efa0eeea6 amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47603
diff changeset
3182 # 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
3183 # 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
3184 # 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
3185 # 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
3186 # 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
3187 dirstate = repo.dirstate
3c0efa0eeea6 amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47603
diff changeset
3188
3c0efa0eeea6 amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47603
diff changeset
3189 # 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
3190 # 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
3191 # 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
3192 # 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
3193 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
3194 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
3195 dirstate.update_file(
4d1ae9cba551 amend: use `update_file` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47707
diff changeset
3196 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
3197 )
47608
3c0efa0eeea6 amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47603
diff changeset
3198
3c0efa0eeea6 amend: adjust the dirstate within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47603
diff changeset
3199 # 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
3200 # 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
3201 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
3202 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
3203 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
3204
46778
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3205 mapping = {old.node(): (newid,)}
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3206 obsmetadata = None
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3207 if opts.get(b'note'):
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3208 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
3209 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
3210 scmutil.cleanupnodes(
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3211 repo,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3212 mapping,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3213 b'amend',
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3214 metadata=obsmetadata,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3215 fixphase=True,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3216 targetphase=commitphase,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3217 backup=backup,
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3218 )
62c2857a174b amend: mark commit obsolete after moving working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 46364
diff changeset
3219
16458
55982f62651f commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents: 16430
diff changeset
3220 return newid
55982f62651f commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents: 16430
diff changeset
3221
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3222
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3223 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
3224 if ctx.description():
223000a687b0 commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents: 8390
diff changeset
3225 return ctx.description()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3226 return commitforceeditor(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3227 repo, ctx, subs, editform=editform, unchangedmessagedetection=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3228 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3229
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 def commitforceeditor(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3232 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3233 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3234 subs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3235 finishdesc=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3236 extramsg=None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3237 editform=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3238 unchangedmessagedetection=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3239 ):
21923
e582e20cd3e6 commiteditor: refactor default extramsg
Matt Mackall <mpm@selenic.com>
parents: 21878
diff changeset
3240 if not extramsg:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3241 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
3242
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3243 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
3244 forms.insert(0, b'changeset')
26742
bec1a579ebc4 commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents: 26639
diff changeset
3245 templatetext = None
22012
9d92b9d1e282 cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22011
diff changeset
3246 while forms:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3247 ref = b'.'.join(forms)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3248 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
3249 templatetext = committext = buildcommittemplate(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3250 repo, ctx, subs, extramsg, ref
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3251 )
22012
9d92b9d1e282 cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22011
diff changeset
3252 break
9d92b9d1e282 cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22011
diff changeset
3253 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
3254 else:
5375ba75df40 cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21923
diff changeset
3255 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
3256
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3257 # 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
3258 olddir = encoding.getcwd()
21869
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3259 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
3260
9f9ec4abe700 cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26746
diff changeset
3261 # 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
3262 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
3263 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
3264 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
3265
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3266 editortext = repo.ui.edit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3267 committext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3268 ctx.user(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3269 ctx.extra(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3270 editform=editform,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3271 pending=pending,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3272 repopath=repo.path,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3273 action=b'commit',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3274 )
30724
ee47e951c6f9 commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents: 30720
diff changeset
3275 text = editortext
30703
5c85c93cdd61 cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents: 30695
diff changeset
3276
5c85c93cdd61 cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents: 30695
diff changeset
3277 # 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
3278 # to display the diff)
30724
ee47e951c6f9 commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents: 30720
diff changeset
3279 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
3280 if stripbelow:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3281 text = text[: stripbelow.start()]
30724
ee47e951c6f9 commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents: 30720
diff changeset
3282
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3283 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
3284 os.chdir(olddir)
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3285
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3286 if finishdesc:
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3287 text = finishdesc(text)
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3288 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
3289 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
3290 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
3291 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
3292
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3293 return text
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3294
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3295
32896
a3a36bcf122e commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents: 32895
diff changeset
3296 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
3297 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
3298 spec = formatter.reference_templatespec(ref)
35993
386c1e45e671 logcmdutil: drop default arguments from changesetdisplayer/templater() calls
Yuya Nishihara <yuya@tcha.org>
parents: 35966
diff changeset
3299 t = logcmdutil.changesettemplater(ui, repo, spec)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3300 t.t.cache.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3301 (k, templater.unquotestring(v))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3302 for k, v in repo.ui.configitems(b'committemplate')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3303 )
22013
de5cee8ba088 cmdutil: use '[committemplate]' section like as map file for style definition
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22012
diff changeset
3304
21924
5375ba75df40 cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21923
diff changeset
3305 if not extramsg:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3306 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
3307
5375ba75df40 cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21923
diff changeset
3308 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
3309 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
3310 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
3311
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3312
26426
0486c16ce621 cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents: 26389
diff changeset
3313 def hgprefix(msg):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3314 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
3315
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3316
21869
e353fac7db26 cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21832
diff changeset
3317 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
3318 edittext = []
8707
0550dfe4fca1 commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents: 8680
diff changeset
3319 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
3320 if ctx.description():
223000a687b0 commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents: 8390
diff changeset
3321 edittext.append(ctx.description())
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3322 edittext.append(b"")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3323 edittext.append(b"") # Empty line between message and comments.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3324 edittext.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3325 hgprefix(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3326 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3327 b"Enter commit message."
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3328 b" Lines beginning with 'HG:' are removed."
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3329 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3330 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3331 )
26426
0486c16ce621 cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents: 26389
diff changeset
3332 edittext.append(hgprefix(extramsg))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3333 edittext.append(b"HG: --")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3334 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
3335 if ctx.p2():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3336 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
3337 if ctx.branch():
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 '%s'") % ctx.branch()))
24986
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24955
diff changeset
3339 if bookmarks.isactivewdirparent(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3340 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
3341 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
3342 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
3343 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
3344 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
3345 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
3346 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
3347 edittext.append(b"")
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3348
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3349 return b"\n".join(edittext)
14297
2daa5179e73f commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents: 14291
diff changeset
3350
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3351
50848
489268c8ee7e cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50587
diff changeset
3352 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
3353 ctx = repo[node]
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3354 parents = ctx.parents()
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3355
45831
976b26bdd0d8 commit: warn the user when a commit already exists
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 45819
diff changeset
3356 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
3357 # 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
3358 # 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
3359 # 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
3360 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
3361 elif (
50848
489268c8ee7e cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50587
diff changeset
3362 not opts.get('amend')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3363 and bheads
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3364 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
3365 and not any(
45040
0c40d2d151cb cleanup: use slightly more meaningful name for temporary variable
Manuel Jacob <me@manueljacob.de>
parents: 45039
diff changeset
3366 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
3367 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3368 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3369 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
3370 # 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
3371 # 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
3372 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3373 # 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
3374 # N: null or no parent
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3375 # 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
3376 # 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
3377 # 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
3378 # 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
3379 # 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
3380 # 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
3381 # printed anyway.
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3382 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3383 # Par Msg Comment
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3384 # 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
3385 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3386 # 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
3387 # 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
3388 # H N n usual case
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3389 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3390 # 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
3391 # C B y branch merge
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3392 # 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
3393 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3394 # 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
3395 # 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
3396 #
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3397 # 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
3398
50848
489268c8ee7e cmdutil: migrate `opts` on commitstatus() to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50587
diff changeset
3399 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
3400 for r in parents:
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3401 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
3402 repo.ui.status(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3403 _(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
3404 )
18688
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3405
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3406 if repo.ui.debugflag:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3407 repo.ui.write(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3408 _(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
3409 )
18688
79107fad06aa commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents: 18648
diff changeset
3410 elif repo.ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3411 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
3412
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3413
27943
02c5f8ad00ac commit: factor the post commit status check into a cmdutil method
Matt Harbison <matt_harbison@yahoo.com>
parents: 27868
diff changeset
3414 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
3415 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
3416
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3417
45395
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45392
diff changeset
3418 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
3419 opts = pycompat.byteskwargs(opts)
45395
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45392
diff changeset
3420 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
3421 node = ctx.node()
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3422
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3423 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
3424 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
3425 parent = p2
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3426
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3427 # 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
3428 # 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
3429 # 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
3430 # 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
3431 # 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
3432
21575
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3433 # `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
3434 # The mapping is in the form:
39314
6b81d2ff118f cmdutil: fix typo in revert()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 39305
diff changeset
3435 # <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
3436 names = {}
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3437 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
3438
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
3439 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
3440 ## filling of the `names` mapping
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3441 # 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
3442
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3443 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
3444 wctx = repo[None]
bab983bb6fd1 revert: define 'wctx' a little earlier and use it more
Martin von Zweigbergk <martinvonz@google.com>
parents: 24438
diff changeset
3445 m = scmutil.match(wctx, pats, opts)
24479
871485bd03fd revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents: 24476
diff changeset
3446
871485bd03fd revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents: 24476
diff changeset
3447 # we'll need this later
871485bd03fd revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents: 24476
diff changeset
3448 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
3449
24450
961790c35b4f revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents: 24449
diff changeset
3450 if not m.always():
32401
7b3c27af90c2 cmdutil: use repo[None].walk instead of repo.walk
Augie Fackler <augie@google.com>
parents: 32382
diff changeset
3451 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
3452 for abs in wctx.walk(matcher):
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3453 names[abs] = m.exact(abs)
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3454
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3455 # walk target manifest to fill `names`
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 def badfn(path, msg):
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3458 if path in names:
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3459 return
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3460 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
3461 return
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3462 path_ = path + b'/'
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3463 for f in names:
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3464 if f.startswith(path_):
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3465 return
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3466 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
3467
25439
aaede04c0ba6 revert: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25438
diff changeset
3468 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
3469 if abs not in names:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3470 names[abs] = m.exact(abs)
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3471
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3472 # Find status of all file in `names`.
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3473 m = scmutil.matchfiles(repo, names)
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3474
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3475 changes = repo.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3476 node1=node, match=m, unknown=True, ignored=True, clean=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3477 )
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3478 else:
24450
961790c35b4f revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents: 24449
diff changeset
3479 changes = repo.status(node1=node, match=m)
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3480 for kind in changes:
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3481 for abs in kind:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3482 names[abs] = m.exact(abs)
22573
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3483
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3484 m = scmutil.matchfiles(repo, names)
f528bfb25b45 revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents: 22551
diff changeset
3485
23374
aa0a430d9c75 revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents: 23327
diff changeset
3486 modified = set(changes.modified)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3487 added = set(changes.added)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3488 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
3489 _deleted = set(changes.deleted)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3490 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
3491 unknown.update(changes.ignored)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3492 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
3493 modadded = set()
22185
afead12e724b revert: triage "deleted" files into more appropriate categories
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22173
diff changeset
3494
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 24176
diff changeset
3495 # 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
3496 # 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
3497 # 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
3498 # 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
3499 if parent == node:
530390629842 revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22154
diff changeset
3500 dsmodified = modified
530390629842 revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22154
diff changeset
3501 dsadded = added
530390629842 revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22154
diff changeset
3502 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
3503 # 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
3504 localchanges = dsmodified | dsadded
22155
530390629842 revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22154
diff changeset
3505 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
3506 else:
530390629842 revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22154
diff changeset
3507 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
3508 dsmodified = set(changes.modified)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3509 dsadded = set(changes.added)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3510 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
3511 # 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
3512 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
3513
22188
0ad619c5e1a4 revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22187
diff changeset
3514 # 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
3515 clean |= dsremoved - removed
0ad619c5e1a4 revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22187
diff changeset
3516 dsremoved &= removed
0ad619c5e1a4 revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22187
diff changeset
3517 # 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
3518 removed -= dsremoved
0ad619c5e1a4 revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22187
diff changeset
3519
22610
0f323ed8effd revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22609
diff changeset
3520 modadded = added & dsmodified
0f323ed8effd revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22609
diff changeset
3521 added -= modadded
0f323ed8effd revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22609
diff changeset
3522
22190
55308ab8117c revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22189
diff changeset
3523 # tell newly modified apart.
55308ab8117c revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22189
diff changeset
3524 dsmodified &= modified
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3525 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
3526 modified -= dsmodified
55308ab8117c revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22189
diff changeset
3527
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
3528 # 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
3529 # 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
3530 # that purpose.
22208
d3659b3795e9 revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22205
diff changeset
3531 dsadded = added
d3659b3795e9 revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22205
diff changeset
3532
22209
06fbd9518bc5 revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22208
diff changeset
3533 # 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
3534 # 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
3535 if p2 != repo.nullid:
31149
c22253c4c1b8 revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents: 31095
diff changeset
3536 mergeadd = set(dsmodified)
c22253c4c1b8 revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents: 31095
diff changeset
3537 for path in dsmodified:
c22253c4c1b8 revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents: 31095
diff changeset
3538 if path in mf:
c22253c4c1b8 revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents: 31095
diff changeset
3539 mergeadd.remove(path)
22209
06fbd9518bc5 revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22208
diff changeset
3540 dsadded |= mergeadd
06fbd9518bc5 revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22208
diff changeset
3541 dsmodified -= mergeadd
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3542
21575
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3543 # 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
3544 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
3545 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
3546 # 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
3547 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
3548 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
3549 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
3550 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
3551 ):
22154
fc422de25773 revert: prefix variable names for dirstate status with "ds"
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22153
diff changeset
3552 dsremoved.add(src)
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3553 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
3554
31167
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3555 # 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
3556 deladded = set(_deleted)
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3557 for path in _deleted:
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3558 if path in mf:
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3559 deladded.remove(path)
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3560 deleted = _deleted - deladded
accdd5e62066 revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 31149
diff changeset
3561
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
3562 # 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
3563 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
3564 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
3565 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
3566 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
3567 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
3568
22490
bcab7bc7280e revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22489
diff changeset
3569 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
3570 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
3571 dsadded.add(abs)
bcab7bc7280e revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22489
diff changeset
3572 deladded -= dsadded
bcab7bc7280e revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22489
diff changeset
3573
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
3574 # 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
3575 # 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
3576 # 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
3577 # 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
3578 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
3579 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
3580 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
3581 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
3582 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
3583 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
3584
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 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
3586 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
3587 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
3588 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
3589 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
3590 dsremoved -= dsremovunk
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3591
21575
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3592 # 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
3593 # (<list of file>, message>) tuple
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3594 actions = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3595 b'revert': ([], _(b'reverting %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3596 b'add': ([], _(b'adding %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3597 b'remove': ([], _(b'removing %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3598 b'drop': ([], _(b'removing %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3599 b'forget': ([], _(b'forgetting %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3600 b'undelete': ([], _(b'undeleting %s\n')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3601 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
3602 b'unknown': (None, _(b'file not managed: %s\n')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3603 }
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3604
22608
bf0ecb224316 revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22588
diff changeset
3605 # "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
3606 # 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
3607 # 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
3608 # These values are ordered for comparison purposes
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3609 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
3610 backup = 2 # unconditionally do backup
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3611 check = 1 # check if the existing file differs from target
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3612 discard = 0 # never do backup
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3613 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
3614 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
3615 if interactive:
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3616 dsmodifiedbackup = backupinteractive
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3617 else:
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3618 dsmodifiedbackup = backup
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3619 tobackup = set()
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3620
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3621 backupanddel = actions[b'remove']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3622 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
3623 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
3624
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3625 disptable = (
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3626 # dispatch table:
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3627 # 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
3628 # action
fc8bc2787528 revert: move manifest membership condition outside of the loop
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22013
diff changeset
3629 # make backup
22371
81ad62defef5 revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22370
diff changeset
3630 ## 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
3631 # 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
3632 (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
3633 # 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
3634 (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
3635 # 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
3636 (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
3637 # Added since target
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3638 (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
3639 # Added in working directory
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3640 (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
3641 # Added since target, have local modification
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3642 (modadded, backupanddel, backup),
22490
bcab7bc7280e revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22489
diff changeset
3643 # 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
3644 (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
3645 # 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
3646 (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
3647 # 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
3648 (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
3649 # 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
3650 (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
3651 # 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
3652 (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
3653 ## 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
3654 # File with no modification
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3655 (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
3656 # Existing file, not tracked anywhere
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3657 (unknown, actions[b'unknown'], discard),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3658 )
16304
a740fa28d718 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 16283
diff changeset
3659
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3660 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
3661 # 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
3662 target = repo.wjoin(abs)
21575
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3663 # 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
3664 # 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
3665 # 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
3666 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
3667 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
3668 continue
22233
4ab61b24e20c revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22232
diff changeset
3669 if xlist is not None:
4ab61b24e20c revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22232
diff changeset
3670 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
3671 if dobackup:
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3672 # 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
3673 # .orig files (issue4793)
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3674 if dobackup == backupinteractive:
1b38cfde9530 revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents: 29427
diff changeset
3675 tobackup.add(abs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3676 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
3677 absbakname = scmutil.backuppath(ui, repo, abs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3678 bakname = os.path.relpath(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3679 absbakname, start=repo.root
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3680 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3681 ui.note(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3682 _(b'saving current version of %s as %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3683 % (uipathfn(abs), uipathfn(bakname))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3684 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3685 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
3686 if interactive:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3687 util.copyfile(target, absbakname)
24475
06cbff4674a3 revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents: 24472
diff changeset
3688 else:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3689 util.rename(target, absbakname)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3690 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
3691 if ui.verbose or not exact:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3692 ui.status(msg % uipathfn(abs))
22233
4ab61b24e20c revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22232
diff changeset
3693 elif exact:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3694 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
3695 break
21575
8262c2a39ab8 revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21574
diff changeset
3696
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3697 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
3698 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
3699 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
3700 prefetch = scmutil.prefetchfiles
45073
a56ba57c837d scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 45040
diff changeset
3701 matchfiles = scmutil.matchfiles(
a56ba57c837d scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 45040
diff changeset
3702 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
3703 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3704 prefetch(
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3705 repo,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3706 [(ctx.rev(), matchfiles)],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3707 )
42071
db72f9f6580e interactive: do not prompt about files given in command line
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 42057
diff changeset
3708 match = scmutil.match(repo[None], pats)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3709 _performrevert(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3710 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3711 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3712 names,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3713 uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3714 actions,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3715 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3716 interactive,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3717 tobackup,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3718 )
19129
bd19587a3347 revert: ensure that copies and renames are honored (issue3920)
Bryan O'Sullivan <bryano@fb.com>
parents: 19024
diff changeset
3719
24134
afed5d2e7985 revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents: 24064
diff changeset
3720 if targetsubs:
afed5d2e7985 revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents: 24064
diff changeset
3721 # 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
3722 for sub in targetsubs:
24463
06d199e66bbc revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents: 24455
diff changeset
3723 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3724 wctx.sub(sub).revert(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3725 ctx.substate[sub], *pats, **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3726 )
24463
06d199e66bbc revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents: 24455
diff changeset
3727 except KeyError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3728 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3729 b"subrepository '%s' does not exist in %s!"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3730 % (sub, short(ctx.node()))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3731 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3732
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 def _performrevert(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3735 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3736 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3737 names,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3738 uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3739 actions,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3740 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3741 interactive=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3742 tobackup=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3743 ):
21576
33395a7e5527 revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21575
diff changeset
3744 """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
3745
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3746 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
3747 the imminent revert.
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3748
21024
7731a2281cf0 spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents: 20790
diff changeset
3749 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
3750 """
45395
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45392
diff changeset
3751 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
3752 node = ctx.node()
27985
79139c7a88bd revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents: 27973
diff changeset
3753 excluded_files = []
79139c7a88bd revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents: 27973
diff changeset
3754
20571
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3755 def checkout(f):
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3756 fc = ctx[f]
25755
72d395e399c1 cmdutil: remove useless dirstate.normallookup() invocation in revert()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 25739
diff changeset
3757 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
3758
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3759 def doremove(f):
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3760 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3761 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
3762 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
3763 except OSError:
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3764 pass
47602
8f0c3533e28c revert: use `set_untracked` when performing a revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47596
diff changeset
3765 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
3766
39432
cb70501d8b71 revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 39431
diff changeset
3767 def prntstatusmsg(action, f):
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3768 exact = names[f]
39432
cb70501d8b71 revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 39431
diff changeset
3769 if repo.ui.verbose or not exact:
41618
7068c6b0114b revert: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41610
diff changeset
3770 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
3771
33647
377e8ddaebef pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents: 33616
diff changeset
3772 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
3773 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
3774 if interactive:
30539
74013a831872 style: avoid an unnecessary line split
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30528
diff changeset
3775 choice = repo.ui.promptchoice(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3776 _(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
3777 )
27985
79139c7a88bd revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents: 27973
diff changeset
3778 if choice == 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3779 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
3780 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
3781 else:
36232
39b3aab6231e revert: use an exact matcher in interactive diff selection (issue5789)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 36179
diff changeset
3782 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
3783 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3784 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
3785 repo.dirstate.set_untracked(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3786 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
3787 audit_path(f)
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3788 if interactive:
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3789 choice = repo.ui.promptchoice(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3790 _(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
3791 )
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3792 if choice == 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3793 prntstatusmsg(b'remove', f)
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3794 doremove(f)
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3795 else:
36232
39b3aab6231e revert: use an exact matcher in interactive diff selection (issue5789)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 36179
diff changeset
3796 excluded_files.append(f)
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3797 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3798 prntstatusmsg(b'remove', f)
30541
66b162fa3ffa revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30540
diff changeset
3799 doremove(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3800 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
3801 audit_path(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3802 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
3803 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
3804
48432
9f1b9e128788 dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48412
diff changeset
3805 # 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
3806 # 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
3807 # 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
3808 # 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
3809 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
3810
9f1b9e128788 dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48412
diff changeset
3811 def normal(filename):
9f1b9e128788 dirstate: do no use `set_clean` in revert
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48412
diff changeset
3812 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
3813
25259
5b05f10c5024 revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents: 25258
diff changeset
3814 newlyaddedandmodifiedfiles = set()
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3815 if interactive:
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3816 # 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
3817 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
3818 m = scmutil.matchfiles(repo, torevert)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3819 diffopts = patch.difffeatureopts(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3820 repo.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3821 whitespace=True,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3822 section=b'commands',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3823 configprefix=b'revert.interactive.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3824 )
25258
f37a69ec3f47 revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents: 25257
diff changeset
3825 diffopts.nodates = True
f37a69ec3f47 revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents: 25257
diff changeset
3826 diffopts.git = True
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3827 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
3828 if node == parent:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3829 if repo.ui.configbool(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3830 b'experimental', b'revert.interactive.select-to-keep'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3831 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3832 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
3833 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3834 operation = b'discard'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3835
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3836 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
3837 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
3838 else:
25424
69609f43c752 revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents: 25358
diff changeset
3839 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
3840 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
3841
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3842 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3843 chunks, opts = recordfilter(
47565
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
3844 repo.ui, original_headers, match, operation=operation
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3845 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3846 if operation == b'discard':
25424
69609f43c752 revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents: 25358
diff changeset
3847 chunks = patch.reversehunks(chunks)
69609f43c752 revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents: 25358
diff changeset
3848
48411
6a454e7053a1 errors: return more detailed errors when failing to parse or apply patch
Martin von Zweigbergk <martinvonz@google.com>
parents: 48258
diff changeset
3849 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
3850 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
3851 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
3852 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
3853
42862
3cf091843b4f split: handle partial commit of renames when doing split or record (issue5723)
Kyle Lippincott <spectral@google.com>
parents: 42643
diff changeset
3854 # 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
3855 # 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
3856 # "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
3857 # 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
3858 # copied/renamed files.
47565
00ae1fb6c459 cmdutil: fix newandmodified file accounting for --interactive commits
Daniel Ploch <dploch@google.com>
parents: 47438
diff changeset
3859 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
3860 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
3861 tobackup = set()
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3862 # Apply changes
28861
86db5cb55d46 pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents: 28837
diff changeset
3863 fp = stringio()
39441
1cbe19eb496d revert: stabilize status message of chunks selected interactively
Yuya Nishihara <yuya@tcha.org>
parents: 39432
diff changeset
3864 # 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
3865 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
3866 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
3867 files = set()
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3868 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
3869 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
3870 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
3871 # 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
3872 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
3873 target = repo.wjoin(abs)
41610
9e545c9a4dfe revert: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41604
diff changeset
3874 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
3875 util.copyfile(target, bakname)
cb70501d8b71 revert: fix the inconsistency of status msgs in --interactive mode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 39431
diff changeset
3876 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
3877 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
3878 files.add(abs)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3879 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
3880 checkout(abs)
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3881 c.write(fp)
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3882 dopatch = fp.tell()
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3883 fp.seek(0)
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3884 if dopatch:
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3885 try:
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3886 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
3887 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
3888 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
3889 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
3890 raise error.StateError(pycompat.bytestr(err))
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3891 del fp
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3892 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3893 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
3894 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
3895 checkout(f)
24359
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3896 if normal:
521fe8287dd5 revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents: 24358
diff changeset
3897 normal(f)
20571
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3898
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3899 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
3900 # 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
3901 if f in newlyaddedandmodifiedfiles:
9be7da341885 revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents: 49059
diff changeset
3902 continue
9be7da341885 revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents: 49059
diff changeset
3903
49097
3f6ef67e7a60 revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents: 49096
diff changeset
3904 if interactive:
3f6ef67e7a60 revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents: 49096
diff changeset
3905 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
3906 _(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
3907 )
3f6ef67e7a60 revert: ask user to confirm before tracking new file when interactive
Martin von Zweigbergk <martinvonz@google.com>
parents: 49096
diff changeset
3908 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
3909 continue
49096
9be7da341885 revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents: 49059
diff changeset
3910 prntstatusmsg(b'add', f)
9be7da341885 revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents: 49059
diff changeset
3911 checkout(f)
9be7da341885 revert: use a `continue` to reduce indentation
Martin von Zweigbergk <martinvonz@google.com>
parents: 49059
diff changeset
3912 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
3913
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3914 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
3915 if interactive:
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3916 choice = repo.ui.promptchoice(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3917 _(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
3918 )
41536
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3919 if choice == 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3920 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
3921 checkout(f)
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3922 normal(f)
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3923 else:
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3924 excluded_files.append(f)
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3925 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3926 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
3927 checkout(f)
d783c937aa53 revert: add prompt before undeleting a file in -i (issue6008)
Taapas Agrawal <taapas2897@gmail.com>
parents: 41396
diff changeset
3928 normal(f)
20571
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3929
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3930 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
3931
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3932 for f in (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3933 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
3934 ):
20571
d4893e64f300 revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20553
diff changeset
3935 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
3936 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
3937
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3938
21051
1004d3cd65fd outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21047
diff changeset
3939 # 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
3940 # 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
3941 # "findcommonoutgoing()"
1004d3cd65fd outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21047
diff changeset
3942 outgoinghooks = util.hooks()
1004d3cd65fd outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21047
diff changeset
3943
19211
3bfd7f1e7485 summary: augment output with info from extensions
Bryan O'Sullivan <bryano@fb.com>
parents: 19129
diff changeset
3944 # 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
3945 summaryhooks = util.hooks()
19474
894fd1a7c533 cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents: 19293
diff changeset
3946
21047
f0003f989e72 summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21041
diff changeset
3947 # 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
3948 #
f0003f989e72 summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21041
diff changeset
3949 # 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
3950 # (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
3951 #
f0003f989e72 summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21041
diff changeset
3952 # 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
3953 # - (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
3954 # - (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
3955 summaryremotehooks = util.hooks()
f0003f989e72 summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21041
diff changeset
3956
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3957
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
3958 def checkunfinished(repo, commit=False, skipmerge=False):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3959 """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
3960 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
3961 bailifchanged().
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3962 """
37855
79c54e7c0c52 rebase: prioritize indicating an interrupted rebase over update (issue5838)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37815
diff changeset
3963 # 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
3964 # precedence over update.
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3965 for state in statemod._unfinishedstates:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3966 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3967 state._clearable
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3968 or (commit and state._allowcommit)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3969 or state._reportonly
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3970 ):
37855
79c54e7c0c52 rebase: prioritize indicating an interrupted rebase over update (issue5838)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37815
diff changeset
3971 continue
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3972 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
3973 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
3974
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3975 for s in statemod._unfinishedstates:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3976 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3977 not s._clearable
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3978 or (commit and s._allowcommit)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3979 or (s._opname == b'merge' and skipmerge)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3980 or s._reportonly
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3981 ):
19496
607191a45f8c checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents: 19482
diff changeset
3982 continue
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3983 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
3984 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
3985
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
3986
19474
894fd1a7c533 cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents: 19293
diff changeset
3987 def clearunfinished(repo):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3988 """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
3989 that are clearable.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
3990 """
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3991 for state in statemod._unfinishedstates:
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
3992 if state._reportonly:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
3993 continue
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3994 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
3995 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
3996
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
3997 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
3998 if s._opname == b'merge' or s._reportonly:
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
3999 continue
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
4000 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
4001 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
4002
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4003
42579
b8d54f4625cb merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents: 42577
diff changeset
4004 def getunfinishedstate(repo):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4005 """Checks for unfinished operations and returns statecheck object
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4006 for it"""
42579
b8d54f4625cb merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents: 42577
diff changeset
4007 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
4008 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
4009 return state
b8d54f4625cb merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents: 42577
diff changeset
4010 return None
b8d54f4625cb merge: disallow merge abort in case of an unfinished operation (issue6160)
Taapas Agrawal <taapas2897@gmail.com>
parents: 42577
diff changeset
4011
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4012
28120
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4013 def howtocontinue(repo):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4014 """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
4015 it.
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4016
42577
ceb31d96d3ae statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42568
diff changeset
4017 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
4018 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
4019 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
4020
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4021 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
4022 a boolean.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4023 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4024 contmsg = _(b"continue: %s")
42540
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
4025 for state in statemod._unfinishedstates:
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
4026 if not state._continueflag:
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
4027 continue
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
4028 if state.isunfinished(repo):
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
4029 return contmsg % state.continuemsg(), True
33362
e48fb90f80c8 cmdutil: simplify the dirty check in howtocontinue()
Matt Harbison <matt_harbison@yahoo.com>
parents: 33334
diff changeset
4030 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
4031 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
4032 return None, None
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4033
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4034
28120
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4035 def checkafterresolved(repo):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4036 """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
4037
42577
ceb31d96d3ae statecheck: updated docstrings related to afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42568
diff changeset
4038 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
4039 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
4040
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4041 Otherwise, it will yield repo.ui.note.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4042 """
28120
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4043 msg, warning = howtocontinue(repo)
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4044 if msg is not None:
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4045 if warning:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4046 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
4047 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4048 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
4049
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4050
28120
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4051 def wrongtooltocontinue(repo, task):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4052 """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
4053 active task.
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4054
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4055 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
4056
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4057 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
4058 a hint.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
4059 """
28120
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4060 after = howtocontinue(repo)
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4061 hint = None
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4062 if after[1]:
ed4d06f180b8 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents: 28027
diff changeset
4063 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
4064 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
4065
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4066
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4067 def abortgraft(ui, repo, graftstate):
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4068 """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
4069 graft"""
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4070 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
4071 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
4072 statedata = readgraftstate(repo, graftstate)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4073 newnodes = statedata.get(b'newnodes')
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4074 if newnodes is None:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4075 # 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
4076 # the graft
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4077 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
4078
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4079 # changeset from which graft operation was started
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4080 if len(newnodes) > 0:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4081 startctx = repo[newnodes[0]].p1()
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4082 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4083 startctx = repo[b'.']
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4084 # whether to strip or not
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4085 cleanup = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4086
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4087 if newnodes:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4088 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
4089 cleanup = True
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4090 # 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
4091 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
4092 if immutable:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4093 repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4094 _(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
4095 % 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
4096 hint=_(b"see 'hg help phases' for details"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4097 )
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4098 cleanup = False
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4099
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4100 # 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
4101 desc = set(repo.changelog.descendants(newnodes))
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4102 if desc - set(newnodes):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4103 repo.ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4104 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4105 b"new changesets detected on destination "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4106 b"branch, can't strip\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4107 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4108 )
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4109 cleanup = False
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4110
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4111 if cleanup:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4112 with repo.wlock(), repo.lock():
45562
03726f5b6092 merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents: 45558
diff changeset
4113 mergemod.clean_update(startctx)
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4114 # stripping the new nodes created
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4115 strippoints = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4116 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
4117 ]
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4118 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
4119
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4120 if not cleanup:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4121 # 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
4122 startctx = repo[b'.']
45562
03726f5b6092 merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents: 45558
diff changeset
4123 mergemod.clean_update(startctx)
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4124
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4125 ui.status(_(b"graft aborted\n"))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4126 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
4127 graftstate.delete()
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4128 return 0
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4129
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4130
51304
f15cb5111a1e pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51302
diff changeset
4131 def readgraftstate(
f15cb5111a1e pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51302
diff changeset
4132 repo: Any,
f15cb5111a1e pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51302
diff changeset
4133 graftstate: statemod.cmdstate,
f15cb5111a1e pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51302
diff changeset
4134 ) -> Dict[bytes, Any]:
42568
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4135 """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
4136 try:
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4137 return graftstate.read()
f9da9d5f3f5a graft: moved abortgraft and readgraft to cmdutil
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
4138 except error.CorruptedState:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4139 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
4140 return {b'nodes': nodes}
42582
5171937ad0f9 abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents: 42579
diff changeset
4141
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42937
diff changeset
4142
42582
5171937ad0f9 abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents: 42579
diff changeset
4143 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
4144 """abort logic for aborting graft using 'hg abort'"""
42582
5171937ad0f9 abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents: 42579
diff changeset
4145 with repo.wlock():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4146 graftstate = statemod.cmdstate(repo, b'graftstate')
42582
5171937ad0f9 abort: added support for graft
Taapas Agrawal <taapas2897@gmail.com>
parents: 42579
diff changeset
4147 return abortgraft(ui, repo, graftstate)
51592
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4148
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4149
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4150 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
4151 """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
4152
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4153 This takes arguments below:
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 :modheads: change of heads by pull/unbundle
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4156 :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
4157 :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
4158 :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
4159
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4160 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
4161 """
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4162 if modheads == 0:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4163 return False
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4164 if optupdate:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4165 # avoid circular import
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4166 from . import hg
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4167
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4168 try:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4169 return hg.updatetotally(ui, repo, checkout, brev)
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4170 except error.UpdateAbort as inst:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4171 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
4172 hint = inst.hint
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4173 raise error.UpdateAbort(msg, hint=hint)
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4174 if ui.quiet:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4175 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
4176 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
4177 currentbranchheads = len(repo.branchheads())
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4178 if currentbranchheads == modheads:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4179 ui.status(
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4180 _(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
4181 )
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4182 elif currentbranchheads > 1:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4183 ui.status(
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4184 _(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
4185 )
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4186 else:
a151fd01e98c postincoming: move to cmdutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51304
diff changeset
4187 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
4188 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
4189 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
4190 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
4191
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
4192
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 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
4194 """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
4195 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
4196 # 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
4197 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
4198
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 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
4200 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
4201 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
4202 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
4203 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
4204 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
4205 _(
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 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
4207 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
4208 ),
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 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
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 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
4212 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
4213 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
4214 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
4215 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
4216 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
4217 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
4218 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
4219 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
4220 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
4221 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
4222 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
4223 )
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 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
4225 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
4226 _(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
4227 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
4228 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
4229 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
4230 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
4231 ),
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 )
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 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
4234 return modheads