Mercurial > hg
annotate mercurial/cmdutil.py @ 35959:9724f54923ec
chg: enable clang-format on all .c and .h files
Nothing in here looks awful, so I think we may as well just do it.
# skip-blame because it's just reformatting with no functionality change
Differential Revision: https://phab.mercurial-scm.org/D2058
author | Augie Fackler <augie@google.com> |
---|---|
date | Tue, 06 Feb 2018 05:24:28 -0500 |
parents | 386c1e45e671 |
children | 55e8efa2451a |
rev | line source |
---|---|
2957 | 1 # cmdutil.py - help for command processing in mercurial |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
2 # |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
7 |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
8 from __future__ import absolute_import |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
9 |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
10 import errno |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
11 import os |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
12 import re |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
13 import tempfile |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
14 |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
15 from .i18n import _ |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
16 from .node import ( |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
17 hex, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
18 nullid, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
19 nullrev, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
20 short, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
21 ) |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
22 |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
23 from . import ( |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
24 bookmarks, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
25 changelog, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
26 copies, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
27 crecord as crecordmod, |
33617
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
28 dirstateguard, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
29 encoding, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
30 error, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
31 formatter, |
35885
7625b4f7db70
cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35874
diff
changeset
|
32 logcmdutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
33 match as matchmod, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
34 obsolete, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
35 patch, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
36 pathutil, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30506
diff
changeset
|
37 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32327
diff
changeset
|
38 registrar, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
39 revlog, |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
40 rewriteutil, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
41 scmutil, |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30877
diff
changeset
|
42 smartset, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
43 templater, |
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
44 util, |
31237
1b08aca7870a
vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
45 vfs as vfsmod, |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
46 ) |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28837
diff
changeset
|
47 stringio = util.stringio |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
48 |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
49 # templates of common command options |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
50 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
51 dryrunopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
52 ('n', 'dry-run', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
53 _('do not perform actions, just print output')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
54 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
55 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
56 remoteopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
57 ('e', 'ssh', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
58 _('specify ssh command to use'), _('CMD')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
59 ('', 'remotecmd', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
60 _('specify hg command to run on the remote side'), _('CMD')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
61 ('', 'insecure', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
62 _('do not verify server certificate (ignoring web.cacerts config)')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
63 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
64 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
65 walkopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
66 ('I', 'include', [], |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
67 _('include names matching the given patterns'), _('PATTERN')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
68 ('X', 'exclude', [], |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
69 _('exclude names matching the given patterns'), _('PATTERN')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
70 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
71 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
72 commitopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
73 ('m', 'message', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
74 _('use text as commit message'), _('TEXT')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
75 ('l', 'logfile', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
76 _('read commit message from file'), _('FILE')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
77 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
78 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
79 commitopts2 = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
80 ('d', 'date', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
81 _('record the specified date as commit date'), _('DATE')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
82 ('u', 'user', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
83 _('record the specified user as committer'), _('USER')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
84 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
85 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
86 # hidden for now |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
87 formatteropts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
88 ('T', 'template', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
89 _('display with template (EXPERIMENTAL)'), _('TEMPLATE')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
90 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
91 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
92 templateopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
93 ('', 'style', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
94 _('display using template map file (DEPRECATED)'), _('STYLE')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
95 ('T', 'template', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
96 _('display with template'), _('TEMPLATE')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
97 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
98 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
99 logopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
100 ('p', 'patch', None, _('show patch')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
101 ('g', 'git', None, _('use git extended diff format')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
102 ('l', 'limit', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
103 _('limit number of changes displayed'), _('NUM')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
104 ('M', 'no-merges', None, _('do not show merges')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
105 ('', 'stat', None, _('output diffstat-style summary of changes')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
106 ('G', 'graph', None, _("show the revision DAG")), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
107 ] + templateopts |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
108 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
109 diffopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
110 ('a', 'text', None, _('treat all files as text')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
111 ('g', 'git', None, _('use git extended diff format')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
112 ('', 'binary', None, _('generate binary diffs in git mode (default)')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
113 ('', 'nodates', None, _('omit dates from diff headers')) |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
114 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
115 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
116 diffwsopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
117 ('w', 'ignore-all-space', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
118 _('ignore white space when comparing lines')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
119 ('b', 'ignore-space-change', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
120 _('ignore changes in the amount of white space')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
121 ('B', 'ignore-blank-lines', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
122 _('ignore changes whose lines are all blank')), |
34013
da07367d683b
mdiff: add a --ignore-space-at-eol option
David Soria Parra <davidsp@fb.com>
parents:
34001
diff
changeset
|
123 ('Z', 'ignore-space-at-eol', None, |
da07367d683b
mdiff: add a --ignore-space-at-eol option
David Soria Parra <davidsp@fb.com>
parents:
34001
diff
changeset
|
124 _('ignore changes in whitespace at EOL')), |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
125 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
126 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
127 diffopts2 = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
128 ('', 'noprefix', None, _('omit a/ and b/ prefixes from filenames')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
129 ('p', 'show-function', None, _('show which function each change is in')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
130 ('', 'reverse', None, _('produce a diff that undoes the changes')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
131 ] + diffwsopts + [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
132 ('U', 'unified', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
133 _('number of lines of context to show'), _('NUM')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
134 ('', 'stat', None, _('output diffstat-style summary of changes')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
135 ('', 'root', '', _('produce diffs relative to subdirectory'), _('DIR')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
136 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
137 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
138 mergetoolopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
139 ('t', 'tool', '', _('specify merge tool')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
140 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
141 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
142 similarityopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
143 ('s', 'similarity', '', |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
144 _('guess renamed files by similarity (0<=s<=100)'), _('SIMILARITY')) |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
145 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
146 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
147 subrepoopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
148 ('S', 'subrepos', None, |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
149 _('recurse into subrepositories')) |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
150 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
151 |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
152 debugrevlogopts = [ |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
153 ('c', 'changelog', False, _('open changelog')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
154 ('m', 'manifest', False, _('open manifest')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
155 ('', 'dir', '', _('open directory manifest')), |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
156 ] |
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32362
diff
changeset
|
157 |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
158 # 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
|
159 # editor text |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
160 _linebelow = "^HG: ------------------------ >8 ------------------------$" |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
161 |
25256
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
162 def ishunk(x): |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
163 hunkclasses = (crecordmod.uihunk, patch.recordhunk) |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
164 return isinstance(x, hunkclasses) |
5a8398b085ed
record: extract ishunk to a function
Laurent Charignon <lcharignon@fb.com>
parents:
25228
diff
changeset
|
165 |
25257
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
166 def newandmodified(chunks, originalchunks): |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
167 newlyaddedandmodifiedfiles = set() |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
168 for chunk in chunks: |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
169 if ishunk(chunk) and chunk.header.isnewfile() and chunk not in \ |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
170 originalchunks: |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
171 newlyaddedandmodifiedfiles.add(chunk.header.filename()) |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
172 return newlyaddedandmodifiedfiles |
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
173 |
10401
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
174 def parsealiases(cmd): |
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
175 return cmd.lstrip("^").split("|") |
6252852b4332
mq: add -Q option to all commands not in norepo
Brendan Cully <brendan@kublai.com>
parents:
10344
diff
changeset
|
176 |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
177 def setupwrapcolorwrite(ui): |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
178 # 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
|
179 def wrapwrite(orig, *args, **kw): |
35350
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
180 label = kw.pop(r'label', '') |
24356
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
181 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
|
182 orig(chunk, label=label + l) |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
183 |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
184 oldwrite = ui.write |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
185 def wrap(*args, **kwargs): |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
186 return wrapwrite(oldwrite, *args, **kwargs) |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
187 setattr(ui, 'write', wrap) |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
188 return oldwrite |
a38f384f2a57
record: consolidate ui.write wrapping in a function
Laurent Charignon <lcharignon@fb.com>
parents:
24345
diff
changeset
|
189 |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
190 def filterchunks(ui, originalhunks, usecurses, testfile, operation=None): |
24343
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
191 if usecurses: |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
192 if testfile: |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
193 recordfn = crecordmod.testdecorator(testfile, |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
194 crecordmod.testchunkselector) |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
195 else: |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
196 recordfn = crecordmod.chunkselector |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
197 |
30534 | 198 return crecordmod.filterpatch(ui, originalhunks, recordfn, operation) |
24343
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
199 |
69538481ea9f
record: enable curses recording logic with experimental flag
Laurent Charignon <lcharignon@fb.com>
parents:
24341
diff
changeset
|
200 else: |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
201 return patch.filterpatch(ui, originalhunks, operation) |
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
202 |
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
203 def recordfilter(ui, originalhunks, operation=None): |
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
204 """ Prompts the user to filter the originalhunks and return a list of |
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
205 selected hunks. |
29326
d48fc6f318a3
patch: define full messages for interactive record/revert
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29283
diff
changeset
|
206 *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
|
207 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
|
208 (see patch.filterpatch). |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
25273
diff
changeset
|
209 """ |
27531
84d686cb62c4
cmdutil: use crecordmod.checkcurses
Sean Farley <sean@farley.io>
parents:
27370
diff
changeset
|
210 usecurses = crecordmod.checkcurses(ui) |
33499
0407a51b9d8c
codemod: register core configitems using a script
Jun Wu <quark@fb.com>
parents:
33438
diff
changeset
|
211 testfile = ui.config('experimental', 'crecordtest') |
24358
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
212 oldwrite = setupwrapcolorwrite(ui) |
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
213 try: |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
27148
diff
changeset
|
214 newchunks, newopts = filterchunks(ui, originalhunks, usecurses, |
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
27148
diff
changeset
|
215 testfile, operation) |
24358
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
216 finally: |
8d9e9063b040
record: move ui.write wrapping where it should be
Laurent Charignon <lcharignon@fb.com>
parents:
24357
diff
changeset
|
217 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
|
218 return newchunks, newopts |
24357
2da601ab3125
record: refactor the filtering code
Laurent Charignon <lcharignon@fb.com>
parents:
24356
diff
changeset
|
219 |
24309
fefcafda10b8
record: change interface of dorecord to accept new filters
Laurent Charignon <lcharignon@fb.com>
parents:
24306
diff
changeset
|
220 def dorecord(ui, repo, commitfunc, cmdsuggest, backupall, |
fefcafda10b8
record: change interface of dorecord to accept new filters
Laurent Charignon <lcharignon@fb.com>
parents:
24306
diff
changeset
|
221 filterfn, *pats, **opts): |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
222 from . import merge as mergemod |
32144
93155367a2a6
py3: convert opts to bytes in cmdutil.dorecord()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32046
diff
changeset
|
223 opts = pycompat.byteskwargs(opts) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
224 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
|
225 if cmdsuggest: |
69145daacdfa
cmdutil: allow callers of cmdutil.dorecord to omit suggestion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25763
diff
changeset
|
226 msg = _('running non-interactively, use %s instead') % cmdsuggest |
69145daacdfa
cmdutil: allow callers of cmdutil.dorecord to omit suggestion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25763
diff
changeset
|
227 else: |
69145daacdfa
cmdutil: allow callers of cmdutil.dorecord to omit suggestion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25763
diff
changeset
|
228 msg = _('running non-interactively') |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
229 raise error.Abort(msg) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
230 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
231 # make sure username is set before going interactive |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
232 if not opts.get('user'): |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
233 ui.username() # raise exception, username not provided |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
234 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
235 def recordfunc(ui, repo, message, match, opts): |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
236 """This is generic record driver. |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
237 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
238 Its job is to interactively filter local changes, and |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
239 accordingly prepare working directory into a state in which the |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
240 job can be delegated to a non-interactive commit command such as |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
241 'commit' or 'qrefresh'. |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
242 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
243 After the actual job is done by non-interactive command, the |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
244 working directory is restored to its original state. |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
245 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
246 In the end we'll record interesting changes, and everything else |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
247 will be left in place, so the user can continue working. |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
248 """ |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
249 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
250 checkunfinished(repo, commit=True) |
28815
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
251 wctx = repo[None] |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
252 merge = len(wctx.parents()) > 1 |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
253 if merge: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
254 raise error.Abort(_('cannot partially commit a merge ' |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
255 '(use "hg commit" instead)')) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
256 |
28815
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
257 def fail(f, msg): |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
258 raise error.Abort('%s: %s' % (f, msg)) |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
259 |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
260 force = opts.get('force') |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
261 if not force: |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
262 vdirs = [] |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
263 match.explicitdir = vdirs.append |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
264 match.bad = fail |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
265 |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
266 status = repo.status(match=match) |
28815
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
267 if not force: |
44611ad4fbd9
crecord: check for untracked arguments
timeless <timeless@mozdev.org>
parents:
28638
diff
changeset
|
268 repo.checkcommitpatterns(wctx, vdirs, match, status, fail) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
269 diffopts = patch.difffeatureopts(ui, opts=opts, whitespace=True) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
270 diffopts.nodates = True |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
271 diffopts.git = True |
27411 | 272 diffopts.showfunc = True |
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27625
diff
changeset
|
273 originaldiff = patch.diff(repo, changes=status, opts=diffopts) |
24341
616c01b69898
record: change interface of the filtering function
Laurent Charignon <lcharignon@fb.com>
parents:
24311
diff
changeset
|
274 originalchunks = patch.parsepatch(originaldiff) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
275 |
28570
5508cf9a52fe
crecord: rewrite a comment about filtering patches
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28452
diff
changeset
|
276 # 1. filter patch, since we are intending to apply subset of it |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
277 try: |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
27148
diff
changeset
|
278 chunks, newopts = filterfn(ui, originalchunks) |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
279 except error.PatchError as err: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
280 raise error.Abort(_('error parsing patch: %s') % err) |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
27148
diff
changeset
|
281 opts.update(newopts) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
282 |
24845
8133494accf1
record: edit patch of newly added files (issue4304)
Laurent Charignon <lcharignon@fb.com>
parents:
24843
diff
changeset
|
283 # We need to keep a backup of files that have been newly added and |
8133494accf1
record: edit patch of newly added files (issue4304)
Laurent Charignon <lcharignon@fb.com>
parents:
24843
diff
changeset
|
284 # modified during the recording process because there is a previous |
8133494accf1
record: edit patch of newly added files (issue4304)
Laurent Charignon <lcharignon@fb.com>
parents:
24843
diff
changeset
|
285 # version without the edit in the workdir |
25257
07326d76f19d
record: extract code to compute newly added and modified files
Laurent Charignon <lcharignon@fb.com>
parents:
25256
diff
changeset
|
286 newlyaddedandmodifiedfiles = newandmodified(chunks, originalchunks) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
287 contenders = set() |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
288 for h in chunks: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
289 try: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
290 contenders.update(set(h.files())) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
291 except AttributeError: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
292 pass |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
293 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
294 changed = status.modified + status.added + status.removed |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
295 newfiles = [f for f in changed if f in contenders] |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
296 if not newfiles: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
297 ui.status(_('no changes to record\n')) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
298 return 0 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
299 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
300 modified = set(status.modified) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
301 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
302 # 2. backup changed files, so we can restore them in the end |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
303 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
304 if backupall: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
305 tobackup = changed |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
306 else: |
24845
8133494accf1
record: edit patch of newly added files (issue4304)
Laurent Charignon <lcharignon@fb.com>
parents:
24843
diff
changeset
|
307 tobackup = [f for f in newfiles if f in modified or f in \ |
8133494accf1
record: edit patch of newly added files (issue4304)
Laurent Charignon <lcharignon@fb.com>
parents:
24843
diff
changeset
|
308 newlyaddedandmodifiedfiles] |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
309 backups = {} |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
310 if tobackup: |
31320
1b0db28dadf1
cmdutil: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31309
diff
changeset
|
311 backupdir = repo.vfs.join('record-backups') |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
312 try: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
313 os.mkdir(backupdir) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25657
diff
changeset
|
314 except OSError as err: |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
315 if err.errno != errno.EEXIST: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
316 raise |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
317 try: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
318 # backup continues |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
319 for f in tobackup: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
320 fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.', |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
321 dir=backupdir) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
322 os.close(fd) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
323 ui.debug('backup %r as %r\n' % (f, tmpname)) |
27370
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
324 util.copyfile(repo.wjoin(f), tmpname, copystat=True) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
325 backups[f] = tmpname |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
326 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28837
diff
changeset
|
327 fp = stringio() |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
328 for c in chunks: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
329 fname = c.filename() |
24837
edf907bd8144
record: fix record with change on moved file crashes (issue4619)
Laurent Charignon <lcharignon@fb.com>
parents:
24720
diff
changeset
|
330 if fname in backups: |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
331 c.write(fp) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
332 dopatch = fp.tell() |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
333 fp.seek(0) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
334 |
28638
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
335 # 2.5 optionally review / modify patch in text editor |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
336 if opts.get('review', False): |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
337 patchtext = (crecordmod.diffhelptext |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
338 + crecordmod.patchhelptext |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
339 + fp.read()) |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
340 reviewedpatch = ui.edit(patchtext, "", |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34022
diff
changeset
|
341 action="diff", |
30848
7080652af6e6
ui: rename tmpdir parameter to more specific repopath
Sean Farley <sean@farley.io>
parents:
30836
diff
changeset
|
342 repopath=repo.path) |
28638
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
343 fp.truncate(0) |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
344 fp.write(reviewedpatch) |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
345 fp.seek(0) |
44319097e7b9
crecord: re-enable reviewing a patch before comitting it
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
28630
diff
changeset
|
346 |
24866
e1ec3d075c67
record: fix adding new file with record from within a subdir (issue4626)
Laurent Charignon <lcharignon@fb.com>
parents:
24864
diff
changeset
|
347 [os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles] |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
348 # 3a. apply filtered patch to clean repo (clean) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
349 if backups: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
350 # Equivalent to hg.revert |
27344
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27216
diff
changeset
|
351 m = scmutil.matchfiles(repo, backups.keys()) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
352 mergemod.update(repo, repo.dirstate.p1(), |
27344
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27216
diff
changeset
|
353 False, True, matcher=m) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
354 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
355 # 3b. (apply) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
356 if dopatch: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
357 try: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
358 ui.debug('applying patch\n') |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
359 ui.debug(fp.getvalue()) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
360 patch.internalpatch(ui, repo, fp, 1, eolmode=None) |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
361 except error.PatchError as err: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
362 raise error.Abort(str(err)) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
363 del fp |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
364 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
365 # 4. We prepared working directory according to filtered |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
366 # patch. Now is the time to delegate the job to |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
367 # commit/qrefresh or the like! |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
368 |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
369 # Make all of the pathnames absolute. |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
370 newfiles = [repo.wjoin(nf) for nf in newfiles] |
35350
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
371 return commitfunc(ui, repo, *newfiles, **pycompat.strkwargs(opts)) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
372 finally: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
373 # 5. finally restore backed-up files |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
374 try: |
25759
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
375 dirstate = repo.dirstate |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
376 for realname, tmpname in backups.iteritems(): |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
377 ui.debug('restoring %r to %r\n' % (tmpname, realname)) |
25759
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
378 |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
379 if dirstate[realname] == 'n': |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
380 # without normallookup, restoring timestamp |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
381 # may cause partially committed files |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
382 # to be treated as unmodified |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
383 dirstate.normallookup(realname) |
ff11c1565c04
cmdutil: apply dirstate.normallookup on (maybe partially) committed files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25758
diff
changeset
|
384 |
27370
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
385 # copystat=True here and above are a hack to trick any |
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
386 # editors that have f open that we haven't modified them. |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
387 # |
27370
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
388 # Also note that this racy as an editor could notice the |
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
389 # file's mtime before we've finished writing it. |
d9e3ebe56970
record: don't dereference symlinks while copying over stat data
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
390 util.copyfile(tmpname, repo.wjoin(realname), copystat=True) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
391 os.unlink(tmpname) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
392 if tobackup: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
393 os.rmdir(backupdir) |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
394 except OSError: |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
395 pass |
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
396 |
25758
c5dfa47ad7ee
cmdutil: put recordfunc invocation into wlock scope for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25755
diff
changeset
|
397 def recordinwlock(ui, repo, message, match, opts): |
27801
7be6371c732e
with: use context manager for wlock in recordinwlock
Bryan O'Sullivan <bryano@fb.com>
parents:
27698
diff
changeset
|
398 with repo.wlock(): |
25758
c5dfa47ad7ee
cmdutil: put recordfunc invocation into wlock scope for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25755
diff
changeset
|
399 return recordfunc(ui, repo, message, match, opts) |
c5dfa47ad7ee
cmdutil: put recordfunc invocation into wlock scope for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25755
diff
changeset
|
400 |
c5dfa47ad7ee
cmdutil: put recordfunc invocation into wlock scope for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25755
diff
changeset
|
401 return commit(ui, repo, recordinwlock, pats, opts) |
24272
26a1c617e047
record: move dorecord from record to cmdutil
Laurent Charignon <lcharignon@fb.com>
parents:
24260
diff
changeset
|
402 |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
403 class dirnode(object): |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
404 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
405 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
|
406 the purpose of tersing its status. |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
407 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
408 path is the path to the directory |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
409 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
410 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:
34372
diff
changeset
|
411 all the files in all the subdirectories too) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
412 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
413 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:
34372
diff
changeset
|
414 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
415 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:
34372
diff
changeset
|
416 dirnode object as the value |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
417 """ |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
418 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
419 def __init__(self, dirpath): |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
420 self.path = dirpath |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
421 self.statuses = set([]) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
422 self.files = [] |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
423 self.subdirs = {} |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
424 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
425 def _addfileindir(self, filename, status): |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
426 """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:
34372
diff
changeset
|
427 self.files.append((filename, status)) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
428 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
429 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
|
430 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
431 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
|
432 |
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
433 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
|
434 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
|
435 there. |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
436 """ |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
437 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
438 # 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:
34372
diff
changeset
|
439 # child of this directory |
34928
362096cfdb1f
terse: split on repo separator instead of os.sep (issue5715)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34907
diff
changeset
|
440 if '/' in filename: |
362096cfdb1f
terse: split on repo separator instead of os.sep (issue5715)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34907
diff
changeset
|
441 subdir, filep = filename.split('/', 1) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
442 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
443 # does the dirnode object for subdir exists |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
444 if subdir not in self.subdirs: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
445 subdirpath = os.path.join(self.path, subdir) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
446 self.subdirs[subdir] = dirnode(subdirpath) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
447 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
448 # try adding the file in subdir |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
449 self.subdirs[subdir].addfile(filep, status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
450 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
451 else: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
452 self._addfileindir(filename, status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
453 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
454 if status not in self.statuses: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
455 self.statuses.add(status) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
456 |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
457 def iterfilepaths(self): |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
458 """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
|
459 for f, st in self.files: |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
460 yield st, os.path.join(self.path, f) |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
461 |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
462 def tersewalk(self, terseargs): |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
463 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
464 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
|
465 dirnode. |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
466 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
467 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
|
468 flag. |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
469 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
470 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
|
471 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
472 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
|
473 subdirectories) share the same status and the user has asked us to terse |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
474 that status. -> yield (status, dirpath) |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
475 |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
476 2) Otherwise, we do following: |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
477 |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
478 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
|
479 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
|
480 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
481 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
|
482 directory |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
483 """ |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
484 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
485 if len(self.statuses) == 1: |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
486 onlyst = self.statuses.pop() |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
487 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
488 # 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
|
489 # passed as terse argument |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
490 if onlyst in terseargs: |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
491 yield onlyst, self.path + pycompat.ossep |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
492 return |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
493 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
494 # add the files to status list |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
495 for st, fpath in self.iterfilepaths(): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
496 yield st, fpath |
34683
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
497 |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
498 #recurse on the subdirs |
3d6d4b12128e
tersestatus: make methods part of the dirnode class
Denis Laxalde <denis@laxalde.org>
parents:
34682
diff
changeset
|
499 for dirobj in self.subdirs.values(): |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
500 for st, fpath in dirobj.tersewalk(terseargs): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
501 yield st, fpath |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
502 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
503 def tersedir(statuslist, terseargs): |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
504 """ |
34698
23eb03f46929
tersestatus: rework dirnode and tersedir docstrings
Denis Laxalde <denis@laxalde.org>
parents:
34684
diff
changeset
|
505 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:
34372
diff
changeset
|
506 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
507 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:
34372
diff
changeset
|
508 each status. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
509 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:
34372
diff
changeset
|
510 flag. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
511 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
512 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:
34372
diff
changeset
|
513 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:
34372
diff
changeset
|
514 directory or not. |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
515 """ |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
516 # the order matters here as that is used to produce final list |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
517 allst = ('m', 'a', 'r', 'd', 'u', 'i', 'c') |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
518 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
519 # checking the argument validity |
34893
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
520 for s in pycompat.bytestr(terseargs): |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
521 if s not in allst: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
522 raise error.Abort(_("'%s' not recognized") % s) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
523 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
524 # creating a dirnode object for the root of the repo |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
525 rootobj = dirnode('') |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
526 pstatus = ('modified', 'added', 'deleted', 'clean', 'unknown', |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
527 'ignored', 'removed') |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
528 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
529 tersedict = {} |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
530 for attrname in pstatus: |
34893
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
531 statuschar = attrname[0:1] |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
532 for f in getattr(statuslist, attrname): |
34893
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
533 rootobj.addfile(f, statuschar) |
068e0e531584
cmdutil: fix status tersing on Python 3
Augie Fackler <augie@google.com>
parents:
34857
diff
changeset
|
534 tersedict[statuschar] = [] |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
535 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
536 # 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
|
537 for st, fpath in rootobj.iterfilepaths(): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
538 tersedict[st].append(fpath) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
539 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
540 # process each sub-directory and build tersedict |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
541 for subdir in rootobj.subdirs.values(): |
34684
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
542 for st, f in subdir.tersewalk(terseargs): |
5d98674df18a
tersestatus: avoid modifying tersedict
Denis Laxalde <denis@laxalde.org>
parents:
34683
diff
changeset
|
543 tersedict[st].append(f) |
34682
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
544 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
545 tersedlist = [] |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
546 for st in allst: |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
547 tersedict[st].sort() |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
548 tersedlist.append(tersedict[st]) |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
549 |
7e3001b74ab3
tersestatus: re-implement the functionality to terse the status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34372
diff
changeset
|
550 return tersedlist |
33548
4cd4344a53c4
status: add a flag to terse the output (issue4119)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33509
diff
changeset
|
551 |
33771
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
552 def _commentlines(raw): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
553 '''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:
33737
diff
changeset
|
554 lines = raw.splitlines() |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
555 commentedlines = ['# %s' % line for line in lines] |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
556 return '\n'.join(commentedlines) + '\n' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
557 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
558 def _conflictsmsg(repo): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
559 # avoid merge cycle |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
560 from . import merge as mergemod |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
561 mergestate = mergemod.mergestate.read(repo) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
562 if not mergestate.active(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
563 return |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
564 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
565 m = scmutil.match(repo[None]) |
34001
3340efe80803
morestatus: simplify check for unresolved merge conflicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
33883
diff
changeset
|
566 unresolvedlist = [f for f in mergestate.unresolved() if m(f)] |
33771
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
567 if unresolvedlist: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
568 mergeliststr = '\n'.join( |
34981
527655a049ee
morestatus: don't crash with different drive letters for repo.root and CWD
Matt Harbison <matt_harbison@yahoo.com>
parents:
34928
diff
changeset
|
569 [' %s' % util.pathto(repo.root, pycompat.getcwd(), path) |
527655a049ee
morestatus: don't crash with different drive letters for repo.root and CWD
Matt Harbison <matt_harbison@yahoo.com>
parents:
34928
diff
changeset
|
570 for path in unresolvedlist]) |
33771
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
571 msg = _('''Unresolved merge conflicts: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
572 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
573 %s |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
574 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
575 To mark files as resolved: hg resolve --mark FILE''') % mergeliststr |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
576 else: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
577 msg = _('No unresolved merge conflicts.') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
578 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
579 return _commentlines(msg) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
580 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
581 def _helpmessage(continuecmd, abortcmd): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
582 msg = _('To continue: %s\n' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
583 'To abort: %s') % (continuecmd, abortcmd) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
584 return _commentlines(msg) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
585 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
586 def _rebasemsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
587 return _helpmessage('hg rebase --continue', 'hg rebase --abort') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
588 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
589 def _histeditmsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
590 return _helpmessage('hg histedit --continue', 'hg histedit --abort') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
591 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
592 def _unshelvemsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
593 return _helpmessage('hg unshelve --continue', 'hg unshelve --abort') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
594 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
595 def _updatecleanmsg(dest=None): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
596 warning = _('warning: this will discard uncommitted changes') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
597 return 'hg update --clean %s (%s)' % (dest or '.', warning) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
598 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
599 def _graftmsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
600 # tweakdefaults requires `update` to have a rev hence the `.` |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
601 return _helpmessage('hg graft --continue', _updatecleanmsg()) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
602 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
603 def _mergemsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
604 # tweakdefaults requires `update` to have a rev hence the `.` |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
605 return _helpmessage('hg commit', _updatecleanmsg()) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
606 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
607 def _bisectmsg(): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
608 msg = _('To mark the changeset good: hg bisect --good\n' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
609 'To mark the changeset bad: hg bisect --bad\n' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
610 'To abort: hg bisect --reset\n') |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
611 return _commentlines(msg) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
612 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
613 def fileexistspredicate(filename): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
614 return lambda repo: repo.vfs.exists(filename) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
615 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
616 def _mergepredicate(repo): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
617 return len(repo[None].parents()) > 1 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
618 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
619 STATES = ( |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
620 # (state, predicate to detect states, helpful message function) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
621 ('histedit', fileexistspredicate('histedit-state'), _histeditmsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
622 ('bisect', fileexistspredicate('bisect.state'), _bisectmsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
623 ('graft', fileexistspredicate('graftstate'), _graftmsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
624 ('unshelve', fileexistspredicate('unshelverebasestate'), _unshelvemsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
625 ('rebase', fileexistspredicate('rebasestate'), _rebasemsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
626 # The merge state is part of a list that will be iterated over. |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
627 # They need to be last because some of the other unfinished states may also |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
628 # be in a merge or update state (eg. rebase, histedit, graft, etc). |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
629 # We want those to have priority. |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
630 ('merge', _mergepredicate, _mergemsg), |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
631 ) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
632 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
633 def _getrepostate(repo): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
634 # experimental config: commands.status.skipstates |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
635 skip = set(repo.ui.configlist('commands', 'status.skipstates')) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
636 for state, statedetectionpredicate, msgfn in STATES: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
637 if state in skip: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
638 continue |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
639 if statedetectionpredicate(repo): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
640 return (state, statedetectionpredicate, msgfn) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
641 |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
642 def morestatus(repo, fm): |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
643 statetuple = _getrepostate(repo) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
644 label = 'status.morestatus' |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
645 if statetuple: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
646 fm.startitem() |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
647 state, statedetectionpredicate, helpfulmsg = statetuple |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
648 statemsg = _('The repository is in an unfinished *%s* state.') % state |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
649 fm.write('statemsg', '%s\n', _commentlines(statemsg), label=label) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
650 conmsg = _conflictsmsg(repo) |
33883
e5d104c35e51
morestatus: check whether the conflict message is None before printing
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33858
diff
changeset
|
651 if conmsg: |
e5d104c35e51
morestatus: check whether the conflict message is None before printing
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33858
diff
changeset
|
652 fm.write('conflictsmsg', '%s\n', conmsg, label=label) |
33771
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
653 if helpfulmsg: |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
654 helpmsg = helpfulmsg() |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
655 fm.write('helpmsg', '%s\n', helpmsg, label=label) |
96f43981c1c4
morestatus: move fb extension to core by plugging to `hg status --verbose`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33737
diff
changeset
|
656 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
657 def findpossible(cmd, table, strict=False): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
658 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
659 Return cmd -> (aliases, command table entry) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
660 for each matching command. |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
661 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
|
662 """ |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
663 choice = {} |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
664 debugchoice = {} |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
665 |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
666 if cmd in table: |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
667 # short-circuit exact matches, "log" alias beats "^log|history" |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
668 keys = [cmd] |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
669 else: |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
670 keys = table.keys() |
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
671 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
672 allcmds = [] |
15600
195dbd1cef0c
alias: shortcut command matching show shadowing works properly (issue3104)
Matt Mackall <mpm@selenic.com>
parents:
15231
diff
changeset
|
673 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
|
674 aliases = parsealiases(e) |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
675 allcmds.extend(aliases) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
676 found = None |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
677 if cmd in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
678 found = cmd |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
679 elif not strict: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
680 for a in aliases: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
681 if a.startswith(cmd): |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
682 found = a |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
683 break |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
684 if found is not None: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
685 if aliases[0].startswith("debug") or found.startswith("debug"): |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
686 debugchoice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
687 else: |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5177
diff
changeset
|
688 choice[found] = (aliases, table[e]) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
689 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
690 if not choice and debugchoice: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
691 choice = debugchoice |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
692 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
693 return choice, allcmds |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
694 |
7213
b4c035057d34
findcmd: have dispatch look up strict flag
Matt Mackall <mpm@selenic.com>
parents:
7121
diff
changeset
|
695 def findcmd(cmd, table, strict=True): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
696 """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
|
697 choice, allcmds = findpossible(cmd, table, strict) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
698 |
5915
d0576d065993
Prefer i in d over d.has_key(i)
Christian Ebert <blacktrash@gmx.net>
parents:
5843
diff
changeset
|
699 if cmd in choice: |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
700 return choice[cmd] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
701 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
702 if len(choice) > 1: |
32528
9f56d462634c
cmdutil: use sorted(dict) instead of x = dict.keys(); x.sort()
Augie Fackler <raf@durin42.com>
parents:
32434
diff
changeset
|
703 clist = sorted(choice) |
7643
9a1ea6587557
error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents:
7404
diff
changeset
|
704 raise error.AmbiguousCommand(cmd, clist) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
705 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
706 if choice: |
32862
e4a43b810528
py3: explicitly convert dict.values() to a list on py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32842
diff
changeset
|
707 return list(choice.values())[0] |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
708 |
24222
02d7b5cd373b
dispatch: offer suggestions of similar-named commands
Augie Fackler <augie@google.com>
parents:
24216
diff
changeset
|
709 raise error.UnknownCommand(cmd, allcmds) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
710 |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
711 def changebranch(ui, repo, revs, label): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
712 """ Change the branch name of given revs to label """ |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
713 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
714 with repo.wlock(), repo.lock(), repo.transaction('branches'): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
715 # 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
|
716 bailifchanged(repo) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
717 revs = scmutil.revrange(repo, revs) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
718 if not revs: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
719 raise error.Abort("empty revision set") |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
720 roots = repo.revs('roots(%ld)', revs) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
721 if len(roots) > 1: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
722 raise error.Abort(_("cannot change branch of non-linear revisions")) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
723 rewriteutil.precheck(repo, revs, 'change branch of') |
35746
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
724 |
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
725 root = repo[roots.first()] |
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
726 if not root.p1().branch() == label and label in repo.branchmap(): |
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
727 raise error.Abort(_("a branch of the same name already exists")) |
e5b6ba786d83
branch: allow changing branch name to existing name if possible
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35745
diff
changeset
|
728 |
35745
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
729 if repo.revs('merge() and %ld', revs): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
730 raise error.Abort(_("cannot change branch of a merge commit")) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
731 if repo.revs('obsolete() and %ld', revs): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
732 raise error.Abort(_("cannot change branch of a obsolete changeset")) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
733 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
734 # make sure only topological heads |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
735 if repo.revs('heads(%ld) - head()', revs): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
736 raise error.Abort(_("cannot change branch in middle of a stack")) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
737 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
738 replacements = {} |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
739 # 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
|
740 # 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
|
741 from . import context |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
742 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
|
743 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
|
744 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
|
745 # 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
|
746 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
|
747 continue |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
748 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
749 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
|
750 try: |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
751 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
|
752 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
|
753 return None |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
754 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
755 ui.debug("changing branch of '%s' from '%s' to '%s'\n" |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
756 % (hex(ctx.node()), oldbranch, label)) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
757 extra = ctx.extra() |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
758 extra['branch_change'] = hex(ctx.node()) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
759 # 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
|
760 # 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
|
761 # 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
|
762 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
|
763 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
|
764 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
|
765 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
|
766 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
|
767 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
|
768 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
769 mc = context.memctx(repo, (p1, p2), |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
770 ctx.description(), |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
771 ctx.files(), |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
772 filectxfn, |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
773 user=ctx.user(), |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
774 date=ctx.date(), |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
775 extra=extra, |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
776 branch=label) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
777 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
778 commitphase = ctx.phase() |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
779 overrides = {('phases', 'new-commit'): commitphase} |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
780 with repo.ui.configoverride(overrides, 'branch-change'): |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
781 newnode = repo.commitctx(mc) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
782 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
783 replacements[ctx.node()] = (newnode,) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
784 ui.debug('new node id is %s\n' % hex(newnode)) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
785 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
786 # create obsmarkers and move bookmarks |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
787 scmutil.cleanupnodes(repo, replacements, 'branch-change') |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
788 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
789 # 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
|
790 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
|
791 # 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
|
792 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
|
793 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
|
794 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
|
795 # 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
|
796 # mercurial.cmdutil |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
797 from . import hg |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
798 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
|
799 |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
800 ui.status(_("changed branch on %d changesets\n") % len(replacements)) |
3bd8ab4c80a5
branch: add a --rev flag to change branch name of given revisions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35743
diff
changeset
|
801 |
10402
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
802 def findrepo(p): |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
803 while not os.path.isdir(os.path.join(p, ".hg")): |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
804 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
|
805 if p == oldp: |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
806 return None |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
807 |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
808 return p |
d216fa04e48a
mq: make init -Q do what qinit -c did
Brendan Cully <brendan@kublai.com>
parents:
10401
diff
changeset
|
809 |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
810 def bailifchanged(repo, merge=True, hint=None): |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
811 """ enforce the precondition that working directory must be clean. |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
812 |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
813 '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
|
814 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
|
815 |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
816 '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
|
817 """ |
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
818 |
24472
1bf71faf042e
cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24471
diff
changeset
|
819 if merge and repo.dirstate.p2() != nullid: |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
820 raise error.Abort(_('outstanding uncommitted merge'), hint=hint) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
821 modified, added, removed, deleted = repo.status()[:4] |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
822 if modified or added or removed or deleted: |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30724
diff
changeset
|
823 raise error.Abort(_('uncommitted changes'), hint=hint) |
15231
cd6f10dccf16
cmdutil.bailifchanged: abort for dirty subrepos
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15214
diff
changeset
|
824 ctx = repo[None] |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
825 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
|
826 ctx.sub(s).bailifchanged(hint=hint) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
827 |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
828 def logmessage(ui, opts): |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
829 """ get the log message according to -m and -l option """ |
7667
bd5c37d792e6
cmdutil.logmessage: options should be optional
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7643
diff
changeset
|
830 message = opts.get('message') |
bd5c37d792e6
cmdutil.logmessage: options should be optional
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7643
diff
changeset
|
831 logfile = opts.get('logfile') |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
832 |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
833 if message and logfile: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
834 raise error.Abort(_('options --message and --logfile are mutually ' |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
835 'exclusive')) |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
836 if not message and logfile: |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
837 try: |
32618
d3e1c5b4986c
cmdutil: use isstdiofilename() where appropriate
Yuya Nishihara <yuya@tcha.org>
parents:
32584
diff
changeset
|
838 if isstdiofilename(logfile): |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
839 message = ui.fin.read() |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
840 else: |
14249
f4766e1bb0b3
cmdutil: normalize log message eols when reading from file
Patrick Mezard <pmezard@gmail.com>
parents:
14232
diff
changeset
|
841 message = '\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
|
842 except IOError as inst: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
843 raise error.Abort(_("can't read commit message '%s': %s") % |
34022
d5b2beca16c0
python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents:
34019
diff
changeset
|
844 (logfile, encoding.strtolocal(inst.strerror))) |
4549
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
845 return message |
0c61124ad877
dispatch: move dispatching code to cmdutil
Matt Mackall <mpm@selenic.com>
parents:
4548
diff
changeset
|
846 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
847 def mergeeditform(ctxorbool, baseformname): |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
848 """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
|
849 |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
850 '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
|
851 merging is committed. |
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
852 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
853 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
|
854 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
|
855 """ |
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
856 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
|
857 if ctxorbool: |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
858 return baseformname + ".merge" |
22248
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
859 elif 1 < len(ctxorbool.parents()): |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
860 return baseformname + ".merge" |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
861 |
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
862 return baseformname + ".normal" |
22248
75618a223e18
commit: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22237
diff
changeset
|
863 |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
864 def getcommiteditor(edit=False, finishdesc=None, extramsg=None, |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
865 editform='', **opts): |
21419
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
866 """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
|
867 |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
868 '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
|
869 (= '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
|
870 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
|
871 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
|
872 storing. |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
873 |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
874 '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
|
875 '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
|
876 is automatically added. |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
877 |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
878 '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
|
879 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
|
880 |
21419
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
881 '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
|
882 '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
|
883 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
|
884 """ |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
885 if edit or finishdesc or extramsg: |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
886 return lambda r, c, s: commitforceeditor(r, c, s, |
272785489ed3
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21417
diff
changeset
|
887 finishdesc=finishdesc, |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
888 extramsg=extramsg, |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
889 editform=editform) |
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
890 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
|
891 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
|
892 else: |
dcf20f244c2a
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21241
diff
changeset
|
893 return commiteditor |
dcf20f244c2a
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21241
diff
changeset
|
894 |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
895 def makefilename(repo, pat, node, desc=None, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
896 total=None, seqno=None, revwidth=None, pathname=None): |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
897 node_expander = { |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
898 'H': lambda: hex(node), |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
899 'R': lambda: '%d' % repo.changelog.rev(node), |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
900 'h': lambda: short(node), |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
901 'm': lambda: re.sub('[^\w]', '_', desc or '') |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
902 } |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
903 expander = { |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
904 '%': lambda: '%', |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
905 'b': lambda: os.path.basename(repo.root), |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
906 } |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
907 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
908 try: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
909 if node: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
910 expander.update(node_expander) |
4836
0e2d0a78f81a
archive: make the %r escape work.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4825
diff
changeset
|
911 if node: |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
912 expander['r'] = (lambda: |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
913 ('%d' % repo.changelog.rev(node)).zfill(revwidth or 0)) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
914 if total is not None: |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
915 expander['N'] = lambda: '%d' % total |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
916 if seqno is not None: |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
917 expander['n'] = lambda: '%d' % seqno |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
918 if total is not None and seqno is not None: |
35203
4ee493ea1c13
py3: use pycompat.bytestr() or '%d' in place of str()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35197
diff
changeset
|
919 expander['n'] = (lambda: ('%d' % seqno).zfill(len('%d' % total))) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
920 if pathname is not None: |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
921 expander['s'] = lambda: os.path.basename(pathname) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
922 expander['d'] = lambda: os.path.dirname(pathname) or '.' |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
923 expander['p'] = lambda: pathname |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
924 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
925 newname = [] |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
926 patlen = len(pat) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
927 i = 0 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
928 while i < patlen: |
32153
6f173560c7f4
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32147
diff
changeset
|
929 c = pat[i:i + 1] |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
930 if c == '%': |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
931 i += 1 |
32153
6f173560c7f4
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32147
diff
changeset
|
932 c = pat[i:i + 1] |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
933 c = expander[c]() |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
934 newname.append(c) |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
935 i += 1 |
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
936 return ''.join(newname) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25657
diff
changeset
|
937 except KeyError as inst: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
938 raise error.Abort(_("invalid format spec '%%%s' in output filename") % |
3072
bc3fe3b5b785
Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2958
diff
changeset
|
939 inst.args[0]) |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
940 |
32539
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32538
diff
changeset
|
941 def isstdiofilename(pat): |
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32538
diff
changeset
|
942 """True if the given pat looks like a filename denoting stdin/stdout""" |
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32538
diff
changeset
|
943 return not pat or pat == '-' |
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32538
diff
changeset
|
944 |
27418
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
945 class _unclosablefile(object): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
946 def __init__(self, fp): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
947 self._fp = fp |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
948 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
949 def close(self): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
950 pass |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
951 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
952 def __iter__(self): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
953 return iter(self._fp) |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
954 |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
955 def __getattr__(self, attr): |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
956 return getattr(self._fp, attr) |
2ce4661ac226
cmdutil: reimplement file wrapper that disables close()
Yuya Nishihara <yuya@tcha.org>
parents:
27417
diff
changeset
|
957 |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
958 def __enter__(self): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
959 return self |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
960 |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
961 def __exit__(self, exc_type, exc_value, exc_tb): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
962 pass |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
30016
diff
changeset
|
963 |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
964 def makefileobj(repo, pat, node=None, desc=None, total=None, |
19944
b7f76db06dc0
cmdutil: fix makefileobj not to clobber default modemap dict
Yuya Nishihara <yuya@tcha.org>
parents:
19894
diff
changeset
|
965 seqno=None, revwidth=None, mode='wb', modemap=None, |
18613
1a2f4c633410
export: clobber files with -o (bc) (issue3652)
Augie Fackler <raf@durin42.com>
parents:
18538
diff
changeset
|
966 pathname=None): |
7319
eae1767cc6a8
export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7308
diff
changeset
|
967 |
13769
8796fb6af67e
cmdutil: fix mode handling in make_file
Adrian Buehlmann <adrian@cadifra.com>
parents:
13534
diff
changeset
|
968 writable = mode not in ('r', 'rb') |
7319
eae1767cc6a8
export: fixed silent output file overwriting
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7308
diff
changeset
|
969 |
32539
447bbd970047
cmdutil: extract function checking if pattern should be taken as stdin/out
Yuya Nishihara <yuya@tcha.org>
parents:
32538
diff
changeset
|
970 if isstdiofilename(pat): |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
971 if writable: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
972 fp = repo.ui.fout |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
973 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
974 fp = repo.ui.fin |
27419
7e2495bf0ad8
cmdutil: do not duplicate stdout by makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
27418
diff
changeset
|
975 return _unclosablefile(fp) |
18613
1a2f4c633410
export: clobber files with -o (bc) (issue3652)
Augie Fackler <raf@durin42.com>
parents:
18538
diff
changeset
|
976 fn = makefilename(repo, pat, node, desc, total, seqno, revwidth, pathname) |
19944
b7f76db06dc0
cmdutil: fix makefileobj not to clobber default modemap dict
Yuya Nishihara <yuya@tcha.org>
parents:
19894
diff
changeset
|
977 if modemap is not None: |
b7f76db06dc0
cmdutil: fix makefileobj not to clobber default modemap dict
Yuya Nishihara <yuya@tcha.org>
parents:
19894
diff
changeset
|
978 mode = modemap.get(fn, mode) |
b7f76db06dc0
cmdutil: fix makefileobj not to clobber default modemap dict
Yuya Nishihara <yuya@tcha.org>
parents:
19894
diff
changeset
|
979 if mode == 'wb': |
b7f76db06dc0
cmdutil: fix makefileobj not to clobber default modemap dict
Yuya Nishihara <yuya@tcha.org>
parents:
19894
diff
changeset
|
980 modemap[fn] = 'ab' |
18613
1a2f4c633410
export: clobber files with -o (bc) (issue3652)
Augie Fackler <raf@durin42.com>
parents:
18538
diff
changeset
|
981 return open(fn, mode) |
2882
cf98cd70d2c4
move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2874
diff
changeset
|
982 |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
983 def openrevlog(repo, cmd, file_, opts): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
984 """opens the changelog, manifest, a filelog or a given revlog""" |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
985 cl = opts['changelog'] |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
986 mf = opts['manifest'] |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
987 dir = opts['dir'] |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
988 msg = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
989 if cl and mf: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
990 msg = _('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
|
991 elif cl and dir: |
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
992 msg = _('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
|
993 elif cl or mf or dir: |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
994 if file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
995 msg = _('cannot specify filename with --changelog or --manifest') |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
996 elif not repo: |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
997 msg = _('cannot specify --changelog or --manifest or --dir ' |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
998 'without a repository') |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
999 if msg: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1000 raise error.Abort(msg) |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1001 |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1002 r = None |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1003 if repo: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1004 if cl: |
21033
254f55b64e31
debugrevlog: use unfiltered view for changelog
Matt Mackall <mpm@selenic.com>
parents:
21024
diff
changeset
|
1005 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
|
1006 elif dir: |
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1007 if 'treemanifest' not in repo.requirements: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1008 raise error.Abort(_("--dir can only be used on repos with " |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1009 "treemanifest enabled")) |
30371
fccc3eea2ddb
manifest: delete unused dirlog and _newmanifest functions
Durham Goode <durham@fb.com>
parents:
30340
diff
changeset
|
1010 dirlog = repo.manifestlog._revlog.dirlog(dir) |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1011 if len(dirlog): |
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25100
diff
changeset
|
1012 r = dirlog |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1013 elif mf: |
30375
11b8b740d54a
manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents:
30371
diff
changeset
|
1014 r = repo.manifestlog._revlog |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1015 elif file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1016 filelog = repo.file(file_) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1017 if len(filelog): |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1018 r = filelog |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1019 if not r: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1020 if not file_: |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1021 raise error.CommandError(cmd, _('invalid arguments')) |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1022 if not os.path.isfile(file_): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1023 raise error.Abort(_("revlog '%s' not found") % file_) |
31237
1b08aca7870a
vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
1024 r = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False), |
14323
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1025 file_[:-2] + ".i") |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1026 return r |
a79fea6b3e77
debugindex etc.: add --changelog and --manifest options
Sune Foldager <cryo@cyanite.org>
parents:
14322
diff
changeset
|
1027 |
5610
2493a478f395
copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents:
5609
diff
changeset
|
1028 def copy(ui, repo, pats, opts, rename=False): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1029 # called with the repo lock held |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1030 # |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1031 # hgsep => pathname that uses "/" to separate directories |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1032 # 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
|
1033 cwd = repo.getcwd() |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1034 targets = {} |
5607 | 1035 after = opts.get("after") |
1036 dryrun = opts.get("dry_run") | |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11290
diff
changeset
|
1037 wctx = repo[None] |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1038 |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1039 def walkpat(pat): |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1040 srcs = [] |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1041 if after: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1042 badstates = '?' |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1043 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24301
diff
changeset
|
1044 badstates = '?r' |
32382
c87db79b9507
cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents:
32375
diff
changeset
|
1045 m = scmutil.match(wctx, [pat], opts, globbed=True) |
c87db79b9507
cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents:
32375
diff
changeset
|
1046 for abs in wctx.walk(m): |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1047 state = repo.dirstate[abs] |
6584
29c77e5dfb3c
walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents:
6582
diff
changeset
|
1048 rel = m.rel(abs) |
29c77e5dfb3c
walk: remove rel and exact returns
Matt Mackall <mpm@selenic.com>
parents:
6582
diff
changeset
|
1049 exact = m.exact(abs) |
11223
0d09f2244805
rename: make --after work if source is already in R state
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11177
diff
changeset
|
1050 if state in badstates: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1051 if exact and state == '?': |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1052 ui.warn(_('%s: not copying - file is not managed\n') % rel) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1053 if exact and state == 'r': |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1054 ui.warn(_('%s: not copying - file has been marked for' |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1055 ' remove\n') % rel) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1056 continue |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1057 # abs: hgsep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1058 # rel: ossep |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1059 srcs.append((abs, rel, exact)) |
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1060 return srcs |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1061 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1062 # abssrc: hgsep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1063 # relsrc: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1064 # otarget: ossep |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1065 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
|
1066 abstarget = pathutil.canonpath(repo.root, cwd, otarget) |
16542
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1067 if '/' in abstarget: |
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1068 # 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
|
1069 # case only renames, like a => A. |
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1070 abspath, absname = abstarget.rsplit('/', 1) |
e596a631210e
dirstate: preserve path components case on renames (issue3402)
Patrick Mezard <patrick@mezard.eu>
parents:
16458
diff
changeset
|
1071 abstarget = repo.dirstate.normalize(abspath) + '/' + absname |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1072 reltarget = repo.pathto(abstarget, cwd) |
5607 | 1073 target = repo.wjoin(abstarget) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1074 src = repo.wjoin(abssrc) |
5608 | 1075 state = repo.dirstate[abstarget] |
5607 | 1076 |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13945
diff
changeset
|
1077 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
|
1078 |
5607 | 1079 # check for collisions |
1080 prevsrc = targets.get(abstarget) | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1081 if prevsrc is not None: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1082 ui.warn(_('%s: not overwriting - %s collides with %s\n') % |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1083 (reltarget, repo.pathto(abssrc, cwd), |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1084 repo.pathto(prevsrc, cwd))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1085 return |
5607 | 1086 |
1087 # check for overwrites | |
12342
70236d6fd844
rename: do not overwrite existing broken symlinks
Patrick Mezard <pmezard@gmail.com>
parents:
11950
diff
changeset
|
1088 exists = os.path.lexists(target) |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1089 samefile = False |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1090 if exists and abssrc != abstarget: |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1091 if (repo.dirstate.normalize(abssrc) == |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1092 repo.dirstate.normalize(abstarget)): |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1093 if not rename: |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1094 ui.warn(_("%s: can't copy - same file\n") % reltarget) |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1095 return |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1096 exists = False |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1097 samefile = True |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1098 |
8117
2b30d8488819
remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents:
8013
diff
changeset
|
1099 if not after and exists or after and state in 'mn': |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1100 if not opts['force']: |
30151
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1101 if state in 'mn': |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1102 msg = _('%s: not overwriting - file already committed\n') |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1103 if after: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1104 flags = '--after --force' |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1105 else: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1106 flags = '--force' |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1107 if rename: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1108 hint = _('(hg rename %s to replace the file by ' |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1109 'recording a rename)\n') % flags |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1110 else: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1111 hint = _('(hg copy %s to replace the file by ' |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1112 'recording a copy)\n') % flags |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1113 else: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1114 msg = _('%s: not overwriting - file exists\n') |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1115 if rename: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1116 hint = _('(hg rename --after to record the rename)\n') |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1117 else: |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1118 hint = _('(hg copy --after to record the copy)\n') |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1119 ui.warn(msg % reltarget) |
381293e1135e
copy: distinguish "file exists" cases and add a hint (BC)
Augie Fackler <augie@google.com>
parents:
30142
diff
changeset
|
1120 ui.warn(hint) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1121 return |
5607 | 1122 |
1123 if after: | |
5608 | 1124 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
|
1125 if rename: |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1126 ui.warn(_('%s: not recording move - %s does not exist\n') % |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1127 (relsrc, reltarget)) |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1128 else: |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1129 ui.warn(_('%s: not recording copy - %s does not exist\n') % |
e8d10d085f47
cmdutil: Warn when trying to copy/rename --after to a nonexistant file.
Steve Losh <steve@stevelosh.com>
parents:
11061
diff
changeset
|
1130 (relsrc, reltarget)) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1131 return |
5608 | 1132 elif not dryrun: |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1133 try: |
5608 | 1134 if exists: |
1135 os.unlink(target) | |
1136 targetdir = os.path.dirname(target) or '.' | |
1137 if not os.path.isdir(targetdir): | |
1138 os.makedirs(targetdir) | |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1139 if samefile: |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1140 tmp = target + "~hgrename" |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1141 os.rename(src, tmp) |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1142 os.rename(tmp, target) |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1143 else: |
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1144 util.copyfile(src, target) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
1145 srcexists = True |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25657
diff
changeset
|
1146 except IOError as inst: |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1147 if inst.errno == errno.ENOENT: |
24364
135b23868f45
commands: replace "working copy" with "working directory" in help/messages
Yuya Nishihara <yuya@tcha.org>
parents:
24359
diff
changeset
|
1148 ui.warn(_('%s: deleted in working directory\n') % relsrc) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
1149 srcexists = False |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1150 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1151 ui.warn(_('%s: cannot copy - %s\n') % |
34022
d5b2beca16c0
python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents:
34019
diff
changeset
|
1152 (relsrc, encoding.strtolocal(inst.strerror))) |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1153 return True # report a failure |
5607 | 1154 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1155 if ui.verbose or not exact: |
7894
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1156 if rename: |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1157 ui.status(_('moving %s to %s\n') % (relsrc, reltarget)) |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1158 else: |
caef5fdf1375
cmdutil: fix untranslatable string in copy
Martin Geisler <mg@daimi.au.dk>
parents:
7879
diff
changeset
|
1159 ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) |
5608 | 1160 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1161 targets[abstarget] = abssrc |
5607 | 1162 |
1163 # fix up dirstate | |
14321
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
1164 scmutil.dirstatecopy(ui, repo, wctx, abssrc, abstarget, |
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
1165 dryrun=dryrun, cwd=cwd) |
5610
2493a478f395
copy: handle rename internally
Matt Mackall <mpm@selenic.com>
parents:
5609
diff
changeset
|
1166 if rename and not dryrun: |
16283
6c4dbe28dda3
rename: handle case-changing (issue1717)
Matt Mackall <mpm@selenic.com>
parents:
16165
diff
changeset
|
1167 if not after and srcexists and not samefile: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31237
diff
changeset
|
1168 repo.wvfs.unlinkpath(abssrc) |
14518
a67e866f46f9
workingctx: eliminate remove function
Adrian Buehlmann <adrian@cadifra.com>
parents:
14442
diff
changeset
|
1169 wctx.forget([abssrc]) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1170 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1171 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1172 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1173 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1174 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1175 def targetpathfn(pat, dest, srcs): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1176 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
|
1177 abspfx = pathutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1178 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1179 if destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1180 striplen = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1181 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1182 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1183 if striplen: |
30615
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30534
diff
changeset
|
1184 striplen += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1185 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
|
1186 elif destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1187 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1188 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1189 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1190 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1191 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1192 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1193 # pat: ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1194 # dest ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1195 # srcs: list of (hgsep, hgsep, ossep, bool) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1196 # return: function that takes hgsep and returns ossep |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1197 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
|
1198 if matchmod.patkind(pat): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1199 # a mercurial pattern |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1200 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1201 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1202 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
|
1203 abspfx = pathutil.canonpath(repo.root, cwd, pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1204 if len(abspfx) < len(srcs[0][0]): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1205 # 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
|
1206 # 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
|
1207 def evalpath(striplen): |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1208 score = 0 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1209 for s in srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1210 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
|
1211 if os.path.lexists(t): |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1212 score += 1 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1213 return score |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1214 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1215 abspfx = util.localpath(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1216 striplen = len(abspfx) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1217 if striplen: |
30615
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30534
diff
changeset
|
1218 striplen += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1219 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
|
1220 score = evalpath(striplen) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1221 striplen1 = len(os.path.split(abspfx)[0]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1222 if striplen1: |
30615
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30534
diff
changeset
|
1223 striplen1 += len(pycompat.ossep) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1224 if evalpath(striplen1) > score: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1225 striplen = striplen1 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1226 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1227 util.localpath(p)[striplen:]) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1228 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1229 # a file |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1230 if destdirexists: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1231 res = lambda p: os.path.join(dest, |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1232 os.path.basename(util.localpath(p))) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1233 else: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1234 res = lambda p: dest |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1235 return res |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1236 |
14321
003d63bb4fa5
scmutil: drop some aliases in cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14320
diff
changeset
|
1237 pats = scmutil.expandpats(pats) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1238 if not pats: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1239 raise error.Abort(_('no source or destination specified')) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1240 if len(pats) == 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1241 raise error.Abort(_('no destination specified')) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1242 dest = pats.pop() |
6258
c24f4b3f156b
Fix issue995 (copy --after and symlinks pointing to a directory)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
1243 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
|
1244 if not destdirexists: |
12085
6f833fc3ccab
Consistently import foo as foomod when foo to avoid shadowing
Martin Geisler <mg@aragost.com>
parents:
12032
diff
changeset
|
1245 if len(pats) > 1 or matchmod.patkind(pats[0]): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1246 raise error.Abort(_('with multiple sources, destination must be an ' |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1247 'existing directory')) |
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
|
1248 if util.endswithsep(dest): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1249 raise error.Abort(_('destination %s is not a directory') % dest) |
5607 | 1250 |
1251 tfn = targetpathfn | |
1252 if after: | |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1253 tfn = targetpathafterfn |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1254 copylist = [] |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1255 for pat in pats: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1256 srcs = walkpat(pat) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1257 if not srcs: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1258 continue |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1259 copylist.append((tfn(pat, dest, srcs), srcs)) |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1260 if not copylist: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1261 raise error.Abort(_('no files to copy')) |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1262 |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1263 errors = 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1264 for targetpath, srcs in copylist: |
5605
e7a9ad999308
copy: refactor okaytocopy into walkpat
Matt Mackall <mpm@selenic.com>
parents:
5604
diff
changeset
|
1265 for abssrc, relsrc, exact in srcs: |
5606
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1266 if copyfile(abssrc, relsrc, targetpath(abssrc), exact): |
447ea621e50e
copy: propagate errors properly
Matt Mackall <mpm@selenic.com>
parents:
5605
diff
changeset
|
1267 errors += 1 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1268 |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1269 if errors: |
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1270 ui.warn(_('(consider using --after)\n')) |
5609 | 1271 |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11152
diff
changeset
|
1272 return errors != 0 |
5589
9981b6b19ecf
move commands.docopy to cmdutil.copy
Matt Mackall <mpm@selenic.com>
parents:
5550
diff
changeset
|
1273 |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1274 ## 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
|
1275 # 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
|
1276 extrapreimport = [] # run before commit |
26562
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1277 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
|
1278 # 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
|
1279 # |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1280 # '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
|
1281 # arguments: |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1282 # - 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
|
1283 # - 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
|
1284 # - 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
|
1285 # - 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
|
1286 # 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
|
1287 # 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
|
1288 # there. |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1289 extrapreimportmap = {} |
26562
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1290 # '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
|
1291 # argument: |
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1292 # - 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
|
1293 extrapostimportmap = {} |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1294 |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1295 def tryimportone(ui, repo, hunk, parents, opts, msgs, updatefunc): |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1296 """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
|
1297 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1298 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
|
1299 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
|
1300 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1301 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
|
1302 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
|
1303 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1304 :hunk: a patch (as a binary string) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1305 :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
|
1306 :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
|
1307 :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
|
1308 (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
|
1309 :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
|
1310 updatefunc(<repo>, <node>) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1311 """ |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
1312 # avoid cycle context -> subrepo -> cmdutil |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
1313 from . import context |
26547
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1314 extractdata = patch.extract(ui, hunk) |
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1315 tmpname = extractdata.get('filename') |
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1316 message = extractdata.get('message') |
27612
a0dfe8d286fe
import: refactor date and user handling
timeless <timeless@mozdev.org>
parents:
27611
diff
changeset
|
1317 user = opts.get('user') or extractdata.get('user') |
a0dfe8d286fe
import: refactor date and user handling
timeless <timeless@mozdev.org>
parents:
27611
diff
changeset
|
1318 date = opts.get('date') or extractdata.get('date') |
26547
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1319 branch = extractdata.get('branch') |
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1320 nodeid = extractdata.get('nodeid') |
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1321 p1 = extractdata.get('p1') |
b9be8ab6e628
patch: move 'extract' return to a dictionnary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26545
diff
changeset
|
1322 p2 = extractdata.get('p2') |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1323 |
27613
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1324 nocommit = opts.get('no_commit') |
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1325 importbranch = opts.get('import_branch') |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1326 update = not opts.get('bypass') |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1327 strip = opts["strip"] |
24259
5ac8ce04baa2
cmdutil.tryimportone: allow importing relative patches into the working dir
Siddharth Agarwal <sid0@fb.com>
parents:
24222
diff
changeset
|
1328 prefix = opts["prefix"] |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1329 sim = float(opts.get('similarity') or 0) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1330 if not tmpname: |
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
|
1331 return (None, None, False) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1332 |
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
|
1333 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
|
1334 |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1335 try: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1336 cmdline_message = logmessage(ui, opts) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1337 if cmdline_message: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1338 # pickup the cmdline msg |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1339 message = cmdline_message |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1340 elif message: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1341 # pickup the patch msg |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1342 message = message.strip() |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1343 else: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1344 # launch the editor |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1345 message = None |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1346 ui.debug('message:\n%s\n' % message) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1347 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1348 if len(parents) == 1: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1349 parents.append(repo[nullid]) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1350 if opts.get('exact'): |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1351 if not nodeid or not p1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1352 raise error.Abort(_('not a Mercurial patch')) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1353 p1 = repo[p1] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1354 p2 = repo[p2 or nullid] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1355 elif p2: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1356 try: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1357 p1 = repo[p1] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1358 p2 = repo[p2] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1359 # Without any options, consider p2 only if the |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1360 # patch is being applied on top of the recorded |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1361 # first parent. |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1362 if p1 != parents[0]: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1363 p1 = parents[0] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1364 p2 = repo[nullid] |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1365 except error.RepoError: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1366 p1, p2 = parents |
22303
0c838e7459a5
import: show the warning message for failure of merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22301
diff
changeset
|
1367 if p2.node() == nullid: |
0c838e7459a5
import: show the warning message for failure of merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22301
diff
changeset
|
1368 ui.warn(_("warning: import the patch as a normal revision\n" |
0c838e7459a5
import: show the warning message for failure of merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22301
diff
changeset
|
1369 "(use --exact to import the patch as a merge)\n")) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1370 else: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1371 p1, p2 = parents |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1372 |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1373 n = None |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1374 if update: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1375 if p1 != parents[0]: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1376 updatefunc(repo, p1.node()) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1377 if p2 != parents[1]: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1378 repo.setparents(p1.node(), p2.node()) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1379 |
27613
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1380 if opts.get('exact') or importbranch: |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1381 repo.dirstate.setbranch(branch or 'default') |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1382 |
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
|
1383 partial = opts.get('partial', False) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1384 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
|
1385 try: |
24259
5ac8ce04baa2
cmdutil.tryimportone: allow importing relative patches into the working dir
Siddharth Agarwal <sid0@fb.com>
parents:
24222
diff
changeset
|
1386 patch.patch(ui, repo, tmpname, strip=strip, prefix=prefix, |
5ac8ce04baa2
cmdutil.tryimportone: allow importing relative patches into the working dir
Siddharth Agarwal <sid0@fb.com>
parents:
24222
diff
changeset
|
1387 files=files, eolmode=None, similarity=sim / 100.0) |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
1388 except error.PatchError as e: |
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
|
1389 if not partial: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1390 raise error.Abort(str(e)) |
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
|
1391 if partial: |
bee0e1cffdd3
import: add --partial flag to create a changeset despite failed hunks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21419
diff
changeset
|
1392 rejects = True |
bee0e1cffdd3
import: add --partial flag to create a changeset despite failed hunks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21419
diff
changeset
|
1393 |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1394 files = list(files) |
27613
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1395 if nocommit: |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1396 if message: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1397 msgs.append(message) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1398 else: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1399 if opts.get('exact') or p2: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1400 # If you got here, you either use --force and know what |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1401 # you are doing or used --exact or a merge patch while |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1402 # being updated to its first parent. |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1403 m = None |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1404 else: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1405 m = scmutil.matchfiles(repo, files or []) |
22250
f3200bf460a8
import: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22249
diff
changeset
|
1406 editform = mergeeditform(repo[None], 'import.normal') |
22278
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1407 if opts.get('exact'): |
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1408 editor = None |
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1409 else: |
35350
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
1410 editor = getcommiteditor(editform=editform, |
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
1411 **pycompat.strkwargs(opts)) |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1412 extra = {} |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1413 for idfunc in extrapreimport: |
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1414 extrapreimportmap[idfunc](repo, extractdata, extra, opts) |
31457 | 1415 overrides = {} |
1416 if partial: | |
1417 overrides[('ui', 'allowemptycommit')] = True | |
1418 with repo.ui.configoverride(overrides, 'import'): | |
27612
a0dfe8d286fe
import: refactor date and user handling
timeless <timeless@mozdev.org>
parents:
27611
diff
changeset
|
1419 n = repo.commit(message, user, |
a0dfe8d286fe
import: refactor date and user handling
timeless <timeless@mozdev.org>
parents:
27611
diff
changeset
|
1420 date, match=m, |
26561
1f14920a892c
import: allow processing of extra part header during import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26547
diff
changeset
|
1421 editor=editor, extra=extra) |
26562
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1422 for idfunc in extrapostimport: |
dd2f5e014806
import: allow processing of extra part header after import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26561
diff
changeset
|
1423 extrapostimportmap[idfunc](repo[n]) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1424 else: |
27613
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1425 if opts.get('exact') or importbranch: |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1426 branch = branch or 'default' |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1427 else: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1428 branch = p1.branch() |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1429 store = patch.filestore() |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1430 try: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1431 files = set() |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1432 try: |
24260
76225ab5a5da
cmdutil.tryimportone: allow importing relative patches with --bypass
Siddharth Agarwal <sid0@fb.com>
parents:
24259
diff
changeset
|
1433 patch.patchrepo(ui, repo, p1, store, tmpname, strip, prefix, |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1434 files, eolmode=None) |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
1435 except error.PatchError as e: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1436 raise error.Abort(str(e)) |
22278
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1437 if opts.get('exact'): |
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1438 editor = None |
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1439 else: |
ffaaa80fa724
import: avoid editor invocation when importing with "--exact" for exact-ness
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22260
diff
changeset
|
1440 editor = getcommiteditor(editform='import.bypass') |
32765
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1441 memctx = context.memctx(repo, (p1.node(), p2.node()), |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1442 message, |
32765
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1443 files=files, |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1444 filectxfn=store, |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1445 user=user, |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1446 date=date, |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32662
diff
changeset
|
1447 branch=branch, |
22011
97acb4504704
import: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22010
diff
changeset
|
1448 editor=editor) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1449 n = memctx.commit() |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1450 finally: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1451 store.close() |
27613
dffd2ed9a7c4
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org>
parents:
27612
diff
changeset
|
1452 if opts.get('exact') and nocommit: |
22485
efedda4aed49
import: let --exact 'work' with --no-commit (issue4376)
Matt Mackall <mpm@selenic.com>
parents:
22427
diff
changeset
|
1453 # --exact with --no-commit is still useful in that it does merge |
efedda4aed49
import: let --exact 'work' with --no-commit (issue4376)
Matt Mackall <mpm@selenic.com>
parents:
22427
diff
changeset
|
1454 # and branch bits |
efedda4aed49
import: let --exact 'work' with --no-commit (issue4376)
Matt Mackall <mpm@selenic.com>
parents:
22427
diff
changeset
|
1455 ui.warn(_("warning: can't check exact import with --no-commit\n")) |
efedda4aed49
import: let --exact 'work' with --no-commit (issue4376)
Matt Mackall <mpm@selenic.com>
parents:
22427
diff
changeset
|
1456 elif opts.get('exact') and hex(n) != nodeid: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1457 raise error.Abort(_('patch is damaged or loses information')) |
27611
fa8c491f2deb
import: limit scope of msg in tryimportone
timeless <timeless@mozdev.org>
parents:
27533
diff
changeset
|
1458 msg = _('applied to working directory') |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1459 if n: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1460 # i18n: refers to a short changeset id |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1461 msg = _('created %s') % short(n) |
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
|
1462 return (msg, n, rejects) |
20500
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1463 finally: |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1464 os.unlink(tmpname) |
ce3f3082ec45
import: move tryone closure in cmdutil
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20470
diff
changeset
|
1465 |
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
|
1466 # 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
|
1467 # 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
|
1468 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
|
1469 # 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
|
1470 # 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
|
1471 # 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
|
1472 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
|
1473 |
32433
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1474 def _exportsingle(repo, ctx, match, switch_parent, rev, seqno, write, diffopts): |
32662
9d201b39ccd9
export: map wctx.node() to 'ff...' node id (issue5438)
Yuya Nishihara <yuya@tcha.org>
parents:
32658
diff
changeset
|
1475 node = scmutil.binnode(ctx) |
32433
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1476 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:
32432
diff
changeset
|
1477 branch = ctx.branch() |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1478 if switch_parent: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1479 parents.reverse() |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1480 |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1481 if parents: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1482 prev = parents[0] |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1483 else: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1484 prev = nullid |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1485 |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1486 write("# HG changeset patch\n") |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1487 write("# User %s\n" % ctx.user()) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1488 write("# Date %d %d\n" % ctx.date()) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1489 write("# %s\n" % util.datestr(ctx.date())) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1490 if branch and branch != 'default': |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1491 write("# Branch %s\n" % branch) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1492 write("# Node ID %s\n" % hex(node)) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1493 write("# Parent %s\n" % hex(prev)) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1494 if len(parents) > 1: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1495 write("# Parent %s\n" % hex(parents[1])) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1496 |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1497 for headerid in extraexport: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1498 header = extraexportmap[headerid](seqno, ctx) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1499 if header is not None: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1500 write('# %s\n' % header) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1501 write(ctx.description().rstrip()) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1502 write("\n\n") |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1503 |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1504 for chunk, label in patch.diffui(repo, prev, node, match, opts=diffopts): |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1505 write(chunk, label=label) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1506 |
32431
9fd9f91b0c43
cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents:
32430
diff
changeset
|
1507 def export(repo, revs, fntemplate='hg-%h.patch', fp=None, switch_parent=False, |
26229
d1530c6e8613
extdiff: enable -I/-X with --patch
Matt Harbison <matt_harbison@yahoo.com>
parents:
26222
diff
changeset
|
1508 opts=None, match=None): |
32430
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1509 '''export changesets as hg patches |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1510 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1511 Args: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1512 repo: The repository from which we're exporting revisions. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1513 revs: A list of revisions to export as revision numbers. |
32431
9fd9f91b0c43
cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents:
32430
diff
changeset
|
1514 fntemplate: An optional string to use for generating patch file names. |
32430
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1515 fp: An optional file-like object to which patches should be written. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1516 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:
32382
diff
changeset
|
1517 Default is false, which always shows diff against p1. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1518 opts: diff options to use for generating the patch. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1519 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:
32382
diff
changeset
|
1520 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1521 Returns: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1522 Nothing. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1523 |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1524 Side Effect: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1525 "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:
32382
diff
changeset
|
1526 destinations: |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1527 fp is specified: All revs are written to the specified |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1528 file-like object. |
32431
9fd9f91b0c43
cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com>
parents:
32430
diff
changeset
|
1529 fntemplate specified: Each rev is written to a unique file named using |
32430
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1530 the given template. |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1531 Neither fp nor template specified: All revs written to repo.ui.write() |
1f4be037f558
cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com>
parents:
32382
diff
changeset
|
1532 ''' |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
1533 |
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
1534 total = len(revs) |
32432
75544176bc28
cmdutil: use a generator expression instead of a list comprehension
Augie Fackler <augie@google.com>
parents:
32431
diff
changeset
|
1535 revwidth = max(len(str(rev)) for rev in revs) |
18613
1a2f4c633410
export: clobber files with -o (bc) (issue3652)
Augie Fackler <raf@durin42.com>
parents:
18538
diff
changeset
|
1536 filemode = {} |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
1537 |
32434
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1538 write = None |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1539 dest = '<unnamed>' |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1540 if fp: |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1541 dest = getattr(fp, 'name', dest) |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1542 def write(s, **kw): |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1543 fp.write(s) |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1544 elif not fntemplate: |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1545 write = repo.ui.write |
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1546 |
32433
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1547 for seqno, rev in enumerate(revs, 1): |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
1548 ctx = repo[rev] |
32433
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1549 fo = None |
32434
69c864149d69
cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com>
parents:
32433
diff
changeset
|
1550 if not fp and fntemplate: |
14986
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
1551 desc_lines = ctx.description().rstrip().split('\n') |
70e11de6964d
export: add %m to file format string (first line of the commit message)
Andrzej Bieniek <andyhelp@gmail.com>
parents:
14948
diff
changeset
|
1552 desc = desc_lines[0] #Commit always has a first line. |
32433
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1553 fo = makefileobj(repo, fntemplate, ctx.node(), desc=desc, |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1554 total=total, seqno=seqno, revwidth=revwidth, |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1555 mode='wb', modemap=filemode) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1556 dest = fo.name |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1557 def write(s, **kw): |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1558 fo.write(s) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1559 if not dest.startswith('<'): |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1560 repo.ui.note("%s\n" % dest) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1561 _exportsingle( |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1562 repo, ctx, match, switch_parent, rev, seqno, write, opts) |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1563 if fo is not None: |
7feaf5550a9e
cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com>
parents:
32432
diff
changeset
|
1564 fo.close() |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10608
diff
changeset
|
1565 |
29795
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1566 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
|
1567 """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
|
1568 |
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
1569 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
|
1570 if index is not None: |
29795
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1571 fm.write('index', '%i ', index) |
33856
eae63a9e59da
obsmarker: precnode was renamed into prednode
Boris Feld <boris.feld@octobus.net>
parents:
33824
diff
changeset
|
1572 fm.write('prednode', '%s ', hex(marker.prednode())) |
29795
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1573 succs = marker.succnodes() |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1574 fm.condwrite(succs, 'succnodes', '%s ', |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1575 fm.formatlist(map(hex, succs), name='node')) |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1576 fm.write('flag', '%X ', marker.flags()) |
22260
2229d757802d
debugobsolete: display parents information from markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22250
diff
changeset
|
1577 parents = marker.parentnodes() |
2229d757802d
debugobsolete: display parents information from markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22250
diff
changeset
|
1578 if parents is not None: |
29795
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1579 fm.write('parentnodes', '{%s} ', |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1580 fm.formatlist(map(hex, parents), name='node', sep=', ')) |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1581 fm.write('date', '(%s) ', fm.formatdate(marker.date())) |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1582 meta = marker.metadata().copy() |
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1583 meta.pop('date', None) |
35904
fc44c2657dc5
py3: drop b'' from repr() of smartset
Yuya Nishihara <yuya@tcha.org>
parents:
35903
diff
changeset
|
1584 smeta = util.rapply(pycompat.maybebytestr, meta) |
35874
1bee7762fd46
cmdutil: add a kludge to make bytes repr() the same on 2 and 3
Augie Fackler <augie@google.com>
parents:
35746
diff
changeset
|
1585 fm.write('metadata', '{%s}', fm.formatdict(smeta, fmt='%r: %r', sep=', ')) |
29795
142ae01820a3
debugobsolete: add formatter support (issue5134)
Yuya Nishihara <yuya@tcha.org>
parents:
29758
diff
changeset
|
1586 fm.plain('\n') |
20470
78f4c2b7052f
debugobsolete: extract marker display in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20392
diff
changeset
|
1587 |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
1588 def finddate(ui, repo, date): |
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
1589 """Find the tipmost changeset that matches the given date spec""" |
9667 | 1590 |
5836
c5c9a022bd9a
Tweak finddate to pass date directly.
mark.williamson@cl.cam.ac.uk
parents:
5829
diff
changeset
|
1591 df = util.matchdate(date) |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14321
diff
changeset
|
1592 m = scmutil.matchall(repo) |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
1593 results = {} |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1594 |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1595 def prep(ctx, fns): |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1596 d = ctx.date() |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1597 if df(d[0]): |
9668
2c24471d478c
cmdutil: fix bug in finddate() implementation
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9667
diff
changeset
|
1598 results[ctx.rev()] = d |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1599 |
9667 | 1600 for ctx in walkchangerevs(repo, m, {'rev': None}, prep): |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1601 rev = ctx.rev() |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1602 if rev in results: |
16937
5487088f0d43
cmdutil: lowercase finddate status message
Martin Geisler <mg@aragost.com>
parents:
16776
diff
changeset
|
1603 ui.status(_("found revision %s from %s\n") % |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1604 (rev, util.datestr(results[rev]))) |
32155
055cca8e167b
py3: use %d to format integers into bytestrings
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32153
diff
changeset
|
1605 return '%d' % rev |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
1606 |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1607 raise error.Abort(_("revision matching date not found")) |
3814
120be84f33de
Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents:
3738
diff
changeset
|
1608 |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1609 def increasingwindows(windowsize=8, sizelimit=512): |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1610 while True: |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1611 yield windowsize |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1612 if windowsize < sizelimit: |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1613 windowsize *= 2 |
16776
5088d0b9a9a1
cmdutil: extract increasing_windows() from walkchangerevs()
Patrick Mezard <patrick@mezard.eu>
parents:
16701
diff
changeset
|
1614 |
35682
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1615 def _walkrevs(repo, opts): |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1616 # Default --rev value depends on --follow but --follow behavior |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1617 # depends on revisions resolved from --rev... |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1618 follow = opts.get('follow') or opts.get('follow_first') |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1619 if opts.get('rev'): |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1620 revs = scmutil.revrange(repo, opts['rev']) |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1621 elif follow and repo.dirstate.p1() == nullid: |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1622 revs = smartset.baseset() |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1623 elif follow: |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1624 revs = repo.revs('reverse(:.)') |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1625 else: |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1626 revs = smartset.spanset(repo) |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1627 revs.reverse() |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1628 return revs |
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1629 |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1630 class FileWalkError(Exception): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1631 pass |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1632 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1633 def walkfilerevs(repo, match, follow, revs, fncache): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1634 '''Walks the file history for the matched files. |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1635 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1636 Returns the changeset revs that are involved in the file history. |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1637 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1638 Throws FileWalkError if the file history can't be walked using |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1639 filelogs alone. |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1640 ''' |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1641 wanted = set() |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1642 copies = [] |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1643 minrev, maxrev = min(revs), max(revs) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1644 def filerevgen(filelog, last): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1645 """ |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1646 Only files, no patterns. Check the history of each file. |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1647 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1648 Examines filelog entries within minrev, maxrev linkrev range |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1649 Returns an iterator yielding (linkrev, parentlinkrevs, copied) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1650 tuples in backwards order |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1651 """ |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1652 cl_count = len(repo) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1653 revs = [] |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1654 for j in xrange(0, last + 1): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1655 linkrev = filelog.linkrev(j) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1656 if linkrev < minrev: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1657 continue |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1658 # only yield rev for which we have the changelog, it can |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1659 # happen while doing "hg log" during a pull or commit |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1660 if linkrev >= cl_count: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1661 break |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1662 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1663 parentlinkrevs = [] |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1664 for p in filelog.parentrevs(j): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1665 if p != nullrev: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1666 parentlinkrevs.append(filelog.linkrev(p)) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1667 n = filelog.node(j) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1668 revs.append((linkrev, parentlinkrevs, |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1669 follow and filelog.renamed(n))) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1670 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1671 return reversed(revs) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1672 def iterfiles(): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1673 pctx = repo['.'] |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1674 for filename in match.files(): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1675 if follow: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1676 if filename not in pctx: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1677 raise error.Abort(_('cannot follow file not in parent ' |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1678 'revision: "%s"') % filename) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1679 yield filename, pctx[filename].filenode() |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1680 else: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1681 yield filename, None |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1682 for filename_node in copies: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1683 yield filename_node |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1684 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1685 for file_, node in iterfiles(): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1686 filelog = repo.file(file_) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1687 if not len(filelog): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1688 if node is None: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1689 # A zero count may be a directory or deleted file, so |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1690 # try to find matching entries on the slow path. |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1691 if follow: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1692 raise error.Abort( |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1693 _('cannot follow nonexistent file: "%s"') % file_) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1694 raise FileWalkError("Cannot walk via filelog") |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1695 else: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1696 continue |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1697 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1698 if node is None: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1699 last = len(filelog) - 1 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1700 else: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1701 last = filelog.rev(node) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1702 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1703 # keep track of all ancestors of the file |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32289
diff
changeset
|
1704 ancestors = {filelog.linkrev(last)} |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1705 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1706 # iterate from latest to oldest revision |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1707 for rev, flparentlinkrevs, copied in filerevgen(filelog, last): |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1708 if not follow: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1709 if rev > maxrev: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1710 continue |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1711 else: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1712 # Note that last might not be the first interesting |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1713 # rev to us: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1714 # if the file has been changed after maxrev, we'll |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1715 # have linkrev(last) > maxrev, and we still need |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1716 # to explore the file graph |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1717 if rev not in ancestors: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1718 continue |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1719 # XXX insert 1327 fix here |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1720 if flparentlinkrevs: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1721 ancestors.update(flparentlinkrevs) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1722 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1723 fncache.setdefault(rev, []).append(file_) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1724 wanted.add(rev) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1725 if copied: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1726 copies.append(copied) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1727 |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1728 return wanted |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1729 |
24391
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1730 class _followfilter(object): |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1731 def __init__(self, repo, onlyfirst=False): |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1732 self.repo = repo |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1733 self.startrev = nullrev |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1734 self.roots = set() |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1735 self.onlyfirst = onlyfirst |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1736 |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1737 def match(self, rev): |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1738 def realparents(rev): |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1739 if self.onlyfirst: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1740 return self.repo.changelog.parentrevs(rev)[0:1] |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1741 else: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1742 return filter(lambda x: x != nullrev, |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1743 self.repo.changelog.parentrevs(rev)) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1744 |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1745 if self.startrev == nullrev: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1746 self.startrev = rev |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1747 return True |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1748 |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1749 if rev > self.startrev: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1750 # forward: all descendants |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1751 if not self.roots: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1752 self.roots.add(self.startrev) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1753 for parent in realparents(rev): |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1754 if parent in self.roots: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1755 self.roots.add(rev) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1756 return True |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1757 else: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1758 # backwards: all parents |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1759 if not self.roots: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1760 self.roots.update(realparents(self.startrev)) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1761 if rev in self.roots: |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1762 self.roots.remove(rev) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1763 self.roots.update(realparents(rev)) |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1764 return True |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1765 |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1766 return False |
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1767 |
9665
1de5ebfa5585
walkchangerevs: drop ui arg
Matt Mackall <mpm@selenic.com>
parents:
9664
diff
changeset
|
1768 def walkchangerevs(repo, match, opts, prepare): |
7807
bd8f44638847
help: miscellaneous language fixes
timeless <timeless@gmail.com>
parents:
7779
diff
changeset
|
1769 '''Iterate over files and the revs in which they changed. |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1770 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1771 Callers most commonly need to iterate backwards over the history |
7807
bd8f44638847
help: miscellaneous language fixes
timeless <timeless@gmail.com>
parents:
7779
diff
changeset
|
1772 in which they are interested. Doing so has awful (quadratic-looking) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1773 performance, so we use iterators in a "windowed" way. |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1774 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1775 We walk a window of revisions in the desired order. Within the |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1776 window, we first walk forwards to gather data, then in the desired |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1777 order (usually backwards) to display it. |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1778 |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1779 This function returns an iterator yielding contexts. Before |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1780 yielding each context, the iterator will first call the prepare |
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1781 function on each context in the window in forward order.''' |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1782 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1783 follow = opts.get('follow') or opts.get('follow_first') |
35682
8273c1a47282
log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org>
parents:
35662
diff
changeset
|
1784 revs = _walkrevs(repo, opts) |
11281
b724b8467b82
walkchangerevs: allow empty query sets
Matt Mackall <mpm@selenic.com>
parents:
11277
diff
changeset
|
1785 if not revs: |
b724b8467b82
walkchangerevs: allow empty query sets
Matt Mackall <mpm@selenic.com>
parents:
11277
diff
changeset
|
1786 return [] |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
1787 wanted = set() |
35458
5bec509dc1ff
log: make "slowpath" condition slightly more readable
Yuya Nishihara <yuya@tcha.org>
parents:
35454
diff
changeset
|
1788 slowpath = match.anypats() or (not match.always() and opts.get('removed')) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1789 fncache = {} |
16108
f7e0d95d0a0b
log: remove caching of all visited revisions (issue3253)
Matt Mackall <mpm@selenic.com>
parents:
16070
diff
changeset
|
1790 change = repo.changectx |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1791 |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1792 # First step is to fill wanted, the set of revisions that we want to yield. |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1793 # When it does not induce extra cost, we also fill fncache for revisions in |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1794 # wanted: a cache of filenames that were changed (ctx.files()) and that |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1795 # match the file filtering conditions. |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1796 |
24384
5cb459dc32d2
walkchangerevs: simplify by using match.always() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
24379
diff
changeset
|
1797 if match.always(): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1798 # No files, no patterns. Display all revs. |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1799 wanted = revs |
25271
1b1eaf1885df
walkchangerevs: simplify with an 'elif'
Martin von Zweigbergk <martinvonz@google.com>
parents:
25259
diff
changeset
|
1800 elif not slowpath: |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1801 # We only have to read through the filelog to find wanted revisions |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1802 |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1803 try: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1804 wanted = walkfilerevs(repo, match, follow, revs, fncache) |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1805 except FileWalkError: |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1806 slowpath = True |
11608
183e63112698
log: remove increasing windows usage in fastpath
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11607
diff
changeset
|
1807 |
19290
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1808 # We decided to fall back to the slowpath because at least one |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1809 # of the paths was not a file. Check to see if at least one of them |
f21f4a1b6c24
log: move log file walk to its own function
Durham Goode <durham@fb.com>
parents:
19211
diff
changeset
|
1810 # existed in history, otherwise simply return |
17746
6d218e47cf9b
log: speed up hg log for untracked files (issue1340)
smuralid
parents:
17676
diff
changeset
|
1811 for path in match.files(): |
6d218e47cf9b
log: speed up hg log for untracked files (issue1340)
smuralid
parents:
17676
diff
changeset
|
1812 if path == '.' or path in repo.store: |
6d218e47cf9b
log: speed up hg log for untracked files (issue1340)
smuralid
parents:
17676
diff
changeset
|
1813 break |
18340
8802277c40ee
log: make log work even if first parameter doesn't exist
Mads Kiilerich <mads@kiilerich.com>
parents:
18267
diff
changeset
|
1814 else: |
8802277c40ee
log: make log work even if first parameter doesn't exist
Mads Kiilerich <mads@kiilerich.com>
parents:
18267
diff
changeset
|
1815 return [] |
17746
6d218e47cf9b
log: speed up hg log for untracked files (issue1340)
smuralid
parents:
17676
diff
changeset
|
1816 |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1817 if slowpath: |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1818 # We have to read the changelog to match filenames against |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1819 # changed files |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1820 |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1821 if follow: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
1822 raise error.Abort(_('can only follow copies/renames for explicit ' |
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8731
diff
changeset
|
1823 'filenames')) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1824 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1825 # The slow path checks files modified in every changeset. |
19730
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1826 # This is really slow on large repos, so compute the set lazily. |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1827 class lazywantedset(object): |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1828 def __init__(self): |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1829 self.set = set() |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1830 self.revs = set(revs) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1831 |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1832 # No need to worry about locality here because it will be accessed |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1833 # in the same order as the increasing window below. |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1834 def __contains__(self, value): |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1835 if value in self.set: |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1836 return True |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1837 elif not value in self.revs: |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1838 return False |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1839 else: |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1840 self.revs.discard(value) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1841 ctx = change(value) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1842 matches = filter(match, ctx.files()) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1843 if matches: |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1844 fncache[value] = matches |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1845 self.set.add(value) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1846 return True |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1847 return False |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1848 |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1849 def discard(self, value): |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1850 self.revs.discard(value) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1851 self.set.discard(value) |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1852 |
d184bae667e4
log: make file log slow path usable on large repos
Durham Goode <durham@fb.com>
parents:
19511
diff
changeset
|
1853 wanted = lazywantedset() |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1854 |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1855 # it might be worthwhile to do this in the iterator if the rev range |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1856 # is descending and the prune args are all within that range |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1857 for rev in opts.get('prune', ()): |
16380
84ba30e8c790
cmdutil: use context instead of lookup
Matt Mackall <mpm@selenic.com>
parents:
16304
diff
changeset
|
1858 rev = repo[rev].rev() |
24391
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1859 ff = _followfilter(repo) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1860 stop = min(revs[0], revs[-1]) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1861 for x in xrange(rev, stop - 1, -1): |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8119
diff
changeset
|
1862 if ff.match(x): |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1863 wanted = wanted - [x] |
18710
49ef9d0ca815
cmdutil: use a small initial window with --limit
Bryan O'Sullivan <bryano@fb.com>
parents:
18688
diff
changeset
|
1864 |
11632
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1865 # Now that wanted is correctly initialized, we can iterate over the |
f418d2570920
log: document the different phases in walkchangerevs
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11631
diff
changeset
|
1866 # revision range, yielding only revisions in wanted. |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1867 def iterate(): |
25272
6c76c42a5893
walkchangerevs: avoid match.files() in conditions
Martin von Zweigbergk <martinvonz@google.com>
parents:
25271
diff
changeset
|
1868 if follow and match.always(): |
24391
6c3a93e690c7
walkchangerevs: make followfilter a top-level class
Martin von Zweigbergk <martinvonz@google.com>
parents:
24384
diff
changeset
|
1869 ff = _followfilter(repo, onlyfirst=opts.get('follow_first')) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1870 def want(rev): |
8119
af44d0b953c6
cmdutil: return boolean result directly in want function
Martin Geisler <mg@lazybytes.net>
parents:
8117
diff
changeset
|
1871 return ff.match(rev) and rev in wanted |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1872 else: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1873 def want(rev): |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1874 return rev in wanted |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1875 |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1876 it = iter(revs) |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1877 stopiteration = False |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1878 for windowsize in increasingwindows(): |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1879 nrevs = [] |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1880 for i in xrange(windowsize): |
25147
fb7b9a765bb9
walkchangerevs: replace try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25119
diff
changeset
|
1881 rev = next(it, None) |
fb7b9a765bb9
walkchangerevs: replace try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25119
diff
changeset
|
1882 if rev is None: |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1883 stopiteration = True |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1884 break |
25147
fb7b9a765bb9
walkchangerevs: replace try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25119
diff
changeset
|
1885 elif want(rev): |
fb7b9a765bb9
walkchangerevs: replace try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25119
diff
changeset
|
1886 nrevs.append(rev) |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8189
diff
changeset
|
1887 for rev in sorted(nrevs): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1888 fns = fncache.get(rev) |
9654
96fe91be9c1e
walkchangerevs: yield contexts
Matt Mackall <mpm@selenic.com>
parents:
9653
diff
changeset
|
1889 ctx = change(rev) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1890 if not fns: |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1891 def fns_generator(): |
9654
96fe91be9c1e
walkchangerevs: yield contexts
Matt Mackall <mpm@selenic.com>
parents:
9653
diff
changeset
|
1892 for f in ctx.files(): |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1893 if match(f): |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1894 yield f |
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1895 fns = fns_generator() |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1896 prepare(ctx, fns) |
3650
731e739b8659
move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents:
3649
diff
changeset
|
1897 for rev in nrevs: |
9662
f3d60543924f
walkchangerevs: move 'add' to callback
Matt Mackall <mpm@selenic.com>
parents:
9656
diff
changeset
|
1898 yield change(rev) |
20553
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1899 |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1900 if stopiteration: |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1901 break |
86cefb15e7b5
cmdutil: implemented new lazy increasingwindows
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20500
diff
changeset
|
1902 |
9652
2cb0cab10d2e
walkchangerevs: pull out matchfn
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
1903 return iterate() |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
1904 |
23885
9994f45ba714
add: pass options via keyword args
Matt Harbison <matt_harbison@yahoo.com>
parents:
23876
diff
changeset
|
1905 def add(ui, repo, match, prefix, explicitonly, **opts): |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1906 join = lambda f: os.path.join(prefix, f) |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1907 bad = [] |
25436
9724cbe2d546
add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25424
diff
changeset
|
1908 |
9724cbe2d546
add: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25424
diff
changeset
|
1909 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
|
1910 names = [] |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1911 wctx = repo[None] |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1912 cca = None |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1913 abort, warn = scmutil.checkportabilityalert(ui) |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1914 if abort or warn: |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17182
diff
changeset
|
1915 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
|
1916 |
26206
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
1917 badmatch = matchmod.badmatch(match, badfn) |
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
1918 dirstate = repo.dirstate |
ab1c6e4efda4
add: pass full=False to dirstate walk
Durham Goode <durham@fb.com>
parents:
26098
diff
changeset
|
1919 # 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
|
1920 # clean files, which we aren't interested in and takes time. |
34343
255c761a52db
dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34327
diff
changeset
|
1921 for f in sorted(dirstate.walk(badmatch, subrepos=sorted(wctx.substate), |
255c761a52db
dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34327
diff
changeset
|
1922 unknown=True, ignored=False, full=False)): |
12269
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1923 exact = match.exact(f) |
23462
afa3fbbcabd3
add: use lexists so that broken symbolic links are added
John Coomes <john.coomes@oracle.com>
parents:
23453
diff
changeset
|
1924 if exact or not explicitonly and f not in wctx and repo.wvfs.lexists(f): |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1925 if cca: |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14129
diff
changeset
|
1926 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
|
1927 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
|
1928 if ui.verbose or not exact: |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
1929 ui.status(_('adding %s\n') % match.rel(f)) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1930 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
1931 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
|
1932 sub = wctx.sub(subpath) |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1933 try: |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27985
diff
changeset
|
1934 submatch = matchmod.subdirmatcher(subpath, match) |
32147
a77e61b45384
py3: handle opts correctly for `hg add`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32144
diff
changeset
|
1935 if opts.get(r'subrepos'): |
23885
9994f45ba714
add: pass options via keyword args
Matt Harbison <matt_harbison@yahoo.com>
parents:
23876
diff
changeset
|
1936 bad.extend(sub.add(ui, submatch, prefix, False, **opts)) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1937 else: |
23885
9994f45ba714
add: pass options via keyword args
Matt Harbison <matt_harbison@yahoo.com>
parents:
23876
diff
changeset
|
1938 bad.extend(sub.add(ui, submatch, prefix, True, **opts)) |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1939 except error.LookupError: |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1940 ui.status(_("skipping missing subrepository: %s\n") |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15231
diff
changeset
|
1941 % join(subpath)) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1942 |
32147
a77e61b45384
py3: handle opts correctly for `hg add`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32144
diff
changeset
|
1943 if not opts.get(r'dry_run'): |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12269
diff
changeset
|
1944 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
|
1945 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
|
1946 return bad |
877236cdd437
add: move main part to cmdutil to make it easier to reuse
Martin Geisler <mg@lazybytes.net>
parents:
12266
diff
changeset
|
1947 |
32005
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1948 def addwebdirpath(repo, serverpath, webconf): |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1949 webconf[serverpath] = repo.root |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1950 repo.ui.debug('adding %s = %s\n' % (serverpath, repo.root)) |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1951 |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1952 for r in repo.revs('filelog("path:.hgsub")'): |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1953 ctx = repo[r] |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1954 for subpath in ctx.substate: |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1955 ctx.sub(subpath).addwebdirpath(serverpath, webconf) |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31807
diff
changeset
|
1956 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1957 def forget(ui, repo, match, prefix, explicitonly): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1958 join = lambda f: os.path.join(prefix, f) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1959 bad = [] |
25437
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
1960 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
|
1961 wctx = repo[None] |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1962 forgot = [] |
25437
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
1963 |
9c1bcd95b3ff
forget: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25436
diff
changeset
|
1964 s = repo.status(match=matchmod.badmatch(match, badfn), clean=True) |
32174
e4a4ebfd9d8e
forget: access status fields by name, not index
Martin von Zweigbergk <martinvonz@google.com>
parents:
32155
diff
changeset
|
1965 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
|
1966 if explicitonly: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1967 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
|
1968 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18340
diff
changeset
|
1969 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
|
1970 sub = wctx.sub(subpath) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1971 try: |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27985
diff
changeset
|
1972 submatch = matchmod.subdirmatcher(subpath, match) |
23577
597b071a0e0d
subrepo: drop the 'ui' parameter to forget()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23576
diff
changeset
|
1973 subbad, subforgot = sub.forget(submatch, prefix) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1974 bad.extend([subpath + '/' + f for f in subbad]) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1975 forgot.extend([subpath + '/' + f for f in subforgot]) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1976 except error.LookupError: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1977 ui.status(_("skipping missing subrepository: %s\n") |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1978 % join(subpath)) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1979 |
16070
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
1980 if not explicitonly: |
f11eee00c652
forget: show warning messages for forgetting in subrepo correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15912
diff
changeset
|
1981 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
|
1982 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
|
1983 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
|
1984 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
|
1985 # 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
|
1986 # 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
|
1987 # 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
|
1988 # 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
|
1989 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
|
1990 continue |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1991 ui.warn(_('not removing %s: ' |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1992 'file is already untracked\n') |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
1993 % match.rel(f)) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1994 bad.append(f) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1995 |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1996 for f in forget: |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1997 if ui.verbose or not match.exact(f): |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
1998 ui.status(_('removing %s\n') % match.rel(f)) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
1999 |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2000 rejected = wctx.forget(forget, prefix) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2001 bad.extend(f for f in rejected if f in match.files()) |
23838
b95b9fd7ba29
forget: don't report rejected files as forgotten as well
Matt Harbison <matt_harbison@yahoo.com>
parents:
23772
diff
changeset
|
2002 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
|
2003 return bad, forgot |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15911
diff
changeset
|
2004 |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2005 def files(ui, ctx, m, fm, fmt, subrepos): |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2006 rev = ctx.rev() |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2007 ret = 1 |
24301
18b5b2c9d921
files: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24275
diff
changeset
|
2008 ds = ctx.repo().dirstate |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2009 |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2010 for f in ctx.matches(m): |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2011 if rev is None and ds[f] == 'r': |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2012 continue |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2013 fm.startitem() |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2014 if ui.verbose: |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2015 fc = ctx[f] |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2016 fm.write('size flags', '% 10d % 1s ', fc.size(), fc.flags()) |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2017 fm.data(abspath=f) |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2018 fm.write('path', fmt, m.rel(f)) |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2019 ret = 0 |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2020 |
25228
63a57a2727b6
files: recurse into subrepos automatically with an explicit path
Matt Harbison <matt_harbison@yahoo.com>
parents:
25169
diff
changeset
|
2021 for subpath in sorted(ctx.substate): |
29802
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29795
diff
changeset
|
2022 submatch = matchmod.subdirmatcher(subpath, m) |
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29795
diff
changeset
|
2023 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
|
2024 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
|
2025 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
|
2026 recurse = m.exact(subpath) or subrepos |
97175d9bf7cf
files: don't recurse into subrepos without a path or -S (issue5127)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28253
diff
changeset
|
2027 if sub.printfiles(ui, submatch, fm, fmt, recurse) == 0: |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2028 ret = 0 |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2029 except error.LookupError: |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2030 ui.status(_("skipping missing subrepository: %s\n") |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2031 % m.abs(subpath)) |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24391
diff
changeset
|
2032 |
24275
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2033 return ret |
e1cb460a3524
files: split reusable implementation into cmdutil for subrepo support
Matt Harbison <matt_harbison@yahoo.com>
parents:
24272
diff
changeset
|
2034 |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2035 def remove(ui, repo, m, prefix, after, force, subrepos, warnings=None): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2036 join = lambda f: os.path.join(prefix, f) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2037 ret = 0 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2038 s = repo.status(match=m, clean=True) |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2039 modified, added, deleted, clean = s[0], s[1], s[3], s[6] |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2040 |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2041 wctx = repo[None] |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2042 |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2043 if warnings is None: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2044 warnings = [] |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2045 warn = True |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2046 else: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2047 warn = False |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2048 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2049 subs = sorted(wctx.substate) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2050 total = len(subs) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2051 count = 0 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2052 for subpath in subs: |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2053 count += 1 |
29802
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29795
diff
changeset
|
2054 submatch = matchmod.subdirmatcher(subpath, m) |
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29795
diff
changeset
|
2055 if subrepos or m.exact(subpath) or any(submatch.files()): |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2056 ui.progress(_('searching'), count, total=total, unit=_('subrepos')) |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2057 sub = wctx.sub(subpath) |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2058 try: |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2059 if sub.removefiles(submatch, prefix, after, force, subrepos, |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2060 warnings): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2061 ret = 1 |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2062 except error.LookupError: |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2063 warnings.append(_("skipping missing subrepository: %s\n") |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2064 % join(subpath)) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2065 ui.progress(_('searching'), None) |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2066 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2067 # warn about failure to delete explicit files/dirs |
24635
21e1ece30f8c
util: move dirs() and finddirs() from scmutil to util
Drew Gottlieb <drgott@google.com>
parents:
24603
diff
changeset
|
2068 deleteddirs = util.dirs(deleted) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2069 files = m.files() |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2070 total = len(files) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2071 count = 0 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2072 for f in files: |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2073 def insubrepo(): |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2074 for subpath in wctx.substate: |
29622
9c2cc107547f
cmdutil: warnings not issued in remove if subrepopath overlaps
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29498
diff
changeset
|
2075 if f.startswith(subpath + '/'): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2076 return True |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2077 return False |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2078 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2079 count += 1 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2080 ui.progress(_('deleting'), count, total=total, unit=_('files')) |
24955
1df233bcb7f6
remove: use ctx.hasdir(f) instead of 'f in ctx.dirs()'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
2081 isdir = f in deleteddirs or wctx.hasdir(f) |
29622
9c2cc107547f
cmdutil: warnings not issued in remove if subrepopath overlaps
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29498
diff
changeset
|
2082 if (f in repo.dirstate or isdir or f == '.' |
9c2cc107547f
cmdutil: warnings not issued in remove if subrepopath overlaps
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29498
diff
changeset
|
2083 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
|
2084 continue |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
23289
diff
changeset
|
2085 |
23674
6e36b9fc7869
remove: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23673
diff
changeset
|
2086 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
|
2087 if repo.wvfs.isdir(f): |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2088 warnings.append(_('not removing %s: no tracked files\n') |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
2089 % m.rel(f)) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2090 else: |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2091 warnings.append(_('not removing %s: file is untracked\n') |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
2092 % m.rel(f)) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2093 # 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
|
2094 ret = 1 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2095 ui.progress(_('deleting'), None) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2096 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2097 if force: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2098 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
|
2099 elif after: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2100 list = deleted |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2101 remaining = modified + added + clean |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2102 total = len(remaining) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2103 count = 0 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2104 for f in remaining: |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2105 count += 1 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2106 ui.progress(_('skipping'), count, total=total, unit=_('files')) |
35123
7a58608281dd
remove: print message for each file in verbose mode only while using `-A` (BC)
pavanpc@fb.com
parents:
35107
diff
changeset
|
2107 if ui.verbose or (f in files): |
7a58608281dd
remove: print message for each file in verbose mode only while using `-A` (BC)
pavanpc@fb.com
parents:
35107
diff
changeset
|
2108 warnings.append(_('not removing %s: file still exists\n') |
7a58608281dd
remove: print message for each file in verbose mode only while using `-A` (BC)
pavanpc@fb.com
parents:
35107
diff
changeset
|
2109 % m.rel(f)) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2110 ret = 1 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2111 ui.progress(_('skipping'), None) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2112 else: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2113 list = deleted + clean |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2114 total = len(modified) + len(added) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2115 count = 0 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2116 for f in modified: |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2117 count += 1 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2118 ui.progress(_('skipping'), count, total=total, unit=_('files')) |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2119 warnings.append(_('not removing %s: file is modified (use -f' |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
2120 ' to force removal)\n') % m.rel(f)) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2121 ret = 1 |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2122 for f in added: |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2123 count += 1 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2124 ui.progress(_('skipping'), count, total=total, unit=_('files')) |
29963
e824de573112
remove: specify hg in added warning
timeless <timeless@mozdev.org>
parents:
29956
diff
changeset
|
2125 warnings.append(_("not removing %s: file has been marked for add" |
e824de573112
remove: specify hg in added warning
timeless <timeless@mozdev.org>
parents:
29956
diff
changeset
|
2126 " (use 'hg forget' to undo add)\n") % m.rel(f)) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2127 ret = 1 |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2128 ui.progress(_('skipping'), None) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2129 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2130 list = sorted(list) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2131 total = len(list) |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2132 count = 0 |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2133 for f in list: |
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2134 count += 1 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2135 if ui.verbose or not m.exact(f): |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2136 ui.progress(_('deleting'), count, total=total, unit=_('files')) |
23686
164915e8ef7b
narrowmatcher: propagate the rel() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23674
diff
changeset
|
2137 ui.status(_('removing %s\n') % m.rel(f)) |
28608
62e73d42bd14
remove: add progress support
timeless <timeless@mozdev.org>
parents:
28607
diff
changeset
|
2138 ui.progress(_('deleting'), None) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2139 |
27802
ed44a66fd7ae
with: use context manager for wlock in remove
Bryan O'Sullivan <bryano@fb.com>
parents:
27801
diff
changeset
|
2140 with repo.wlock(): |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2141 if not after: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2142 for f in list: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2143 if f in added: |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2144 continue # we never unlink added files on remove |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31237
diff
changeset
|
2145 repo.wvfs.unlinkpath(f, ignoremissing=True) |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2146 repo[None].forget(list) |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2147 |
28607
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2148 if warn: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2149 for warning in warnings: |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2150 ui.warn(warning) |
a88959ae5938
remove: queue warnings until after status messages (issue5140) (API)
timeless <timeless@mozdev.org>
parents:
28601
diff
changeset
|
2151 |
23289
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2152 return ret |
ae5d0a22ee7e
remove: move most of the implementation into cmdutils.remove()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23258
diff
changeset
|
2153 |
35662
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2154 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
|
2155 """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
|
2156 |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2157 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
|
2158 this method first.""" |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2159 data = ctx[path].data() |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2160 if decode: |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2161 data = ctx.repo().wwritedata(path, data) |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2162 fm.startitem() |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2163 fm.write('data', '%s', data) |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2164 fm.data(abspath=path, path=matcher.rel(path)) |
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2165 |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32583
diff
changeset
|
2166 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
|
2167 err = 1 |
35350
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
2168 opts = pycompat.byteskwargs(opts) |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2169 |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2170 def write(path): |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32583
diff
changeset
|
2171 filename = None |
32582
7f4435078a8f
cat: stop using makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
2172 if fntemplate: |
7f4435078a8f
cat: stop using makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
2173 filename = makefilename(repo, fntemplate, ctx.node(), |
7f4435078a8f
cat: stop using makefileobj()
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
2174 pathname=os.path.join(prefix, path)) |
35007
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
34996
diff
changeset
|
2175 # 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:
34996
diff
changeset
|
2176 try: |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
34996
diff
changeset
|
2177 os.makedirs(os.path.dirname(filename)) |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
34996
diff
changeset
|
2178 except OSError: |
407ec7f3ff02
cmdutil: create dirs for templated cat file output
Ryan McElroy <rmcelroy@fb.com>
parents:
34996
diff
changeset
|
2179 pass |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32583
diff
changeset
|
2180 with formatter.maybereopen(basefm, filename, opts) as fm: |
35662
91f0979f16c0
cat: factor out a function that populates the formatter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35645
diff
changeset
|
2181 _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
|
2182 |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2183 # 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
|
2184 # 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
|
2185 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
|
2186 file = matcher.files()[0] |
30340
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2187 mfl = repo.manifestlog |
24718
a4191e0c728f
cat: use ctx.manifestnode() in place of ctx._changeset[0]
Yuya Nishihara <yuya@tcha.org>
parents:
24711
diff
changeset
|
2188 mfnode = ctx.manifestnode() |
30340
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2189 try: |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2190 if mfnode and mfl[mfnode].find(file)[0]: |
35926
264b90a060b7
cat: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35923
diff
changeset
|
2191 _prefetchfiles(repo, ctx, [file]) |
30340
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2192 write(file) |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2193 return 0 |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2194 except KeyError: |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
2195 pass |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2196 |
35926
264b90a060b7
cat: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35923
diff
changeset
|
2197 files = [f for f in ctx.walk(matcher)] |
264b90a060b7
cat: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35923
diff
changeset
|
2198 _prefetchfiles(repo, ctx, files) |
264b90a060b7
cat: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35923
diff
changeset
|
2199 |
264b90a060b7
cat: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35923
diff
changeset
|
2200 for abs in files: |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2201 write(abs) |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2202 err = 0 |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2203 |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2204 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
|
2205 sub = ctx.sub(subpath) |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2206 try: |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27985
diff
changeset
|
2207 submatch = matchmod.subdirmatcher(subpath, matcher) |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2208 |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32583
diff
changeset
|
2209 if not sub.cat(submatch, basefm, fntemplate, |
35350
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
2210 os.path.join(prefix, sub._path), |
82ee401135dd
py3: handle keyword arguments correctly in cmdutil.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35277
diff
changeset
|
2211 **pycompat.strkwargs(opts)): |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2212 err = 0 |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2213 except error.RepoLookupError: |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2214 ui.status(_("skipping missing subrepository: %s\n") |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2215 % os.path.join(prefix, subpath)) |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
21040
diff
changeset
|
2216 |
21040
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2217 return err |
bdf5ed5246d2
cat: move most of the implementation into cmdutils.cat()
Matt Harbison <matt_harbison@yahoo.com>
parents:
21036
diff
changeset
|
2218 |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
2219 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
|
2220 '''commit the specified files or all outstanding changes''' |
6139
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
2221 date = opts.get('date') |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
2222 if date: |
989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6112
diff
changeset
|
2223 opts['date'] = util.parsedate(date) |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14518
diff
changeset
|
2224 message = logmessage(ui, opts) |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23509
diff
changeset
|
2225 matcher = scmutil.match(repo[None], pats, opts) |
5034
c0417a319e39
commands: move commit to cmdutil as wrapper for commit-like functions
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
2226 |
33617
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
2227 dsguard = None |
5829
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
2228 # extract addremove carefully -- this function can be called from a command |
784073457a0f
cmdutil.commit: extract 'addremove' from opts carefully
Kirill Smelkov <kirr@mns.spb.ru>
parents:
5797
diff
changeset
|
2229 # that doesn't support addremove |
33823
5d286eb7009f
commit: move dirstateguard creation out of try-block
Martin von Zweigbergk <martinvonz@google.com>
parents:
33783
diff
changeset
|
2230 if opts.get('addremove'): |
5d286eb7009f
commit: move dirstateguard creation out of try-block
Martin von Zweigbergk <martinvonz@google.com>
parents:
33783
diff
changeset
|
2231 dsguard = dirstateguard.dirstateguard(repo, 'commit') |
33824
158dddc635ff
commit: use context manager with dirstateguard
Martin von Zweigbergk <martinvonz@google.com>
parents:
33823
diff
changeset
|
2232 with dsguard or util.nullcontextmanager(): |
33823
5d286eb7009f
commit: move dirstateguard creation out of try-block
Martin von Zweigbergk <martinvonz@google.com>
parents:
33783
diff
changeset
|
2233 if dsguard: |
33617
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
2234 if scmutil.addremove(repo, matcher, "", opts) != 0: |
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
2235 raise error.Abort( |
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
2236 _("failed to mark all new/missing files as added/removed")) |
5ac845ca059a
commit: don't let failed commit with --addremove update dirstate (issue5645)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33548
diff
changeset
|
2237 |
33824
158dddc635ff
commit: use context manager with dirstateguard
Martin von Zweigbergk <martinvonz@google.com>
parents:
33823
diff
changeset
|
2238 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
|
2239 |
29819
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2240 def samefile(f, ctx1, ctx2): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2241 if f in ctx1.manifest(): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2242 a = ctx1.filectx(f) |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2243 if f in ctx2.manifest(): |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2244 b = ctx2.filectx(f) |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2245 return (not a.cmp(b) |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2246 and a.flags() == b.flags()) |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2247 else: |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2248 return False |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2249 else: |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2250 return f not in ctx2.manifest() |
2cec6eaf3610
cmdutil: extract samefile function from amend()
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29802
diff
changeset
|
2251 |
34086
a39dce4a76b8
cmdutil: remove redundant commitfunc parameter in amend (API)
Saurabh Singh <singhsrb@fb.com>
parents:
34085
diff
changeset
|
2252 def amend(ui, repo, old, extra, pats, opts): |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
2253 # avoid cycle context -> subrepo -> cmdutil |
28322
ebd0e86bdf89
cmdutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28313
diff
changeset
|
2254 from . import context |
25930
221491bbaf7e
cmdutil: break import cycle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25795
diff
changeset
|
2255 |
23101
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2256 # 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
|
2257 # 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
|
2258 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
23101
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2259 ui.username() # raise exception if username not set |
b564330d4b1f
amend: abort early if no username is configured with evolve enabled (issue4211)
Matt Harbison <matt_harbison@yahoo.com>
parents:
22951
diff
changeset
|
2260 |
16458
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2261 ui.note(_('amending changeset %s\n') % old) |
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2262 base = old.p1() |
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2263 |
33509
a3acacbd0ff3
bookmark: remove a useless 'recordchange' in the amend code
Boris Feld <boris.feld@octobus.net>
parents:
33499
diff
changeset
|
2264 with repo.wlock(), repo.lock(), repo.transaction('amend'): |
33438 | 2265 # Participating changesets: |
2266 # | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2267 # wctx o - workingctx that contains changes from working copy |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2268 # | to go into amending commit |
33438 | 2269 # | |
2270 # old o - changeset to amend | |
2271 # | | |
34056 | 2272 # base o - first parent of the changeset to amend |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2273 wctx = repo[None] |
33438 | 2274 |
35196
5cc14407a739
amend: make a copy of "extra" to avoid mutating an input
Martin von Zweigbergk <martinvonz@google.com>
parents:
35163
diff
changeset
|
2275 # Copy to avoid mutating input |
5cc14407a739
amend: make a copy of "extra" to avoid mutating an input
Martin von Zweigbergk <martinvonz@google.com>
parents:
35163
diff
changeset
|
2276 extra = extra.copy() |
33438 | 2277 # Update extra dict from amended commit (e.g. to preserve graft |
2278 # source) | |
2279 extra.update(old.extra()) | |
2280 | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2281 # Also update it from the from the wctx |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2282 extra.update(wctx.extra()) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2283 |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2284 user = opts.get('user') or old.user() |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2285 date = opts.get('date') or old.date() |
33438 | 2286 |
34121
ae95853c250a
cmdutil: fix amend when passing a date
Boris Feld <boris.feld@octobus.net>
parents:
34086
diff
changeset
|
2287 # Parse the date to allow comparison between date and old.date() |
ae95853c250a
cmdutil: fix amend when passing a date
Boris Feld <boris.feld@octobus.net>
parents:
34086
diff
changeset
|
2288 date = util.parsedate(date) |
ae95853c250a
cmdutil: fix amend when passing a date
Boris Feld <boris.feld@octobus.net>
parents:
34086
diff
changeset
|
2289 |
33438 | 2290 if len(old.parents()) > 1: |
2291 # ctx.files() isn't reliable for merges, so fall back to the | |
2292 # slower repo.status() method | |
2293 files = set([fn for st in repo.status(base, old)[:3] | |
2294 for fn in st]) | |
2295 else: | |
2296 files = set(old.files()) | |
2297 | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2298 # 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:
34083
diff
changeset
|
2299 # was specified. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2300 matcher = scmutil.match(wctx, pats, opts) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2301 if (opts.get('addremove') |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2302 and scmutil.addremove(repo, matcher, "", opts)): |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2303 raise error.Abort( |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2304 _("failed to mark all new/missing files as added/removed")) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2305 |
35026
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2306 # 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:
35023
diff
changeset
|
2307 # 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:
35023
diff
changeset
|
2308 # nothing if .hgsub does not exist. |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2309 if '.hgsub' in wctx or '.hgsub' in old: |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2310 from . import subrepo # avoid cycle: cmdutil -> subrepo -> cmdutil |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2311 subs, commitsubs, newsubstate = subrepo.precommit( |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2312 ui, wctx, wctx._status, matcher) |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2313 # amend should abort if commitsubrepos is enabled |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2314 assert not commitsubs |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2315 if subs: |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2316 subrepo.writestate(repo, newsubstate) |
691524f0bbf6
amend: update .hgsubstate before committing a memctx (issue5677)
Yuya Nishihara <yuya@tcha.org>
parents:
35023
diff
changeset
|
2317 |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2318 filestoamend = set(f for f in wctx.files() if matcher(f)) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2319 |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2320 changes = (len(filestoamend) > 0) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2321 if changes: |
33438 | 2322 # Recompute copies (avoid recording a -> b -> a) |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2323 copied = copies.pathcopies(base, wctx, matcher) |
33438 | 2324 if old.p2: |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2325 copied.update(copies.pathcopies(old.p2(), wctx, matcher)) |
33438 | 2326 |
2327 # Prune files which were reverted by the updates: if old | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2328 # 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:
34083
diff
changeset
|
2329 # copy, then those two files are the same and |
33438 | 2330 # we can discard X from our list of files. Likewise if X |
35023
5f40efa472db
amend: do not drop missing files (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
35022
diff
changeset
|
2331 # 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:
35022
diff
changeset
|
2332 # deleted), old X must be preserved. |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2333 files.update(filestoamend) |
35023
5f40efa472db
amend: do not drop missing files (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
35022
diff
changeset
|
2334 files = [f for f in files if (not samefile(f, wctx, base) |
5f40efa472db
amend: do not drop missing files (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
35022
diff
changeset
|
2335 or f in wctx.deleted())] |
33438 | 2336 |
2337 def filectxfn(repo, ctx_, path): | |
2338 try: | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2339 # If the file being considered is not amongst the files |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2340 # to be amended, we should return the file context from the |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2341 # old changeset. This avoids issues when only some files in |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2342 # the working copy are being amended but there are also |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2343 # changes to other files from the old changeset. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2344 if path not in filestoamend: |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2345 return old.filectx(path) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2346 |
35022
0ba3b928f9a9
amend: do not take untracked files as modified or clean (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
2347 # Return None for removed files. |
0ba3b928f9a9
amend: do not take untracked files as modified or clean (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
2348 if path in wctx.removed(): |
0ba3b928f9a9
amend: do not take untracked files as modified or clean (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
2349 return None |
0ba3b928f9a9
amend: do not take untracked files as modified or clean (issue5732)
Yuya Nishihara <yuya@tcha.org>
parents:
34981
diff
changeset
|
2350 |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2351 fctx = wctx[path] |
33438 | 2352 flags = fctx.flags() |
35400
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35350
diff
changeset
|
2353 mctx = context.memfilectx(repo, ctx_, |
33438 | 2354 fctx.path(), fctx.data(), |
2355 islink='l' in flags, | |
2356 isexec='x' in flags, | |
2357 copied=copied.get(path)) | |
2358 return mctx | |
2359 except KeyError: | |
2360 return None | |
2361 else: | |
2362 ui.note(_('copying changeset %s to %s\n') % (old, base)) | |
2363 | |
2364 # Use version of files as in the old cset | |
2365 def filectxfn(repo, ctx_, path): | |
2366 try: | |
2367 return old.filectx(path) | |
2368 except KeyError: | |
2369 return None | |
2370 | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2371 # 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:
34083
diff
changeset
|
2372 # the message of the changeset to amend. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2373 message = logmessage(ui, opts) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2374 |
33438 | 2375 editform = mergeeditform(old, 'commit.amend') |
2376 editor = getcommiteditor(editform=editform, | |
2377 **pycompat.strkwargs(opts)) | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2378 |
33438 | 2379 if not message: |
2380 editor = getcommiteditor(edit=True, editform=editform) | |
2381 message = old.description() | |
2382 | |
2383 pureextra = extra.copy() | |
2384 extra['amend_source'] = old.hex() | |
2385 | |
2386 new = context.memctx(repo, | |
2387 parents=[base.node(), old.p2().node()], | |
2388 text=message, | |
2389 files=files, | |
2390 filectxfn=filectxfn, | |
2391 user=user, | |
2392 date=date, | |
2393 extra=extra, | |
2394 editor=editor) | |
2395 | |
2396 newdesc = changelog.stripdesc(new.description()) | |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2397 if ((not changes) |
33438 | 2398 and newdesc == old.description() |
2399 and user == old.user() | |
2400 and date == old.date() | |
2401 and pureextra == old.extra()): | |
2402 # nothing changed. continuing here would create a new node | |
2403 # 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
|
2404 # |
33438 | 2405 # This not what we expect from amend. |
2406 return old.node() | |
2407 | |
34081
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2408 if opts.get('secret'): |
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2409 commitphase = 'secret' |
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2410 else: |
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2411 commitphase = old.phase() |
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2412 overrides = {('phases', 'new-commit'): commitphase} |
5dc6ac6555e6
amend: use context manager for config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
34080
diff
changeset
|
2413 with ui.configoverride(overrides, 'amend'): |
33438 | 2414 newid = repo.commitctx(new) |
34055
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34029
diff
changeset
|
2415 |
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34029
diff
changeset
|
2416 # Reroute the working copy parent to the new changeset |
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34029
diff
changeset
|
2417 repo.setparents(newid, nullid) |
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34029
diff
changeset
|
2418 mapping = {old.node(): (newid,)} |
34794
5781e0931c16
cmdutil: pass metadata from amend() to cleanupnodes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34698
diff
changeset
|
2419 obsmetadata = None |
5781e0931c16
cmdutil: pass metadata from amend() to cleanupnodes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34698
diff
changeset
|
2420 if opts.get('note'): |
5781e0931c16
cmdutil: pass metadata from amend() to cleanupnodes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34698
diff
changeset
|
2421 obsmetadata = {'note': opts['note']} |
5781e0931c16
cmdutil: pass metadata from amend() to cleanupnodes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34698
diff
changeset
|
2422 scmutil.cleanupnodes(repo, mapping, 'amend', metadata=obsmetadata) |
34055
ae92e5c0441c
amend: removing redundant if condition
Saurabh Singh <singhsrb@fb.com>
parents:
34029
diff
changeset
|
2423 |
34085
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2424 # Fixing the dirstate because localrepo.commitctx does not update |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2425 # it. This is rather convenient because we did not need to update |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2426 # the dirstate for all the files in the new commit which commitctx |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2427 # could have done if it updated the dirstate. Now, we can |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2428 # selectively update the dirstate only for the amended files. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2429 dirstate = repo.dirstate |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2430 |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2431 # Update the state of the files which were added and |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2432 # and modified in the amend to "normal" in the dirstate. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2433 normalfiles = set(wctx.modified() + wctx.added()) & filestoamend |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2434 for f in normalfiles: |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2435 dirstate.normal(f) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2436 |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2437 # Update the state of files which were removed in the amend |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2438 # to "removed" in the dirstate. |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2439 removedfiles = set(wctx.removed()) & filestoamend |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2440 for f in removedfiles: |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2441 dirstate.drop(f) |
e8a7c1a0565a
cmdutil: remove the redundant commit during amend
Saurabh Singh <singhsrb@fb.com>
parents:
34083
diff
changeset
|
2442 |
16458
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2443 return newid |
55982f62651f
commit: add option to amend the working dir parent
Idan Kamara <idankk86@gmail.com>
parents:
16430
diff
changeset
|
2444 |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
2445 def commiteditor(repo, ctx, subs, editform=''): |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2446 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2447 return ctx.description() |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2448 return commitforceeditor(repo, ctx, subs, editform=editform, |
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2449 unchangedmessagedetection=True) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2450 |
21999
6ce282ed801e
cmdutil: introduce 'editform' to distinguish the purpose of commit text editing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21998
diff
changeset
|
2451 def commitforceeditor(repo, ctx, subs, finishdesc=None, extramsg=None, |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2452 editform='', unchangedmessagedetection=False): |
21923
e582e20cd3e6
commiteditor: refactor default extramsg
Matt Mackall <mpm@selenic.com>
parents:
21878
diff
changeset
|
2453 if not extramsg: |
e582e20cd3e6
commiteditor: refactor default extramsg
Matt Mackall <mpm@selenic.com>
parents:
21878
diff
changeset
|
2454 extramsg = _("Leave message empty to abort commit.") |
22012
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2455 |
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2456 forms = [e for e in editform.split('.') if e] |
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2457 forms.insert(0, 'changeset') |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2458 templatetext = None |
22012
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2459 while forms: |
32878
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2460 ref = '.'.join(forms) |
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2461 if repo.ui.config('committemplate', ref): |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2462 templatetext = committext = buildcommittemplate( |
32878
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2463 repo, ctx, subs, extramsg, ref) |
22012
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2464 break |
9d92b9d1e282
cmdutil: look commit template definition up by specified 'editform'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22011
diff
changeset
|
2465 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
|
2466 else: |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
2467 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
|
2468 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2469 # run editor in the repository root |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30506
diff
changeset
|
2470 olddir = pycompat.getcwd() |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2471 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
|
2472 |
9f9ec4abe700
cmdutil: make in-memory changes visible to external editor (issue4378)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26746
diff
changeset
|
2473 # 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
|
2474 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
|
2475 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
|
2476 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
|
2477 |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2478 editortext = repo.ui.edit(committext, ctx.user(), ctx.extra(), |
30836
565c07036066
cmdutil: add tmpdir parament to ui.edit calls
Sean Farley <sean@farley.io>
parents:
30833
diff
changeset
|
2479 editform=editform, pending=pending, |
34029
6e6452bc441d
editor: use an unambiguous path suffix for editor files
Michael Bolin <mbolin@fb.com>
parents:
34022
diff
changeset
|
2480 repopath=repo.path, action='commit') |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
2481 text = editortext |
30703
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
2482 |
5c85c93cdd61
cmdutil: add special string that ignores rest of text
Sean Farley <sean@farley.io>
parents:
30695
diff
changeset
|
2483 # 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
|
2484 # to display the diff) |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
2485 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
|
2486 if stripbelow: |
30724
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
2487 text = text[:stripbelow.start()] |
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
2488 |
ee47e951c6f9
commit: fix unmodified message detection for the "--- >8 ----" magic
Yuya Nishihara <yuya@tcha.org>
parents:
30720
diff
changeset
|
2489 text = re.sub("(?m)^HG:.*(\n|$)", "", text) |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2490 os.chdir(olddir) |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2491 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2492 if finishdesc: |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2493 text = finishdesc(text) |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2494 if not text.strip(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
2495 raise error.Abort(_("empty commit message")) |
26742
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2496 if unchangedmessagedetection and editortext == templatetext: |
bec1a579ebc4
commit: abort when a committemplate is not changed
Tony Tung <tonytung@fb.com>
parents:
26639
diff
changeset
|
2497 raise error.Abort(_("commit message unchanged")) |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2498 |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2499 return text |
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2500 |
32878
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2501 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
|
2502 ui = repo.ui |
32878
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2503 spec = formatter.templatespec(ref, None, None) |
35954
386c1e45e671
logcmdutil: drop default arguments from changesetdisplayer/templater() calls
Yuya Nishihara <yuya@tcha.org>
parents:
35926
diff
changeset
|
2504 t = logcmdutil.changesettemplater(ui, repo, spec) |
32878
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2505 t.t.cache.update((k, templater.unquotestring(v)) |
a3a36bcf122e
commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org>
parents:
32877
diff
changeset
|
2506 for k, v in repo.ui.configitems('committemplate')) |
22013
de5cee8ba088
cmdutil: use '[committemplate]' section like as map file for style definition
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22012
diff
changeset
|
2507 |
21924
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
2508 if not extramsg: |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
2509 extramsg = '' # ensure that extramsg is string |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
2510 |
5375ba75df40
cmdutil: make commit message shown in text editor customizable by template
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21923
diff
changeset
|
2511 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
|
2512 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
|
2513 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
|
2514 |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2515 def hgprefix(msg): |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2516 return "\n".join(["HG: %s" % a for a in msg.split("\n") if a]) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2517 |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2518 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
|
2519 edittext = [] |
8707
0550dfe4fca1
commit: editor reads file lists from provided context
Matt Mackall <mpm@selenic.com>
parents:
8680
diff
changeset
|
2520 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
|
2521 if ctx.description(): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2522 edittext.append(ctx.description()) |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2523 edittext.append("") |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2524 edittext.append("") # Empty line between message and comments. |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2525 edittext.append(hgprefix(_("Enter commit message." |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2526 " Lines beginning with 'HG:' are removed."))) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2527 edittext.append(hgprefix(extramsg)) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2528 edittext.append("HG: --") |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2529 edittext.append(hgprefix(_("user: %s") % ctx.user())) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2530 if ctx.p2(): |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2531 edittext.append(hgprefix(_("branch merge"))) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2532 if ctx.branch(): |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2533 edittext.append(hgprefix(_("branch '%s'") % ctx.branch())) |
24986
fb9b7b937b3e
bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24955
diff
changeset
|
2534 if bookmarks.isactivewdirparent(repo): |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2535 edittext.append(hgprefix(_("bookmark '%s'") % repo._activebookmark)) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2536 edittext.extend([hgprefix(_("subrepo %s") % s) for s in subs]) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2537 edittext.extend([hgprefix(_("added %s") % f) for f in added]) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2538 edittext.extend([hgprefix(_("changed %s") % f) for f in modified]) |
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2539 edittext.extend([hgprefix(_("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
|
2540 if not added and not modified and not removed: |
26426
0486c16ce621
cmdutil: handle multiline translations of HG: messages safely
timeless@mozdev.org
parents:
26389
diff
changeset
|
2541 edittext.append(hgprefix(_("no files changed"))) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2542 edittext.append("") |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8390
diff
changeset
|
2543 |
21869
e353fac7db26
cmdutil: separate building commit text from 'commitforceeditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21832
diff
changeset
|
2544 return "\n".join(edittext) |
14297
2daa5179e73f
commands: use a decorator to build table incrementally
Adrian Buehlmann <adrian@cadifra.com>
parents:
14291
diff
changeset
|
2545 |
26324
4a8e21578e14
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
2546 def commitstatus(repo, node, branch, bheads=None, opts=None): |
4a8e21578e14
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
2547 if opts is None: |
4a8e21578e14
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26229
diff
changeset
|
2548 opts = {} |
18688
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2549 ctx = repo[node] |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2550 parents = ctx.parents() |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2551 |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2552 if (not opts.get('amend') and bheads and node not in bheads and not |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2553 [x for x in parents if x.node() in bheads and x.branch() == branch]): |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2554 repo.ui.status(_('created new head\n')) |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2555 # 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
|
2556 # 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
|
2557 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2558 # 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
|
2559 # N: null or no parent |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2560 # 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
|
2561 # 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
|
2562 # 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
|
2563 # 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
|
2564 # 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
|
2565 # 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
|
2566 # printed anyway. |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2567 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2568 # Par Msg Comment |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2569 # 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
|
2570 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2571 # 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
|
2572 # 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
|
2573 # H N n usual case |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2574 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2575 # 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
|
2576 # C B y branch merge |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2577 # 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
|
2578 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2579 # 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
|
2580 # 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
|
2581 # |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2582 # 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
|
2583 |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2584 if not opts.get('close_branch'): |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2585 for r in parents: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2586 if r.closesbranch() and r.branch() == branch: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2587 repo.ui.status(_('reopening closed branch head %d\n') % r) |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2588 |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2589 if repo.ui.debugflag: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2590 repo.ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx.hex())) |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2591 elif repo.ui.verbose: |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2592 repo.ui.write(_('committed changeset %d:%s\n') % (int(ctx), ctx)) |
79107fad06aa
commit: factor out status printing into a helper function
Kevin Bullock <kbullock@ringworld.org>
parents:
18648
diff
changeset
|
2593 |
27943
02c5f8ad00ac
commit: factor the post commit status check into a cmdutil method
Matt Harbison <matt_harbison@yahoo.com>
parents:
27868
diff
changeset
|
2594 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
|
2595 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
|
2596 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2597 def revert(ui, repo, ctx, parents, *pats, **opts): |
35147
3da4bd50103d
py3: fix handling of keyword arguments in revert
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35123
diff
changeset
|
2598 opts = pycompat.byteskwargs(opts) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2599 parent, p2 = parents |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2600 node = ctx.node() |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2601 |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2602 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
|
2603 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
|
2604 parent = p2 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2605 |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2606 # 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
|
2607 # 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
|
2608 # 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
|
2609 # 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
|
2610 # 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
|
2611 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2612 # `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
|
2613 # The mapping is in the form: |
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2614 # <asb 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
|
2615 names = {} |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2616 |
27803
a8e8950ebd4d
with: use context manager for wlock in revert
Bryan O'Sullivan <bryano@fb.com>
parents:
27802
diff
changeset
|
2617 with repo.wlock(): |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2618 ## filling of the `names` mapping |
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2619 # 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
|
2620 |
24475
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
2621 interactive = opts.get('interactive', False) |
24449
bab983bb6fd1
revert: define 'wctx' a little earlier and use it more
Martin von Zweigbergk <martinvonz@google.com>
parents:
24438
diff
changeset
|
2622 wctx = repo[None] |
bab983bb6fd1
revert: define 'wctx' a little earlier and use it more
Martin von Zweigbergk <martinvonz@google.com>
parents:
24438
diff
changeset
|
2623 m = scmutil.match(wctx, pats, opts) |
24479
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
2624 |
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
2625 # we'll need this later |
871485bd03fd
revert: move calculation of targetsubs earlier
Matt Mackall <mpm@selenic.com>
parents:
24476
diff
changeset
|
2626 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
|
2627 |
24450
961790c35b4f
revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24449
diff
changeset
|
2628 if not m.always(): |
32362
7b3c27af90c2
cmdutil: use repo[None].walk instead of repo.walk
Augie Fackler <augie@google.com>
parents:
32343
diff
changeset
|
2629 matcher = matchmod.badmatch(m, lambda x, y: False) |
32382
c87db79b9507
cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents:
32375
diff
changeset
|
2630 for abs in wctx.walk(matcher): |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2631 names[abs] = m.rel(abs), m.exact(abs) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2632 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2633 # walk target manifest to fill `names` |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2634 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2635 def badfn(path, msg): |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2636 if path in names: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2637 return |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2638 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
|
2639 return |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2640 path_ = path + '/' |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2641 for f in names: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2642 if f.startswith(path_): |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2643 return |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2644 ui.warn("%s: %s\n" % (m.rel(path), msg)) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2645 |
25439
aaede04c0ba6
revert: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25438
diff
changeset
|
2646 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
|
2647 if abs not in names: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2648 names[abs] = m.rel(abs), m.exact(abs) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2649 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2650 # Find status of all file in `names`. |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2651 m = scmutil.matchfiles(repo, names) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2652 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2653 changes = repo.status(node1=node, match=m, |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2654 unknown=True, ignored=True, clean=True) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2655 else: |
24450
961790c35b4f
revert: take fast path also when not reverting to '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
24449
diff
changeset
|
2656 changes = repo.status(node1=node, match=m) |
22573
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2657 for kind in changes: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2658 for abs in kind: |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2659 names[abs] = m.rel(abs), m.exact(abs) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2660 |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2661 m = scmutil.matchfiles(repo, names) |
f528bfb25b45
revert: special case 'hg revert --all'
Durham Goode <durham@fb.com>
parents:
22551
diff
changeset
|
2662 |
23374
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2663 modified = set(changes.modified) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2664 added = set(changes.added) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2665 removed = set(changes.removed) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2666 _deleted = set(changes.deleted) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2667 unknown = set(changes.unknown) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2668 unknown.update(changes.ignored) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2669 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
|
2670 modadded = set() |
22185
afead12e724b
revert: triage "deleted" files into more appropriate categories
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22173
diff
changeset
|
2671 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24176
diff
changeset
|
2672 # 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
|
2673 # 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
|
2674 # 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
|
2675 # 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
|
2676 if parent == node: |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
2677 dsmodified = modified |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
2678 dsadded = added |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
2679 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
|
2680 # 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
|
2681 localchanges = dsmodified | dsadded |
22155
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
2682 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
|
2683 else: |
530390629842
revert: call status against revert target too
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22154
diff
changeset
|
2684 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
|
2685 dsmodified = set(changes.modified) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2686 dsadded = set(changes.added) |
aa0a430d9c75
revert: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@google.com>
parents:
23327
diff
changeset
|
2687 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
|
2688 # 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
|
2689 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
|
2690 |
22188
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
2691 # 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
|
2692 clean |= dsremoved - removed |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
2693 dsremoved &= removed |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
2694 # 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
|
2695 removed -= dsremoved |
0ad619c5e1a4
revert: use "remove" information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22187
diff
changeset
|
2696 |
22610
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
2697 modadded = added & dsmodified |
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
2698 added -= modadded |
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
2699 |
22190
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
2700 # tell newly modified apart. |
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
2701 dsmodified &= modified |
29103
f2aa1c3e7e77
cmdutil: typo fix in comment
Augie Fackler <augie@google.com>
parents:
28999
diff
changeset
|
2702 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
|
2703 modified -= dsmodified |
55308ab8117c
revert: use modified information from both statuses
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22189
diff
changeset
|
2704 |
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
|
2705 # 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
|
2706 # 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
|
2707 # that purpose. |
22208
d3659b3795e9
revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22205
diff
changeset
|
2708 dsadded = added |
d3659b3795e9
revert: simplify handling of `added` files
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22205
diff
changeset
|
2709 |
22209
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
2710 # 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
|
2711 # modified, we need to post process the result |
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
2712 if p2 != nullid: |
31134
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31078
diff
changeset
|
2713 mergeadd = set(dsmodified) |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31078
diff
changeset
|
2714 for path in dsmodified: |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31078
diff
changeset
|
2715 if path in mf: |
c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
Durham Goode <durham@fb.com>
parents:
31078
diff
changeset
|
2716 mergeadd.remove(path) |
22209
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
2717 dsadded |= mergeadd |
06fbd9518bc5
revert: detect files added during a merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22208
diff
changeset
|
2718 dsmodified -= mergeadd |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2719 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2720 # if f is a rename, update `names` to also revert the source |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2721 cwd = repo.getcwd() |
23403
edf29f9c15f0
revert: look for copy information for all local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23101
diff
changeset
|
2722 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
|
2723 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
|
2724 # XXX should we check for rename down to target node? |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2725 if src and src not in names and repo.dirstate[src] == 'r': |
22154
fc422de25773
revert: prefix variable names for dirstate status with "ds"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22153
diff
changeset
|
2726 dsremoved.add(src) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2727 names[src] = (repo.pathto(src, cwd), True) |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2728 |
31157
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2729 # determine the exact nature of the deleted changesets |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2730 deladded = set(_deleted) |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2731 for path in _deleted: |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2732 if path in mf: |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2733 deladded.remove(path) |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2734 deleted = _deleted - deladded |
accdd5e62066
revert: move code dealing with deletions closer together
Martin von Zweigbergk <martinvonz@google.com>
parents:
31134
diff
changeset
|
2735 |
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
|
2736 # 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
|
2737 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
|
2738 for abs in dsadded: |
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
|
2739 if repo.dirstate[abs] != 'a': |
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
|
2740 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
|
2741 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
|
2742 |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
2743 for abs in deladded: |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2744 if repo.dirstate[abs] == 'a': |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
2745 dsadded.add(abs) |
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
2746 deladded -= dsadded |
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
2747 |
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
|
2748 # 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
|
2749 # 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
|
2750 # 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
|
2751 # 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
|
2752 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
|
2753 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
|
2754 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
|
2755 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
|
2756 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
|
2757 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
|
2758 |
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
|
2759 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
|
2760 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
|
2761 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
|
2762 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
|
2763 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
|
2764 dsremoved -= dsremovunk |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2765 |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2766 # 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
|
2767 # (<list of file>, message>) tuple |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
2768 actions = {'revert': ([], _('reverting %s\n')), |
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
2769 'add': ([], _('adding %s\n')), |
22489
0d57bf80c7cb
revert: have an explicit action for "forget"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22488
diff
changeset
|
2770 'remove': ([], _('removing %s\n')), |
22491
5e16fe6fdd32
revert: add a `drop` action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22490
diff
changeset
|
2771 'drop': ([], _('removing %s\n')), |
22489
0d57bf80c7cb
revert: have an explicit action for "forget"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22488
diff
changeset
|
2772 'forget': ([], _('forgetting %s\n')), |
22231
10d9e7908a3c
revert: use actions[...] in all disptable cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22230
diff
changeset
|
2773 'undelete': ([], _('undeleting %s\n')), |
22234
fe9fc29ac2d0
revert: add a message to noop action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22233
diff
changeset
|
2774 'noop': (None, _('no changes needed to %s\n')), |
22236
3c24fb96900f
revert: handle unknown files through status
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22235
diff
changeset
|
2775 'unknown': (None, _('file not managed: %s\n')), |
22231
10d9e7908a3c
revert: use actions[...] in all disptable cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22230
diff
changeset
|
2776 } |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2777 |
22608
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
2778 # "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
|
2779 # 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
|
2780 # 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
|
2781 # These values are ordered for comparison purposes |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2782 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
|
2783 backup = 2 # unconditionally do backup |
22609
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2784 check = 1 # check if the existing file differs from target |
22608
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
2785 discard = 0 # never do backup |
bf0ecb224316
revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22588
diff
changeset
|
2786 if opts.get('no_backup'): |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2787 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
|
2788 if interactive: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2789 dsmodifiedbackup = backupinteractive |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2790 else: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2791 dsmodifiedbackup = backup |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2792 tobackup = set() |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2793 |
22611
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
2794 backupanddel = actions['remove'] |
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
2795 if not opts.get('no_backup'): |
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
2796 backupanddel = actions['drop'] |
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
2797 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2798 disptable = ( |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2799 # dispatch table: |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2800 # 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
|
2801 # action |
fc8bc2787528
revert: move manifest membership condition outside of the loop
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22013
diff
changeset
|
2802 # make backup |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2803 |
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2804 ## 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
|
2805 # Modified compared to target, no local change |
22372
8da5864dcfda
revert: add more padding in the dispatch list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22371
diff
changeset
|
2806 (modified, actions['revert'], discard), |
22397
1db04829bdc1
revert: distinguish between deleted file and locally modified
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22396
diff
changeset
|
2807 # Modified compared to target, but local file is deleted |
1db04829bdc1
revert: distinguish between deleted file and locally modified
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22396
diff
changeset
|
2808 (deleted, actions['revert'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2809 # Modified compared to target, local change |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2810 (dsmodified, actions['revert'], dsmodifiedbackup), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2811 # Added since target |
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
|
2812 (added, actions['remove'], discard), |
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
|
2813 # Added in working directory |
22489
0d57bf80c7cb
revert: have an explicit action for "forget"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22488
diff
changeset
|
2814 (dsadded, actions['forget'], discard), |
22610
0f323ed8effd
revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22609
diff
changeset
|
2815 # Added since target, have local modification |
22611
2ff28e07d7d6
revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22610
diff
changeset
|
2816 (modadded, backupanddel, backup), |
22490
bcab7bc7280e
revert: explicitly track added but deleted file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22489
diff
changeset
|
2817 # Added since target but file is missing in working directory |
22491
5e16fe6fdd32
revert: add a `drop` action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22490
diff
changeset
|
2818 (deladded, actions['drop'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2819 # Removed since target, before working copy parent |
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
|
2820 (removed, actions['add'], discard), |
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
|
2821 # Same as `removed` but an unknown file exists at the same path |
22609
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2822 (removunk, actions['add'], check), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2823 # Removed since targe, marked as such in working copy parent |
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
|
2824 (dsremoved, actions['undelete'], discard), |
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
|
2825 # Same as `dsremoved` but an unknown file exists at the same path |
22609
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2826 (dsremovunk, actions['undelete'], check), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2827 ## 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
|
2828 # File with no modification |
22372
8da5864dcfda
revert: add more padding in the dispatch list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22371
diff
changeset
|
2829 (clean, actions['noop'], discard), |
22371
81ad62defef5
revert: add documentation in the dispatch table
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22370
diff
changeset
|
2830 # Existing file, not tracked anywhere |
22372
8da5864dcfda
revert: add more padding in the dispatch list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22371
diff
changeset
|
2831 (unknown, actions['unknown'], discard), |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2832 ) |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2833 |
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2834 for abs, (rel, exact) in sorted(names.items()): |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2835 # 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
|
2836 target = repo.wjoin(abs) |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2837 # 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
|
2838 # 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
|
2839 # 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
|
2840 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
|
2841 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
|
2842 continue |
22233
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2843 if xlist is not None: |
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2844 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
|
2845 if dobackup: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2846 # 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
|
2847 # .orig files (issue4793) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2848 if dobackup == backupinteractive: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2849 tobackup.add(abs) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2850 elif (backup <= dobackup or wctx[abs].cmp(ctx[abs])): |
27651
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27637
diff
changeset
|
2851 bakname = scmutil.origpath(ui, repo, rel) |
22609
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2852 ui.note(_('saving current version of %s as %s\n') % |
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2853 (rel, bakname)) |
3760ebf786b8
revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22608
diff
changeset
|
2854 if not opts.get('dry_run'): |
24475
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
2855 if interactive: |
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
2856 util.copyfile(target, bakname) |
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
2857 else: |
06cbff4674a3
revert: fix --interactive on local modification (issue4576)
Laurent Charignon <lcharignon@fb.com>
parents:
24472
diff
changeset
|
2858 util.rename(target, bakname) |
22233
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2859 if ui.verbose or not exact: |
35197
bfd072c52e03
py3: use bytes in place of basestring
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35196
diff
changeset
|
2860 if not isinstance(msg, bytes): |
22233
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2861 msg = msg(abs) |
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2862 ui.status(msg % rel) |
4ab61b24e20c
revert: simplify loop conditional
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22232
diff
changeset
|
2863 elif exact: |
22234
fe9fc29ac2d0
revert: add a message to noop action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22233
diff
changeset
|
2864 ui.warn(msg % rel) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2865 break |
21575
8262c2a39ab8
revert: add some inline comments
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21574
diff
changeset
|
2866 |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2867 if not opts.get('dry_run'): |
23965
6156edaa82aa
revert: move prefetch to after the actions logic
Durham Goode <durham@fb.com>
parents:
23955
diff
changeset
|
2868 needdata = ('revert', 'add', 'undelete') |
35923
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2869 if _revertprefetch is not _revertprefetchstub: |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2870 ui.deprecwarn("'cmdutil._revertprefetch' is deprecated, use " |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2871 "'cmdutil._prefetchfiles'", '4.6', stacklevel=1) |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2872 _revertprefetch(repo, ctx, |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2873 *[actions[name][0] for name in needdata]) |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2874 oplist = [actions[name][0] for name in needdata] |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2875 _prefetchfiles(repo, ctx, |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2876 [f for sublist in oplist for f in sublist]) |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2877 _performrevert(repo, parents, ctx, actions, interactive, tobackup) |
19129
bd19587a3347
revert: ensure that copies and renames are honored (issue3920)
Bryan O'Sullivan <bryano@fb.com>
parents:
19024
diff
changeset
|
2878 |
24134
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24064
diff
changeset
|
2879 if targetsubs: |
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24064
diff
changeset
|
2880 # 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
|
2881 for sub in targetsubs: |
24463
06d199e66bbc
revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents:
24455
diff
changeset
|
2882 try: |
35147
3da4bd50103d
py3: fix handling of keyword arguments in revert
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35123
diff
changeset
|
2883 wctx.sub(sub).revert(ctx.substate[sub], *pats, |
3da4bd50103d
py3: fix handling of keyword arguments in revert
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35123
diff
changeset
|
2884 **pycompat.strkwargs(opts)) |
24463
06d199e66bbc
revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents:
24455
diff
changeset
|
2885 except KeyError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
2886 raise error.Abort("subrepository '%s' does not exist in %s!" |
24463
06d199e66bbc
revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com>
parents:
24455
diff
changeset
|
2887 % (sub, short(ctx.node()))) |
16304
a740fa28d718
revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16283
diff
changeset
|
2888 |
35923
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2889 def _revertprefetchstub(repo, ctx, *files): |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2890 """Stub method for detecting extension wrapping of _revertprefetch(), to |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2891 issue a deprecation warning.""" |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2892 |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2893 _revertprefetch = _revertprefetchstub |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2894 |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2895 def _prefetchfiles(repo, ctx, files): |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2896 """Let extensions changing the storage layer prefetch content for any non |
efbd04238029
cmdutil: convert _revertprefetch() to a generic stored file hook (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35910
diff
changeset
|
2897 merge based command.""" |
22370
45e02cfad4bd
revert: add a way for external extensions to prefetch file data
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22305
diff
changeset
|
2898 |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2899 def _performrevert(repo, parents, ctx, actions, interactive=False, |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2900 tobackup=None): |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
2901 """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
|
2902 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2903 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
|
2904 the imminent revert. |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2905 |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20790
diff
changeset
|
2906 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
|
2907 """ |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2908 parent, p2 = parents |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2909 node = ctx.node() |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2910 excluded_files = [] |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2911 matcher_opts = {"exclude": excluded_files} |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2912 |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2913 def checkout(f): |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2914 fc = ctx[f] |
25755
72d395e399c1
cmdutil: remove useless dirstate.normallookup() invocation in revert()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25739
diff
changeset
|
2915 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
|
2916 |
30532
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2917 def doremove(f): |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2918 try: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31237
diff
changeset
|
2919 repo.wvfs.unlinkpath(f) |
30532
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2920 except OSError: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2921 pass |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2922 repo.dirstate.remove(f) |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2923 |
33649
377e8ddaebef
pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents:
33617
diff
changeset
|
2924 audit_path = pathutil.pathauditor(repo.root, cached=True) |
22489
0d57bf80c7cb
revert: have an explicit action for "forget"
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22488
diff
changeset
|
2925 for f in actions['forget'][0]: |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2926 if interactive: |
30530
74013a831872
style: avoid an unnecessary line split
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30519
diff
changeset
|
2927 choice = repo.ui.promptchoice( |
30531
841092fd6b85
revert: indicate the default choice when prompting to forget files
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30530
diff
changeset
|
2928 _("forget added file %s (Yn)?$$ &Yes $$ &No") % f) |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2929 if choice == 0: |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2930 repo.dirstate.drop(f) |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2931 else: |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2932 excluded_files.append(repo.wjoin(f)) |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2933 else: |
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2934 repo.dirstate.drop(f) |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
2935 for f in actions['remove'][0]: |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2936 audit_path(f) |
30532
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2937 if interactive: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2938 choice = repo.ui.promptchoice( |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2939 _("remove added file %s (Yn)?$$ &Yes $$ &No") % f) |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2940 if choice == 0: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2941 doremove(f) |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2942 else: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2943 excluded_files.append(repo.wjoin(f)) |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2944 else: |
66b162fa3ffa
revert: prompt before removing files in interactive mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
30531
diff
changeset
|
2945 doremove(f) |
22491
5e16fe6fdd32
revert: add a `drop` action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22490
diff
changeset
|
2946 for f in actions['drop'][0]: |
5e16fe6fdd32
revert: add a `drop` action
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22490
diff
changeset
|
2947 audit_path(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2948 repo.dirstate.remove(f) |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2949 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2950 normal = None |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2951 if node == parent: |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2952 # We're reverting to our parent. If possible, we'd like status |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2953 # to report the file as clean. We have to use normallookup for |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2954 # merges to avoid losing information about merged/dirty files. |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2955 if p2 != nullid: |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2956 normal = repo.dirstate.normallookup |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2957 else: |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
2958 normal = repo.dirstate.normal |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2959 |
25259
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
2960 newlyaddedandmodifiedfiles = set() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2961 if interactive: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2962 # Prompt the user for changes to revert |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2963 torevert = [repo.wjoin(f) for f in actions['revert'][0]] |
27985
79139c7a88bd
revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com>
parents:
27973
diff
changeset
|
2964 m = scmutil.match(ctx, torevert, matcher_opts) |
25258
f37a69ec3f47
revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents:
25257
diff
changeset
|
2965 diffopts = patch.difffeatureopts(repo.ui, whitespace=True) |
f37a69ec3f47
revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents:
25257
diff
changeset
|
2966 diffopts.nodates = True |
f37a69ec3f47
revert: make revert --interactive use git style diff
Laurent Charignon <lcharignon@fb.com>
parents:
25257
diff
changeset
|
2967 diffopts.git = True |
31196
3af9a9628ecf
revert: always display hunks reversed when reverting to parent
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31171
diff
changeset
|
2968 operation = 'discard' |
3af9a9628ecf
revert: always display hunks reversed when reverting to parent
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31171
diff
changeset
|
2969 reversehunks = True |
3af9a9628ecf
revert: always display hunks reversed when reverting to parent
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
31171
diff
changeset
|
2970 if node != parent: |
34968
3649c3f2cd90
revert: do not reverse hunks in interactive when REV is not parent (issue5096)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34928
diff
changeset
|
2971 operation = 'apply' |
3649c3f2cd90
revert: do not reverse hunks in interactive when REV is not parent (issue5096)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34928
diff
changeset
|
2972 reversehunks = False |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2973 if reversehunks: |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2974 diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts) |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2975 else: |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2976 diff = patch.diff(repo, None, ctx.node(), m, opts=diffopts) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2977 originalchunks = patch.parsepatch(diff) |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2978 |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2979 try: |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2980 |
29283
14eee72c8d52
revert: use "discard"/"revert" verb when reverting interactively (issue5143)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29216
diff
changeset
|
2981 chunks, opts = recordfilter(repo.ui, originalchunks, |
14eee72c8d52
revert: use "discard"/"revert" verb when reverting interactively (issue5143)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29216
diff
changeset
|
2982 operation=operation) |
25424
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2983 if reversehunks: |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2984 chunks = patch.reversehunks(chunks) |
69609f43c752
revert: add an experimental config to use inverted selection
Laurent Charignon <lcharignon@fb.com>
parents:
25358
diff
changeset
|
2985 |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
2986 except error.PatchError as err: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
2987 raise error.Abort(_('error parsing patch: %s') % err) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2988 |
25259
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
2989 newlyaddedandmodifiedfiles = newandmodified(chunks, originalchunks) |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2990 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
|
2991 tobackup = set() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2992 # Apply changes |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28837
diff
changeset
|
2993 fp = stringio() |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
2994 for c in chunks: |
29498
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2995 # Create a backup file only if this hunk should be backed up |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2996 if ishunk(c) and c.header.filename() in tobackup: |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2997 abs = c.header.filename() |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2998 target = repo.wjoin(abs) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
2999 bakname = scmutil.origpath(repo.ui, repo, m.rel(abs)) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3000 util.copyfile(target, bakname) |
1b38cfde9530
revert: don't backup if no files reverted in interactive mode (issue4793)
skarlage <skarlage@fb.com>
parents:
29427
diff
changeset
|
3001 tobackup.remove(abs) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3002 c.write(fp) |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3003 dopatch = fp.tell() |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3004 fp.seek(0) |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3005 if dopatch: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3006 try: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3007 patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None) |
34251
61714510220d
error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34189
diff
changeset
|
3008 except error.PatchError as err: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
3009 raise error.Abort(str(err)) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3010 del fp |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3011 else: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3012 for f in actions['revert'][0]: |
25755
72d395e399c1
cmdutil: remove useless dirstate.normallookup() invocation in revert()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25739
diff
changeset
|
3013 checkout(f) |
24359
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3014 if normal: |
521fe8287dd5
revert: add flag to make revert interactive
Laurent Charignon <lcharignon@fb.com>
parents:
24358
diff
changeset
|
3015 normal(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3016 |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
3017 for f in actions['add'][0]: |
25259
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3018 # Don't checkout modified files, they are already created by the diff |
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3019 if f not in newlyaddedandmodifiedfiles: |
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3020 checkout(f) |
5b05f10c5024
revert: fix edition of newly added file during --interactive
Laurent Charignon <lcharignon@fb.com>
parents:
25258
diff
changeset
|
3021 repo.dirstate.add(f) |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3022 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3023 normal = repo.dirstate.normallookup |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3024 if node == parent and p2 == nullid: |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3025 normal = repo.dirstate.normal |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
3026 for f in actions['undelete'][0]: |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3027 checkout(f) |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3028 normal(f) |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3029 |
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3030 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
|
3031 |
21576
33395a7e5527
revert: group action into a single dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21575
diff
changeset
|
3032 for f in actions['add'][0] + actions['undelete'][0] + actions['revert'][0]: |
20571
d4893e64f300
revert: extract actual revert in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20553
diff
changeset
|
3033 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
|
3034 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
|
3035 |
32343
d47d7d3bd07b
extensions: show deprecation warning for the use of cmdutil.command
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
3036 class command(registrar.command): |
35107
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35007
diff
changeset
|
3037 """deprecated: used registrar.command instead""" |
32343
d47d7d3bd07b
extensions: show deprecation warning for the use of cmdutil.command
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
3038 def _doregister(self, func, name, *args, **kwargs): |
d47d7d3bd07b
extensions: show deprecation warning for the use of cmdutil.command
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
3039 func._deprecatedregistrar = True # flag for deprecwarn in extensions.py |
d47d7d3bd07b
extensions: show deprecation warning for the use of cmdutil.command
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
3040 return super(command, self)._doregister(func, name, *args, **kwargs) |
19211
3bfd7f1e7485
summary: augment output with info from extensions
Bryan O'Sullivan <bryano@fb.com>
parents:
19129
diff
changeset
|
3041 |
21051
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3042 # 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
|
3043 # 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
|
3044 # "findcommonoutgoing()" |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3045 outgoinghooks = util.hooks() |
1004d3cd65fd
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21047
diff
changeset
|
3046 |
19211
3bfd7f1e7485
summary: augment output with info from extensions
Bryan O'Sullivan <bryano@fb.com>
parents:
19129
diff
changeset
|
3047 # 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
|
3048 summaryhooks = util.hooks() |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3049 |
21047
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3050 # 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
|
3051 # |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3052 # 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
|
3053 # (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
|
3054 # |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3055 # 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
|
3056 # - (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
|
3057 # - (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
|
3058 summaryremotehooks = util.hooks() |
f0003f989e72
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
3059 |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3060 # A list of state files kept by multistep operations like graft. |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3061 # Since graft cannot be aborted, it is considered 'clearable' by update. |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3062 # note: bisect is intentionally excluded |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3063 # (state file, clearable, allowcommit, error, hint) |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3064 unfinishedstates = [ |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3065 ('graftstate', True, False, _('graft in progress'), |
19482
499fc471296b
update: add tracking of interrupted updates (issue3113)
Matt Mackall <mpm@selenic.com>
parents:
19474
diff
changeset
|
3066 _("use 'hg graft --continue' or 'hg update' to abort")), |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3067 ('updatestate', True, False, _('last update was interrupted'), |
19482
499fc471296b
update: add tracking of interrupted updates (issue3113)
Matt Mackall <mpm@selenic.com>
parents:
19474
diff
changeset
|
3068 _("use 'hg update' to get a consistent checkout")) |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3069 ] |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3070 |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3071 def checkunfinished(repo, commit=False): |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3072 '''Look for an unfinished multistep operation, like graft, and abort |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3073 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
|
3074 bailifchanged(). |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3075 ''' |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3076 for f, clearable, allowcommit, msg, hint in unfinishedstates: |
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3077 if commit and allowcommit: |
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3078 continue |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3079 if repo.vfs.exists(f): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
3080 raise error.Abort(msg, hint=hint) |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3081 |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3082 def clearunfinished(repo): |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3083 '''Check for unfinished operations (as above), and clear the ones |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3084 that are clearable. |
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3085 ''' |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3086 for f, clearable, allowcommit, msg, hint in unfinishedstates: |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3087 if not clearable and repo.vfs.exists(f): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26579
diff
changeset
|
3088 raise error.Abort(msg, hint=hint) |
19496
607191a45f8c
checkunfinished: accommodate histedit quirk
Matt Mackall <mpm@selenic.com>
parents:
19482
diff
changeset
|
3089 for f, clearable, allowcommit, msg, hint in unfinishedstates: |
19474
894fd1a7c533
cmdutil: core functionality to block during multistep commands (issue3955)
Matt Mackall <mpm@selenic.com>
parents:
19293
diff
changeset
|
3090 if clearable and repo.vfs.exists(f): |
31320
1b0db28dadf1
cmdutil: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31309
diff
changeset
|
3091 util.unlink(repo.vfs.join(f)) |
24991
4169a4f83548
cmdutil: add class to restore dirstate during unexpected failure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24988
diff
changeset
|
3092 |
27624
d46db4390715
resolve: suggest the next action
timeless <timeless@mozdev.org>
parents:
27622
diff
changeset
|
3093 afterresolvedstates = [ |
27625
cdb9493a7e2f
graft: hook afterresolvedstates
timeless <timeless@mozdev.org>
parents:
27624
diff
changeset
|
3094 ('graftstate', |
cdb9493a7e2f
graft: hook afterresolvedstates
timeless <timeless@mozdev.org>
parents:
27624
diff
changeset
|
3095 _('hg graft --continue')), |
27624
d46db4390715
resolve: suggest the next action
timeless <timeless@mozdev.org>
parents:
27622
diff
changeset
|
3096 ] |
d46db4390715
resolve: suggest the next action
timeless <timeless@mozdev.org>
parents:
27622
diff
changeset
|
3097 |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3098 def howtocontinue(repo): |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3099 '''Check for an unfinished operation and return the command to finish |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3100 it. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3101 |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30272
diff
changeset
|
3102 afterresolvedstates tuples define a .hg/{file} and the corresponding |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3103 command needed to finish it. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3104 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3105 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
|
3106 a boolean. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3107 ''' |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3108 contmsg = _("continue: %s") |
27624
d46db4390715
resolve: suggest the next action
timeless <timeless@mozdev.org>
parents:
27622
diff
changeset
|
3109 for f, msg in afterresolvedstates: |
d46db4390715
resolve: suggest the next action
timeless <timeless@mozdev.org>
parents:
27622
diff
changeset
|
3110 if repo.vfs.exists(f): |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3111 return contmsg % msg, True |
33362
e48fb90f80c8
cmdutil: simplify the dirty check in howtocontinue()
Matt Harbison <matt_harbison@yahoo.com>
parents:
33334
diff
changeset
|
3112 if repo[None].dirty(missing=True, merge=False, branch=False): |
28120
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3113 return contmsg % _("hg commit"), False |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3114 return None, None |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3115 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3116 def checkafterresolved(repo): |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3117 '''Inform the user about the next action after completing hg resolve |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3118 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3119 If there's a matching afterresolvedstates, howtocontinue will yield |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3120 repo.ui.warn as the reporter. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3121 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3122 Otherwise, it will yield repo.ui.note. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3123 ''' |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3124 msg, warning = howtocontinue(repo) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3125 if msg is not None: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3126 if warning: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3127 repo.ui.warn("%s\n" % msg) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3128 else: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3129 repo.ui.note("%s\n" % msg) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3130 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3131 def wrongtooltocontinue(repo, task): |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3132 '''Raise an abort suggesting how to properly continue if there is an |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3133 active task. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3134 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3135 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
|
3136 |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3137 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
|
3138 a hint. |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3139 ''' |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3140 after = howtocontinue(repo) |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3141 hint = None |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3142 if after[1]: |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3143 hint = after[0] |
ed4d06f180b8
cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org>
parents:
28027
diff
changeset
|
3144 raise error.Abort(_('no %s in progress') % task, hint=hint) |
35910
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3145 |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3146 class changeset_printer(logcmdutil.changesetprinter): |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3147 |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3148 def __init__(self, ui, *args, **kwargs): |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3149 msg = ("'cmdutil.changeset_printer' is deprecated, " |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3150 "use 'logcmdutil.logcmdutil'") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3151 ui.deprecwarn(msg, "4.6") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3152 super(changeset_printer, self).__init__(ui, *args, **kwargs) |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3153 |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3154 def displaygraph(ui, *args, **kwargs): |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3155 msg = ("'cmdutil.displaygraph' is deprecated, " |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3156 "use 'logcmdutil.displaygraph'") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3157 ui.deprecwarn(msg, "4.6") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3158 return logcmdutil.displaygraph(ui, *args, **kwargs) |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3159 |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3160 def show_changeset(ui, *args, **kwargs): |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3161 msg = ("'cmdutil.show_changeset' is deprecated, " |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3162 "use 'logcmdutil.changesetdisplayer'") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3163 ui.deprecwarn(msg, "4.6") |
b82c6dd15f5d
cmdutil: introduce deprecated aliases
Boris Feld <boris.feld@octobus.net>
parents:
35904
diff
changeset
|
3164 return logcmdutil.changesetdisplayer(ui, *args, **kwargs) |