Mercurial > hg
annotate mercurial/scmutil.py @ 51806:95cdc01f313d
sparse: reliably avoid writing to store without a lock
With the code as written before this patch we can still end up writing to
store in `debugsparse`. Obviously we'll write to it if by accident a store
requirement is modified, but more importantly we write to it if another
concurrent transaction modifies the requirements file on disk.
We can't rule this out since we're not holding the store lock,
so it's better to explicitly pass a permission to write instead
of inferring it based on file contents.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Fri, 16 Aug 2024 11:12:19 +0100 |
parents | e69e3d585f07 |
children | f4733654f144 |
rev | line source |
---|---|
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
1 # scmutil.py - Mercurial core utility functions |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46672
diff
changeset
|
3 # Copyright Olivia Mackall <olivia@selenic.com> |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
4 # |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
7 |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
8 |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
9 import binascii |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
10 import errno |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
11 import glob |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
12 import os |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
13 import posixpath |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
14 import re |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
15 import subprocess |
51729
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
16 import typing |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
17 import weakref |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
18 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
19 from typing import ( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
20 Callable, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
21 Dict, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
22 Iterable, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
23 Iterator, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
24 List, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
25 Optional, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
26 Set, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
27 Tuple, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
28 ) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
29 |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
30 from .i18n import _ |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
31 from .node import ( |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
32 bin, |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
33 hex, |
39894
d739f423bf06
repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents:
39891
diff
changeset
|
34 nullrev, |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
35 short, |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
36 wdirrev, |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
37 ) |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
38 from .thirdparty import attr |
51729
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
39 |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
40 # Force pytype to use the non-vendored package |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
41 if typing.TYPE_CHECKING: |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
42 # noinspection PyPackageRequirements |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
43 import attr |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
44 |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
45 from . import ( |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
46 copies as copiesmod, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
47 encoding, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
48 error, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
49 match as matchmod, |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
50 obsolete, |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
51 obsutil, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
52 pathutil, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
53 phases, |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
54 policy, |
30305
af7c60988f6e
py3: make scmutil.rcpath() return bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30109
diff
changeset
|
55 pycompat, |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
56 requirements as requirementsmod, |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
57 revsetlang, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
58 similar, |
39897
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
59 smartset, |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
60 typelib, |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
61 url, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
62 util, |
34543
6fad8059a970
scmutil: handle conflicting files and dirs in origbackuppath
Mark Thomas <mbthomas@fb.com>
parents:
34542
diff
changeset
|
63 vfs, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
64 ) |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
65 |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
66 from .utils import ( |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
44038
diff
changeset
|
67 hashutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37094
diff
changeset
|
68 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
69 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
70 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
71 |
34645 | 72 if pycompat.iswindows: |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
73 from . import scmwindows as scmplatform |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
74 else: |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
75 from . import scmposix as scmplatform |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
76 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
77 if typing.TYPE_CHECKING: |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
78 from . import ( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
79 ui as uimod, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
80 ) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
81 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43365
diff
changeset
|
82 parsers = policy.importmod('parsers') |
44013
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
83 rustrevlog = policy.importrust('revlog') |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
84 |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30309
diff
changeset
|
85 termsize = scmplatform.termsize |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
86 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
87 |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
88 @attr.s(slots=True, repr=False) |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
89 class status: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
90 """Struct with a list of files per status. |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
91 |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
92 The 'deleted', 'unknown' and 'ignored' properties are only |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
93 relevant to the working copy. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
94 """ |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
95 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
96 modified = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
97 added = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
98 removed = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
99 deleted = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
100 unknown = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
101 ignored = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
102 clean = attr.ib(default=attr.Factory(list), type=List[bytes]) |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
103 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
104 def __iter__(self) -> Iterator[List[bytes]]: |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
105 yield self.modified |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
106 yield self.added |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
107 yield self.removed |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
108 yield self.deleted |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
109 yield self.unknown |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
110 yield self.ignored |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
111 yield self.clean |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
112 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
113 def __repr__(self) -> str: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
114 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
115 r'<status modified=%s, added=%s, removed=%s, deleted=%s, ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
116 r'unknown=%s, ignored=%s, clean=%s>' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
117 ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
118 |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
119 |
20392
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
120 def itersubrepos(ctx1, ctx2): |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
121 """find subrepos in ctx1 or ctx2""" |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
122 # Create a (subpath, ctx) mapping where we prefer subpaths from |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
123 # ctx1. The subpaths from ctx2 are important when the .hgsub file |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
124 # has been modified (in ctx2) but not yet committed (in ctx1). |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
125 subpaths = dict.fromkeys(ctx2.substate, ctx2) |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
126 subpaths.update(dict.fromkeys(ctx1.substate, ctx1)) |
25418
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
127 |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
128 missing = set() |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
129 |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
130 for subpath in ctx2.substate: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
131 if subpath not in ctx1.substate: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
132 del subpaths[subpath] |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
133 missing.add(subpath) |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
134 |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
135 for subpath, ctx in sorted(subpaths.items()): |
20392
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
136 yield subpath, ctx.sub(subpath) |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
137 |
25418
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
138 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way, |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
139 # status and diff will have an accurate result when it does |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
140 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
141 # against itself. |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
142 for subpath in missing: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
143 yield subpath, ctx2.nullsub(subpath, ctx1) |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
144 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
145 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
146 def nochangesfound(ui: "uimod.ui", repo, excluded=None) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
147 """Report no changes for push/pull, excluded is None or a list of |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
148 nodes excluded from the push/pull. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
149 """ |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
150 secretlist = [] |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
151 if excluded: |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
152 for n in excluded: |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
153 ctx = repo[n] |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
154 if ctx.phase() >= phases.secret and not ctx.extinct(): |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
155 secretlist.append(n) |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
156 |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
157 if secretlist: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
158 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 _(b"no changes found (ignored %d secret changesets)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
160 % len(secretlist) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
161 ) |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
162 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 ui.status(_(b"no changes found\n")) |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
164 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
165 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
166 def callcatch(ui: "uimod.ui", func: Callable[[], int]) -> int: |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
167 """call func() with global exception handling |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
168 |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
169 return func() if no exception happens. otherwise do some error handling |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
170 and return an exit code accordingly. does not handle all exceptions. |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
171 """ |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
172 coarse_exit_code = -1 |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
173 detailed_exit_code = -1 |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
174 try: |
32041
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
175 try: |
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
176 return func() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
177 except: # re-raises |
32041
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
178 ui.traceback() |
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
179 raise |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
180 # Global exception handling, alphabetically |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
181 # Mercurial-specific first, followed by built-in and library exceptions |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
182 except error.LockHeld as inst: |
45828
e0dbfbd4062c
errors: set detailed exit code to 20 for locking errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45827
diff
changeset
|
183 detailed_exit_code = 20 |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
184 if inst.errno == errno.ETIMEDOUT: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
185 reason = _(b'timed out waiting for lock held by %r') % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
186 pycompat.bytestr(inst.locker) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
187 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
188 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 reason = _(b'lock held by %r') % inst.locker |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
190 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 _(b"abort: %s: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
192 % (inst.desc or stringutil.forcebytestr(inst.filename), reason) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
193 ) |
32088
0d892d820a51
lock: avoid unintentional lock acquisition at failure of readlock
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32041
diff
changeset
|
194 if not inst.locker: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 ui.error(_(b"(lock might be very busy)\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
196 except error.LockUnavailable as inst: |
45828
e0dbfbd4062c
errors: set detailed exit code to 20 for locking errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45827
diff
changeset
|
197 detailed_exit_code = 20 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
198 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 _(b"abort: could not lock %s: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
200 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
201 inst.desc or stringutil.forcebytestr(inst.filename), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
202 encoding.strtolocal(inst.strerror), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
203 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
204 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
205 except error.RepoError as inst: |
48368
8c4881c07f57
errors: use detailed exit code for RepoLookupError
Martin von Zweigbergk <martinvonz@google.com>
parents:
48367
diff
changeset
|
206 if isinstance(inst, error.RepoLookupError): |
8c4881c07f57
errors: use detailed exit code for RepoLookupError
Martin von Zweigbergk <martinvonz@google.com>
parents:
48367
diff
changeset
|
207 detailed_exit_code = 10 |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
208 ui.error(_(b"abort: %s\n") % inst) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
209 if inst.hint: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 ui.error(_(b"(%s)\n") % inst.hint) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
211 except error.ResponseError as inst: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 ui.error(_(b"abort: %s") % inst.args[0]) |
36661
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
213 msg = inst.args[1] |
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
214 if isinstance(msg, type(u'')): |
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
215 msg = pycompat.sysbytes(msg) |
46672
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
216 if msg is None: |
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
217 ui.error(b"\n") |
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
218 elif not isinstance(msg, bytes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 ui.error(b" %r\n" % (msg,)) |
36695
c442c4a92ae8
scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Augie Fackler <augie@google.com>
parents:
36661
diff
changeset
|
220 elif not msg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 ui.error(_(b" empty string\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
222 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
223 ui.error(b"\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg))) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
224 except error.CensoredNodeError as inst: |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
225 ui.error(_(b"abort: file censored %s\n") % inst) |
32659
7b17f9de6d3e
revlog: map rev(wdirid) to WdirUnsupported exception
Yuya Nishihara <yuya@tcha.org>
parents:
32658
diff
changeset
|
226 except error.WdirUnsupported: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
227 ui.error(_(b"abort: working directory revision cannot be specified\n")) |
47293
7a769ac49637
errors: catch the new Error class in scmutil and chgserver
Martin von Zweigbergk <martinvonz@google.com>
parents:
47291
diff
changeset
|
228 except error.Error as inst: |
47289
33c0c25d0b0f
errors: let each Abort subclass define its error code
Martin von Zweigbergk <martinvonz@google.com>
parents:
47128
diff
changeset
|
229 if inst.detailed_exit_code is not None: |
33c0c25d0b0f
errors: let each Abort subclass define its error code
Martin von Zweigbergk <martinvonz@google.com>
parents:
47128
diff
changeset
|
230 detailed_exit_code = inst.detailed_exit_code |
47291
d9c71bbe20f7
errors: make InterventionRequired subclass Abort
Martin von Zweigbergk <martinvonz@google.com>
parents:
47289
diff
changeset
|
231 if inst.coarse_exit_code is not None: |
d9c71bbe20f7
errors: make InterventionRequired subclass Abort
Martin von Zweigbergk <martinvonz@google.com>
parents:
47289
diff
changeset
|
232 coarse_exit_code = inst.coarse_exit_code |
45885
600aec73f309
errors: format "abort: " text in a new Abort.format() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
45884
diff
changeset
|
233 ui.error(inst.format()) |
45825
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
234 except error.WorkerError as inst: |
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
235 # Don't print a message -- the worker already should have |
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
236 return inst.status_code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
237 except ImportError as inst: |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
238 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst)) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
239 m = stringutil.forcebytestr(inst).split()[-1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 if m in b"mpatch bdiff".split(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
241 ui.error(_(b"(did you forget to compile extensions?)\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
242 elif m in b"zlib".split(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
243 ui.error(_(b"(is your Python install correct?)\n")) |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
244 except util.urlerr.httperror as inst: |
45839
ebee234d952a
errors: set detailed exit code to 100 for some remote errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45838
diff
changeset
|
245 detailed_exit_code = 100 |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
246 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst)) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
247 except util.urlerr.urlerror as inst: |
45839
ebee234d952a
errors: set detailed exit code to 100 for some remote errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45838
diff
changeset
|
248 detailed_exit_code = 100 |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
249 try: # usually it is in the form (errno, strerror) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
250 reason = inst.reason.args[1] |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
251 except (AttributeError, IndexError): |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
252 # it might be anything, for example a string |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
253 reason = inst.reason |
48934
06de08b36c82
py3: use str instead of pycompat.unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
254 if isinstance(reason, str): |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
255 # SSLError of Python 2.7.9 contains a unicode |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
256 reason = encoding.unitolocal(reason) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
257 ui.error(_(b"abort: error: %s\n") % stringutil.forcebytestr(reason)) |
41421
f83b230b7fb3
dispatch: unify handler of IOError and OSError
Yuya Nishihara <yuya@tcha.org>
parents:
41420
diff
changeset
|
258 except (IOError, OSError) as inst: |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
259 if hasattr(inst, "args") and inst.args and inst.args[0] == errno.EPIPE: |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
260 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
261 elif getattr(inst, "strerror", None): # common IOError or OSError |
41420
b6673e9bdcf6
dispatch: quote filename in IOError as well
Yuya Nishihara <yuya@tcha.org>
parents:
41419
diff
changeset
|
262 if getattr(inst, "filename", None) is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
263 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 _(b"abort: %s: '%s'\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
265 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
266 encoding.strtolocal(inst.strerror), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
267 stringutil.forcebytestr(inst.filename), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
268 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
269 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
270 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 ui.error(_(b"abort: %s\n") % encoding.strtolocal(inst.strerror)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
272 else: # suspicious IOError |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
273 raise |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
274 except MemoryError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
275 ui.error(_(b"abort: out of memory\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
276 except SystemExit as inst: |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
277 # Commands shouldn't sys.exit directly, but give a return code. |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
278 # Just in case catch this and and pass exit code to caller. |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
279 detailed_exit_code = 254 |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
280 coarse_exit_code = inst.code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
281 |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
282 if ui.configbool(b'ui', b'detailed-exit-code'): |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
283 return detailed_exit_code |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
284 else: |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
285 return coarse_exit_code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
286 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
287 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
288 def checknewlabel(repo, lbl: bytes, kind) -> None: |
19070
290a61833b99
translations: change label integer error to not specify the kind of label
Durham Goode <durham@fb.com>
parents:
18951
diff
changeset
|
289 # Do not use the "kind" parameter in ui output. |
290a61833b99
translations: change label integer error to not specify the kind of label
Durham Goode <durham@fb.com>
parents:
18951
diff
changeset
|
290 # It makes strings difficult to translate. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 if lbl in [b'tip', b'.', b'null']: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
292 raise error.InputError(_(b"the name '%s' is reserved") % lbl) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
293 for c in (b':', b'\0', b'\n', b'\r'): |
17821
361ab1e2086f
scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents:
17817
diff
changeset
|
294 if c in lbl: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
295 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
296 _(b"%r cannot be used in a name") % pycompat.bytestr(c) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
297 ) |
18566
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
298 try: |
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
299 int(lbl) |
49968
566f7dd563c1
scmutil: make checknewlabel() allow "_" in otherwise numeric names (issue6737)
Anton Shestakov <av6@dwimlabs.net>
parents:
49450
diff
changeset
|
300 if b'_' in lbl: |
566f7dd563c1
scmutil: make checknewlabel() allow "_" in otherwise numeric names (issue6737)
Anton Shestakov <av6@dwimlabs.net>
parents:
49450
diff
changeset
|
301 # If label contains underscores, Python might consider it an |
566f7dd563c1
scmutil: make checknewlabel() allow "_" in otherwise numeric names (issue6737)
Anton Shestakov <av6@dwimlabs.net>
parents:
49450
diff
changeset
|
302 # integer (with "_" as visual separators), but we do not. |
566f7dd563c1
scmutil: make checknewlabel() allow "_" in otherwise numeric names (issue6737)
Anton Shestakov <av6@dwimlabs.net>
parents:
49450
diff
changeset
|
303 # See PEP 515 - Underscores in Numeric Literals. |
566f7dd563c1
scmutil: make checknewlabel() allow "_" in otherwise numeric names (issue6737)
Anton Shestakov <av6@dwimlabs.net>
parents:
49450
diff
changeset
|
304 raise ValueError |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
305 raise error.InputError(_(b"cannot use an integer as a name")) |
18566
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
306 except ValueError: |
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
307 pass |
36145
4f3e989536c3
label: enforce the lack of leading or trailing white space
Boris Feld <boris.feld@octobus.net>
parents:
36137
diff
changeset
|
308 if lbl.strip() != lbl: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
309 raise error.InputError( |
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
310 _(b"leading or trailing whitespace in name %r") % lbl |
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
311 ) |
17817
b17be267b59c
scmutil: add function to validate new branch, tag, and bookmark names
Kevin Bullock <kbullock@ringworld.org>
parents:
17768
diff
changeset
|
312 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
313 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
314 def checkfilename(f: bytes) -> None: |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
315 '''Check that the filename f is an acceptable filename for a tracked file''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
316 if b'\r' in f or b'\n' in f: |
45844
3175b0e0058b
errors: use InputError for errors about bad paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
45841
diff
changeset
|
317 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
318 _(b"'\\n' and '\\r' disallowed in filenames: %r") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
319 % pycompat.bytestr(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
320 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
321 |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
322 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
323 def checkportable(ui: "uimod.ui", f: bytes) -> None: |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
324 '''Check if filename f is portable and warn or abort depending on config''' |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
325 checkfilename(f) |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
326 abort, warn = checkportabilityalert(ui) |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
327 if abort or warn: |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
328 msg = util.checkwinfilename(f) |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
329 if msg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 msg = b"%s: %s" % (msg, procutil.shellquote(f)) |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
331 if abort: |
45844
3175b0e0058b
errors: use InputError for errors about bad paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
45841
diff
changeset
|
332 raise error.InputError(msg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
333 ui.warn(_(b"warning: %s\n") % msg) |
14068
04ce8fa1015d
add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
14067
diff
changeset
|
334 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
335 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
336 def checkportabilityalert(ui: "uimod.ui") -> Tuple[bool, bool]: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
337 """check if the user's config requests nothing, a warning, or abort for |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
338 non-portable filenames""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 val = ui.config(b'ui', b'portablefilenames') |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
340 lval = val.lower() |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
341 bval = stringutil.parsebool(val) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 abort = pycompat.iswindows or lval == b'abort' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 warn = bval or lval == b'warn' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 if bval is None and not (warn or abort or lval == b'ignore'): |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
345 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 _(b"ui.portablefilenames value is invalid ('%s')") % val |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
347 ) |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
348 return abort, warn |
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
349 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
350 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
351 class casecollisionauditor: |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
352 def __init__(self, ui: "uimod.ui", abort: bool, dirstate) -> None: |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
353 self._ui = ui |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
354 self._abort = abort |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
355 allfiles = b'\0'.join(dirstate) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 self._loweredfiles = set(encoding.lower(allfiles).split(b'\0')) |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
357 self._dirstate = dirstate |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
358 # The purpose of _newfiles is so that we don't complain about |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
359 # case collisions if someone were to call this object with the |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
360 # same filename twice. |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
361 self._newfiles = set() |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
362 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
363 def __call__(self, f: bytes) -> None: |
20006
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
364 if f in self._newfiles: |
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
365 return |
14980
28e98a8b173d
i18n: use UTF-8 string to lower filename for case collision check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
14861
diff
changeset
|
366 fl = encoding.lower(f) |
20006
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
367 if fl in self._loweredfiles and f not in self._dirstate: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
368 msg = _(b'possible case-folding collision for %s') % f |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
369 if self._abort: |
48367
0b8e076e878c
errors: use detailed exit code for detected case-collision
Martin von Zweigbergk <martinvonz@google.com>
parents:
48315
diff
changeset
|
370 raise error.StateError(msg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 self._ui.warn(_(b"warning: %s\n") % msg) |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
372 self._loweredfiles.add(fl) |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
373 self._newfiles.add(f) |
13970
d13913355390
move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13962
diff
changeset
|
374 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
375 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
376 def combined_filtered_and_obsolete_hash( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
377 repo, maxrev, needobsolete: bool = False |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
378 ): |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
379 """build hash of filtered revisions in the current repoview. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
380 |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
381 Multiple caches perform up-to-date validation by checking that the |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
382 tiprev and tipnode stored in the cache file match the current repository. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
383 However, this is not sufficient for validating repoviews because the set |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
384 of revisions in the view may change without the repository tiprev and |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
385 tipnode changing. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
386 |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
387 This function hashes all the revs filtered from the view (and, optionally, |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
388 all obsolete revs) up to maxrev and returns that SHA-1 digest. |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
389 """ |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
390 cl = repo.changelog |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
391 if needobsolete: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
392 obsrevs = obsolete.getrevs(repo, b'obsolete') |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
393 if not cl.filteredrevs and not obsrevs: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
394 return None |
48724
c7e675848027
scmutil: obsrevs is already a frozenset
Anton Shestakov <av6@dwimlabs.net>
parents:
48687
diff
changeset
|
395 key = (maxrev, hash(cl.filteredrevs), hash(obsrevs)) |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
396 else: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
397 if not cl.filteredrevs: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
398 return None |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
399 key = maxrev |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
400 obsrevs = frozenset() |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
401 |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
402 result = cl._filteredrevs_hashcache.get(key) |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
403 if not result: |
51525
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
404 revs, obs_revs = _filtered_and_obs_revs(repo, maxrev) |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
405 if needobsolete: |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
406 revs = revs | obs_revs |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
407 revs = sorted(revs) |
45515
89f0d9f87701
branchmap: add a cache validation cache, avoid expensive re-hash on every use
Kyle Lippincott <spectral@google.com>
parents:
45483
diff
changeset
|
408 if revs: |
51524
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
409 result = _hash_revs(revs) |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
410 cl._filteredrevs_hashcache[key] = result |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
411 return result |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
412 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
413 |
51529
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
414 def filtered_and_obsolete_hash(repo, maxrev): |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
415 """build hashs of filtered and obsolete revisions in the current repoview. |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
416 |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
417 Multiple caches perform up-to-date validation by checking that the |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
418 tiprev and tipnode stored in the cache file match the current repository. |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
419 However, this is not sufficient for validating repoviews because the set |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
420 of revisions in the view may change without the repository tiprev and |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
421 tipnode changing. |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
422 |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
423 This function hashes all the revs filtered from the view up to maxrev and |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
424 returns that SHA-1 digest. The obsolete revisions hashed are only the |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
425 non-filtered one. |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
426 """ |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
427 cl = repo.changelog |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
428 obs_set = obsolete.getrevs(repo, b'obsolete') |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
429 key = (maxrev, hash(cl.filteredrevs), hash(obs_set)) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
430 |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
431 result = cl._filteredrevs_hashcache.get(key) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
432 if result is None: |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
433 filtered_hash = None |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
434 obs_hash = None |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
435 filtered_revs, obs_revs = _filtered_and_obs_revs(repo, maxrev) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
436 if filtered_revs: |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
437 filtered_hash = _hash_revs(filtered_revs) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
438 if obs_revs: |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
439 obs_hash = _hash_revs(obs_revs) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
440 result = (filtered_hash, obs_hash) |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
441 cl._filteredrevs_hashcache[key] = result |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
442 return result |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
443 |
4141d12de073
branchcache: store filtered hash and obsolete hash independently for V3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51526
diff
changeset
|
444 |
51525
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
445 def _filtered_and_obs_revs(repo, max_rev): |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
446 """return the set of filtered and non-filtered obsolete revision""" |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
447 cl = repo.changelog |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
448 obs_set = obsolete.getrevs(repo, b'obsolete') |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
449 filtered_set = cl.filteredrevs |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
450 if cl.filteredrevs: |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
451 obs_set = obs_set - cl.filteredrevs |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
452 if max_rev < (len(cl) - 1): |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
453 # there might be revision to filter out |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
454 filtered_set = set(r for r in filtered_set if r <= max_rev) |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
455 obs_set = set(r for r in obs_set if r <= max_rev) |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
456 return (filtered_set, obs_set) |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
457 |
530b4cffd6a6
filteredhash: split the computation of revision sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51524
diff
changeset
|
458 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
459 def _hash_revs(revs: Iterable[int]) -> bytes: |
51524
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
460 """return a hash from a list of revision numbers""" |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
461 s = hashutil.sha1() |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
462 for rev in revs: |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
463 s.update(b'%d;' % rev) |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
464 return s.digest() |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
465 |
4bfae99c4021
filteredhash: move the hashing in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51283
diff
changeset
|
466 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
467 def walkrepos( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
468 path, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
469 followsym: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
470 seen_dirs: Optional[List[bytes]] = None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
471 recurse: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
472 ) -> Iterable[bytes]: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
473 """yield every hg repository under path, always recursively. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
474 The recurse flag will only control recursion into repo working dirs""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
475 |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
476 def errhandler(err): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
477 if err.filename == path: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
478 raise err |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
479 |
14961
5523529bd1af
walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents:
14928
diff
changeset
|
480 samestat = getattr(os.path, 'samestat', None) |
5523529bd1af
walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents:
14928
diff
changeset
|
481 if followsym and samestat is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
482 |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
483 def adddir(dirlst, dirname): |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
484 dirstat = os.stat(dirname) |
36338
ddd9474d2e08
walkrepos: don't reimplement any()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36313
diff
changeset
|
485 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst) |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
486 if not match: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
487 dirlst.append(dirstat) |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
488 return not match |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
489 |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
490 else: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
491 followsym = False |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
492 |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
493 if (seen_dirs is None) and followsym: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
494 seen_dirs = [] |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
495 adddir(seen_dirs, path) |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
496 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
497 dirs.sort() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
498 if b'.hg' in dirs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
499 yield root # found a repository |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
500 qroot = os.path.join(root, b'.hg', b'patches') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
501 if os.path.isdir(os.path.join(qroot, b'.hg')): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
502 yield qroot # we have a patch queue repo here |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
503 if recurse: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
504 # avoid recursing inside the .hg directory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
505 dirs.remove(b'.hg') |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
506 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
507 dirs[:] = [] # don't descend further |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
508 elif followsym: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
509 newdirs = [] |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
510 for d in dirs: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
511 fname = os.path.join(root, d) |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
512 if adddir(seen_dirs, fname): |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
513 if os.path.islink(fname): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
514 for hgname in walkrepos(fname, True, seen_dirs): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
515 yield hgname |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
516 else: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
517 newdirs.append(d) |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
518 dirs[:] = newdirs |
13984
af60153b5e3b
move rcpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13975
diff
changeset
|
519 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
520 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
521 def binnode(ctx) -> bytes: |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
522 """Return binary node id for a given basectx""" |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
523 node = ctx.node() |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
524 if node is None: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
525 return ctx.repo().nodeconstants.wdirid |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
526 return node |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
527 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
528 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
529 def intrev(ctx) -> int: |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
530 """Return integer for a given basectx that can be used in comparison or |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
531 arithmetic operation""" |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
532 rev = ctx.rev() |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
533 if rev is None: |
25739
3dabc9b7494a
changeset_printer: use node.wdirrev to calculate meaningful parentrevs
Yuya Nishihara <yuya@tcha.org>
parents:
25660
diff
changeset
|
534 return wdirrev |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
535 return rev |
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
536 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
537 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
538 def formatchangeid(ctx) -> bytes: |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
539 """Format changectx as '{rev}:{node|formatnode}', which is the default |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35748
diff
changeset
|
540 template provided by logcmdutil.changesettemplater""" |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
541 repo = ctx.repo() |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
542 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx)) |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
543 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
544 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
545 def formatrevnode(ui: "uimod.ui", rev: int, node: bytes) -> bytes: |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
546 """Format given revision and node depending on the current verbosity""" |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
547 if ui.debugflag: |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
548 hexfunc = hex |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
549 else: |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
550 hexfunc = short |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
551 return b'%d:%s' % (rev, hexfunc(node)) |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
552 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
553 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
554 def resolvehexnodeidprefix(repo, prefix: bytes): |
44810
62435a5b46fe
revisions: parse "x123" as "nodeid starting with 123" without prefixhexnode
Martin von Zweigbergk <martinvonz@google.com>
parents:
44548
diff
changeset
|
555 if prefix.startswith(b'x'): |
38855
7848f284b211
revisions: allow "x123" to refer to nodeid prefix "123"
Martin von Zweigbergk <martinvonz@google.com>
parents:
38854
diff
changeset
|
556 prefix = prefix[1:] |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
557 try: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
558 # Uses unfiltered repo because it's faster when prefix is ambiguous/ |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
559 # This matches the shortesthexnodeidprefix() function below. |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
560 node = repo.unfiltered().changelog._partialmatch(prefix) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
561 except error.AmbiguousPrefixLookupError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 revset = repo.ui.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 b'experimental', b'revisions.disambiguatewithin' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 ) |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
565 if revset: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
566 # Clear config to avoid infinite recursion |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
567 configoverrides = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 (b'experimental', b'revisions.disambiguatewithin'): None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
569 } |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
570 with repo.ui.configoverride(configoverrides): |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
571 revs = repo.anyrevs([revset], user=True) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
572 matches = [] |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
573 for rev in revs: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
574 node = repo.changelog.node(rev) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
575 if hex(node).startswith(prefix): |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
576 matches.append(node) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
577 if len(matches) == 1: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
578 return matches[0] |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
579 raise |
37504
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
580 if node is None: |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
581 return |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
582 repo.changelog.rev(node) # make sure node isn't filtered |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
583 return node |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
584 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
585 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
586 def mayberevnum(repo, prefix: bytes) -> bool: |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
587 """Checks if the given prefix may be mistaken for a revision number""" |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
588 try: |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
589 i = int(prefix) |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
590 # if we are a pure int, then starting with zero will not be |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
591 # confused as a rev; or, obviously, if the int is larger |
40341
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
592 # than the value of the tip rev. We still need to disambiguate if |
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
593 # prefix == '0', since that *is* a valid revnum. |
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
594 if (prefix != b'0' and prefix[0:1] == b'0') or i >= len(repo): |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
595 return False |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
596 return True |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
597 except ValueError: |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
598 return False |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
599 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
600 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
601 def shortesthexnodeidprefix(repo, node: bytes, minlength: int = 1, cache=None): |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
602 """Find the shortest unambiguous prefix that matches hexnode. |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
603 |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
604 If "cache" is not None, it must be a dictionary that can be used for |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
605 caching between calls to this method. |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
606 """ |
37708
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
607 # _partialmatch() of filtered changelog could take O(len(repo)) time, |
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
608 # which would be unacceptably slow. so we look for hash collision in |
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
609 # unfiltered space, which means some hashes may be slightly longer. |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
610 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
611 minlength = max(minlength, 1) |
40403
bf249bb60087
shortest: never emit 0-length prefix even if unique
Martin von Zweigbergk <martinvonz@google.com>
parents:
40367
diff
changeset
|
612 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
613 def disambiguate(prefix: bytes): |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
614 """Disambiguate against revnums.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 if repo.ui.configbool(b'experimental', b'revisions.prefixhexnode'): |
38856
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
616 if mayberevnum(repo, prefix): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
617 return b'x' + prefix |
38856
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
618 else: |
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
619 return prefix |
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
620 |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
621 hexnode = hex(node) |
37979
5ac72e07692a
shortest: avoid magic number "41"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37971
diff
changeset
|
622 for length in range(len(prefix), len(hexnode) + 1): |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
623 prefix = hexnode[:length] |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
624 if not mayberevnum(repo, prefix): |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
625 return prefix |
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
626 |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
627 cl = repo.unfiltered().changelog |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 revset = repo.ui.config(b'experimental', b'revisions.disambiguatewithin') |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
629 if revset: |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
630 revs = None |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
631 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
632 revs = cache.get(b'disambiguationrevset') |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
633 if revs is None: |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
634 revs = repo.anyrevs([revset], user=True) |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
635 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 cache[b'disambiguationrevset'] = revs |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
637 if cl.rev(node) in revs: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
638 hexnode = hex(node) |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
639 nodetree = None |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
640 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
641 nodetree = cache.get(b'disambiguationnodetree') |
51252
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
642 is_invalidated = getattr(nodetree, 'is_invalidated', lambda: False) |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
643 if is_invalidated(): |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
644 nodetree = None |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
645 if not nodetree: |
51252
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
646 if hasattr(parsers, 'nodetree') and isinstance( |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
647 cl.index, parsers.index |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
648 ): |
44013
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
649 index = cl.index |
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
650 nodetree = parsers.nodetree(index, len(revs)) |
51252
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
651 elif getattr(cl.index, 'is_rust', False): |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
652 nodetree = rustrevlog.NodeTree(cl.index) |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
653 |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
654 if nodetree is not None: |
51252
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
655 for r in revs: |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
656 nodetree.insert(r) |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
657 if cache is not None: |
fd1aa5e18f75
rust-revlog: using the ad-hoc `NodeTree` in scmutil
Georges Racinet <georges.racinet@octobus.net>
parents:
50929
diff
changeset
|
658 cache[b'disambiguationnodetree'] = nodetree |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
659 length = max(nodetree.shortest(node), minlength) |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
660 prefix = hexnode[:length] |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
661 return disambiguate(prefix) |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
662 for length in range(minlength, len(hexnode) + 1): |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
663 matches = [] |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
664 prefix = hexnode[:length] |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
665 for rev in revs: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
666 otherhexnode = repo[rev].hex() |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
667 if prefix == otherhexnode[:length]: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
668 matches.append(otherhexnode) |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
669 if len(matches) == 1: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
670 return disambiguate(prefix) |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
671 |
37865
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
672 try: |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
673 return disambiguate(cl.shortest(node, minlength)) |
37865
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
674 except error.LookupError: |
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
675 raise error.RepoLookupError() |
37680
e743b8524d60
scmutil: introduce shortesthexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37679
diff
changeset
|
676 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
677 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
678 def isrevsymbol(repo, symbol: bytes) -> bool: |
37677
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
679 """Checks if a symbol exists in the repo. |
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
680 |
38841
df0873ab5c14
revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com>
parents:
38799
diff
changeset
|
681 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the |
df0873ab5c14
revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com>
parents:
38799
diff
changeset
|
682 symbol is an ambiguous nodeid prefix. |
37677
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
683 """ |
37350
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
684 try: |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
685 revsymbol(repo, symbol) |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
686 return True |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
687 except error.RepoLookupError: |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
688 return False |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
689 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
690 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
691 def revsymbol(repo, symbol: bytes): |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
692 """Returns a context given a single revision symbol (as string). |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
693 |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
694 This is similar to revsingle(), but accepts only a single revision symbol, |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
695 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
696 not "max(public())". |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
697 """ |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
698 if not isinstance(symbol, bytes): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
699 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
700 b"symbol (%s of type %s) was not a string, did you mean " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
701 b"repo[symbol]?" % (symbol, type(symbol)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
702 ) |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
703 raise error.ProgrammingError(msg) |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
704 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 if symbol in (b'.', b'tip', b'null'): |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
706 return repo[symbol] |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
707 |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
708 try: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
709 r = int(symbol) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
710 if b'%d' % r != symbol: |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
711 raise ValueError |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
712 l = len(repo.changelog) |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
713 if r < 0: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
714 r += l |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
715 if r < 0 or r >= l and r != wdirrev: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
716 raise ValueError |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
717 return repo[r] |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
718 except error.FilteredIndexError: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
719 raise |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
720 except (ValueError, OverflowError, IndexError): |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
721 pass |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
722 |
47041
a407fe56d6e8
core: don't hard-code hex node lengths
Joerg Sonnenberger <joerg@bec.de>
parents:
47012
diff
changeset
|
723 if len(symbol) == 2 * repo.nodeconstants.nodelen: |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
724 try: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
725 node = bin(symbol) |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
726 rev = repo.changelog.rev(node) |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
727 return repo[rev] |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
728 except error.FilteredLookupError: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
729 raise |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
730 except (binascii.Error, LookupError): |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
731 pass |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
732 |
37529
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
733 # look up bookmarks through the name interface |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
734 try: |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
735 node = repo.names.singlenode(repo, symbol) |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
736 rev = repo.changelog.rev(node) |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
737 return repo[rev] |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
738 except KeyError: |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
739 pass |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
740 |
37679
ab828755e1ea
scmutil: use resolvehexnodeidprefix() from revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37678
diff
changeset
|
741 node = resolvehexnodeidprefix(repo, symbol) |
37530
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
742 if node is not None: |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
743 rev = repo.changelog.rev(node) |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
744 return repo[rev] |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
745 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
746 raise error.RepoLookupError(_(b"unknown revision '%s'") % symbol) |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
747 |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
748 except error.WdirUnsupported: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
749 return repo[None] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
750 except ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
751 error.FilteredIndexError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
752 error.FilteredLookupError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
753 error.FilteredRepoLookupError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
754 ): |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
755 raise _filterederror(repo, symbol) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
757 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
758 def _filterederror(repo, changeid: bytes) -> error.FilteredRepoLookupError: |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
759 """build an exception to be raised about a filtered changeid |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
760 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
761 This is extracted in a function to help extensions (eg: evolve) to |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
762 experiment with various message variants.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
763 if repo.filtername.startswith(b'visible'): |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
764 # Check if the changeset is obsolete |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
765 unfilteredrepo = repo.unfiltered() |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
766 ctx = revsymbol(unfilteredrepo, changeid) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
767 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
768 # If the changeset is obsolete, enrich the message with the reason |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
769 # that made this changeset not visible |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
770 if ctx.obsolete(): |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
771 msg = obsutil._getfilteredreason(repo, changeid, ctx) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
772 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
773 msg = _(b"hidden revision '%s'") % changeid |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
774 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 hint = _(b'use --hidden to access hidden revisions') |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
776 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
777 return error.FilteredRepoLookupError(msg, hint=hint) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
778 msg = _(b"filtered revision '%s' (not in '%s' subset)") |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
779 msg %= (changeid, repo.filtername) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
780 return error.FilteredRepoLookupError(msg) |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
781 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
782 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
783 def revsingle(repo, revspec, default=b'.', localalias=None): |
19509
8963a706e075
revsingle: fix silly API issue (issue2992)
Matt Mackall <mpm@selenic.com>
parents:
19154
diff
changeset
|
784 if not revspec and revspec != 0: |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
785 return repo[default] |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
786 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
787 l = revrange(repo, [revspec], localalias=localalias) |
22814
8110405cf8ae
revset-limit: use boolean testing instead of `len(revs) < 1`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21799
diff
changeset
|
788 if not l: |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
789 raise error.InputError(_(b'empty revision set')) |
22815
4f81470e83bf
revsingle: use `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22814
diff
changeset
|
790 return repo[l.last()] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
791 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
792 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
793 def _pairspec(revspec) -> bool: |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
794 tree = revsetlang.parse(revspec) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
795 return tree and tree[0] in ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
796 b'range', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
797 b'rangepre', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
798 b'rangepost', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
799 b'rangeall', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
800 ) |
26020
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
801 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
802 |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
803 def revpair(repo, revs): |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
804 if not revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
805 return repo[b'.'], repo[None] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
806 |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
807 l = revrange(repo, revs) |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
808 |
41370
a728ef2f9b15
revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
41369
diff
changeset
|
809 if not l: |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
810 raise error.InputError(_(b'empty revision range')) |
41370
a728ef2f9b15
revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
41369
diff
changeset
|
811 |
41369
5079242abef9
revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents:
41288
diff
changeset
|
812 first = l.first() |
5079242abef9
revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents:
41288
diff
changeset
|
813 second = l.last() |
20862
97b2f26dfc43
revpair: smartset compatibility
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20820
diff
changeset
|
814 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
815 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
816 first == second |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
817 and len(revs) >= 2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
818 and not all(revrange(repo, [r]) for r in revs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
819 ): |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
820 raise error.InputError(_(b'empty revision on one side of range')) |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
821 |
26020
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
822 # if top-level is range expression, the result must always be a pair |
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
823 if first == second and len(revs) == 1 and not _pairspec(revs[0]): |
37252
e9ee540af434
scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
824 return repo[first], repo[None] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
825 |
37252
e9ee540af434
scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
826 return repo[first], repo[second] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
827 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
828 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
829 def revrange(repo, specs, localalias=None): |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
830 """Execute 1 to many revsets and return the union. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
831 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
832 This is the preferred mechanism for executing revsets using user-specified |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
833 config options, such as revset aliases. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
834 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
835 The revsets specified by ``specs`` will be executed via a chained ``OR`` |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
836 expression. If ``specs`` is empty, an empty result is returned. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
837 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
838 ``specs`` can contain integers, in which case they are assumed to be |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
839 revision numbers. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
840 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
841 It is assumed the revsets are already formatted. If you have arguments |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
842 that need to be expanded in the revset, call ``revsetlang.formatspec()`` |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
843 and pass the result as an element of ``specs``. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
844 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
845 Specifying a single revset is allowed. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
846 |
44075
2122ffa903ea
doc: fix references to `revset.abstractsmartset`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44063
diff
changeset
|
847 Returns a ``smartset.abstractsmartset`` which is a list-like interface over |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
848 integer revisions. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
849 """ |
25928
4ee4f7415095
revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents:
25904
diff
changeset
|
850 allspecs = [] |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
851 for spec in specs: |
25904
fbaa2de13cf6
revrange: drop old-style parser in favor of revset (API)
Yuya Nishihara <yuya@tcha.org>
parents:
25772
diff
changeset
|
852 if isinstance(spec, int): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
853 spec = revsetlang.formatspec(b'%d', spec) |
25928
4ee4f7415095
revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents:
25904
diff
changeset
|
854 allspecs.append(spec) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
855 return repo.anyrevs(allspecs, user=True, localalias=localalias) |
14320 | 856 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
857 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
858 def increasingwindows( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
859 windowsize: int = 8, sizelimit: int = 512 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
860 ) -> Iterable[int]: |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
861 while True: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
862 yield windowsize |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
863 if windowsize < sizelimit: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
864 windowsize *= 2 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
865 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
866 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
867 def walkchangerevs(repo, revs, makefilematcher, prepare): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
868 """Iterate over files and the revs in a "windowed" way. |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
869 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
870 Callers most commonly need to iterate backwards over the history |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
871 in which they are interested. Doing so has awful (quadratic-looking) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
872 performance, so we use iterators in a "windowed" way. |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
873 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
874 We walk a window of revisions in the desired order. Within the |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
875 window, we first walk forwards to gather data, then in the desired |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
876 order (usually backwards) to display it. |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
877 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
878 This function returns an iterator yielding contexts. Before |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
879 yielding each context, the iterator will first call the prepare |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
880 function on each context in the window in forward order.""" |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
881 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
882 if not revs: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
883 return [] |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
884 change = repo.__getitem__ |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
885 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
886 def iterate(): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
887 it = iter(revs) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
888 stopiteration = False |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
889 for windowsize in increasingwindows(): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
890 nrevs = [] |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
891 for i in range(windowsize): |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
892 rev = next(it, None) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
893 if rev is None: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
894 stopiteration = True |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
895 break |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
896 nrevs.append(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
897 for rev in sorted(nrevs): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
898 ctx = change(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
899 prepare(ctx, makefilematcher(ctx)) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
900 for rev in nrevs: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
901 yield change(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
902 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
903 if stopiteration: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
904 break |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
905 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
906 return iterate() |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
907 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
908 |
26433
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
909 def meaningfulparents(repo, ctx): |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
910 """Return list of meaningful (or all if debug) parentrevs for rev. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
911 |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
912 For merges (two non-nullrev revisions) both parents are meaningful. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
913 Otherwise the first parent revision is considered meaningful if it |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
914 is not the preceding revision. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
915 """ |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
916 parents = ctx.parents() |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
917 if len(parents) > 1: |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
918 return parents |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
919 if repo.ui.debugflag: |
39894
d739f423bf06
repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents:
39891
diff
changeset
|
920 return [parents[0], repo[nullrev]] |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
921 if parents[0].rev() >= intrev(ctx) - 1: |
26433
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
922 return [] |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
923 return parents |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
924 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
925 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
926 def getuipathfn( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
927 repo, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
928 legacyrelativevalue: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
929 forcerelativevalue: Optional[bool] = None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
930 ) -> typelib.UiPathFn: |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
931 """Return a function that produced paths for presenting to the user. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
932 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
933 The returned function takes a repo-relative path and produces a path |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
934 that can be presented in the UI. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
935 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
936 Depending on the value of ui.relative-paths, either a repo-relative or |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
937 cwd-relative path will be produced. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
938 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
939 legacyrelativevalue is the value to use if ui.relative-paths=legacy |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
940 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
941 If forcerelativevalue is not None, then that value will be used regardless |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
942 of what ui.relative-paths is set to. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
943 """ |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
944 if forcerelativevalue is not None: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
945 relative = forcerelativevalue |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
946 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
947 config = repo.ui.config(b'ui', b'relative-paths') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
948 if config == b'legacy': |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
949 relative = legacyrelativevalue |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
950 else: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
951 relative = stringutil.parsebool(config) |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
952 if relative is None: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
953 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
954 _(b"ui.relative-paths is not a boolean ('%s')") % config |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
955 ) |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
956 |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
957 if relative: |
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
958 cwd = repo.getcwd() |
44858
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
959 if cwd != b'': |
44884
d044b66d8429
scmutil: clarify getuipathfn comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44858
diff
changeset
|
960 # this branch would work even if cwd == b'' (ie cwd = repo |
d044b66d8429
scmutil: clarify getuipathfn comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44858
diff
changeset
|
961 # root), but its generality makes the returned function slower |
44858
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
962 pathto = repo.pathto |
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
963 return lambda f: pathto(f, cwd) |
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
964 if repo.ui.configbool(b'ui', b'slash'): |
41684
a8d3a4be066e
windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
965 return lambda f: f |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
966 else: |
41684
a8d3a4be066e
windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
967 return util.localpath |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
968 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
969 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
970 def subdiruipathfn( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
971 subpath: bytes, uipathfn: typelib.UiPathFn |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
972 ) -> typelib.UiPathFn: |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
973 '''Create a new uipathfn that treats the file as relative to subpath.''' |
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
974 return lambda f: uipathfn(posixpath.join(subpath, f)) |
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
975 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
976 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
977 def anypats(pats, opts) -> bool: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
978 """Checks if any patterns, including --include and --exclude were given. |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
979 |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
980 Some commands (e.g. addremove) use this condition for deciding whether to |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
981 print absolute or relative paths. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
982 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
983 return bool(pats or opts.get(b'include') or opts.get(b'exclude')) |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
984 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
985 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
986 def expandpats(pats: Iterable[bytes]) -> List[bytes]: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
987 """Expand bare globs when running on windows. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
988 On posix we assume it already has already been done by sh.""" |
14320 | 989 if not util.expandglobs: |
990 return list(pats) | |
991 ret = [] | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
992 for kindpat in pats: |
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
993 kind, pat = matchmod._patsplit(kindpat, None) |
14320 | 994 if kind is None: |
995 try: | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
996 globbed = glob.glob(pat) |
14320 | 997 except re.error: |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
998 globbed = [pat] |
14320 | 999 if globbed: |
1000 ret.extend(globbed) | |
1001 continue | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
1002 ret.append(kindpat) |
14320 | 1003 return ret |
1004 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1005 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1006 def matchandpats( |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1007 ctx, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1008 pats=(), |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1009 opts=None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1010 globbed: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1011 default: bytes = b'relpath', |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1012 badfn=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1013 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1014 """Return a matcher and the patterns that were used. |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1015 The matcher will warn about bad matches, unless an alternate badfn callback |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1016 is provided.""" |
26326
58218b0e6005
match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26325
diff
changeset
|
1017 if opts is None: |
58218b0e6005
match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26325
diff
changeset
|
1018 opts = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1019 if not globbed and default == b'relpath': |
14320 | 1020 pats = expandpats(pats or []) |
14670
19197fa4c41c
scmutil: match now accepts a context or a repo
Matt Mackall <mpm@selenic.com>
parents:
14669
diff
changeset
|
1021 |
41665
0ed7a8ac5711
scmutil: respect ui.relative-paths in default match.badfn
Martin von Zweigbergk <martinvonz@google.com>
parents:
41662
diff
changeset
|
1022 uipathfn = getuipathfn(ctx.repo(), legacyrelativevalue=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1023 |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1024 def bad(f, msg): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1025 ctx.repo().ui.warn(b"%s: %s\n" % (uipathfn(f), msg)) |
25466
007a1d53f7c3
scmutil: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
25434
diff
changeset
|
1026 |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1027 if badfn is None: |
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1028 badfn = bad |
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1029 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1030 m = ctx.match( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1031 pats, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1032 opts.get(b'include'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1033 opts.get(b'exclude'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1034 default, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1035 listsubrepos=opts.get(b'subrepos'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1036 badfn=badfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1037 ) |
25466
007a1d53f7c3
scmutil: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
25434
diff
changeset
|
1038 |
24447
d44d53bc9a1e
matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
24338
diff
changeset
|
1039 if m.always(): |
d44d53bc9a1e
matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
24338
diff
changeset
|
1040 pats = [] |
16171
336e61875335
graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
16167
diff
changeset
|
1041 return m, pats |
336e61875335
graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
16167
diff
changeset
|
1042 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1043 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1044 def match( |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1045 ctx, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1046 pats=(), |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1047 opts=None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1048 globbed: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1049 default: bytes = b'relpath', |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1050 badfn=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1051 ): |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
1052 '''Return a matcher that will warn about bad matches.''' |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1053 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0] |
14320 | 1054 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1055 |
14320 | 1056 def matchall(repo): |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
1057 '''Return a matcher that will efficiently match everything.''' |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41666
diff
changeset
|
1058 return matchmod.always() |
14320 | 1059 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1060 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1061 def matchfiles(repo, files, badfn=None) -> matchmod.exactmatcher: |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
1062 '''Return a matcher that will efficiently match exactly these files.''' |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41666
diff
changeset
|
1063 return matchmod.exact(files, badfn=badfn) |
14320 | 1064 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1065 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1066 def parsefollowlinespattern(repo, rev, pat: bytes, msg: bytes) -> bytes: |
34854
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1067 """Return a file name from `pat` pattern suitable for usage in followlines |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1068 logic. |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1069 """ |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1070 if not matchmod.patkind(pat): |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1071 return pathutil.canonpath(repo.root, repo.getcwd(), pat) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1072 else: |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1073 ctx = repo[rev] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1074 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1075 files = [f for f in ctx if m(f)] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1076 if len(files) != 1: |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1077 raise error.ParseError(msg) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1078 return files[0] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
1079 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1080 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1081 def getorigvfs(ui: "uimod.ui", repo): |
40752
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1082 """return a vfs suitable to save 'orig' file |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1083 |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1084 return None if no special directory is configured""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1085 origbackuppath = ui.config(b'ui', b'origbackuppath') |
40752
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1086 if not origbackuppath: |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1087 return None |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1088 return vfs.vfs(repo.wvfs.join(origbackuppath)) |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
1089 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1090 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1091 def backuppath(ui: "uimod.ui", repo, filepath: bytes) -> bytes: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1092 """customize where working copy backup files (.orig files) are created |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1093 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1094 Fetch user defined path from config file: [ui] origbackuppath = <path> |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1095 Fall back to default (filepath with .orig suffix) if not specified |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1096 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1097 filepath is repo-relative |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1098 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1099 Returns an absolute path |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1100 """ |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1101 origvfs = getorigvfs(ui, repo) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1102 if origvfs is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1103 return repo.wjoin(filepath + b".orig") |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1104 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1105 origbackupdir = origvfs.dirname(filepath) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1106 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1107 ui.note(_(b'creating directory: %s\n') % origvfs.join(origbackupdir)) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1108 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1109 # Remove any files that conflict with the backup file's path |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43506
diff
changeset
|
1110 for f in reversed(list(pathutil.finddirs(filepath))): |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1111 if origvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1112 ui.note(_(b'removing conflicting file: %s\n') % origvfs.join(f)) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1113 origvfs.unlink(f) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1114 break |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1115 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1116 origvfs.makedirs(origbackupdir) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1117 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1118 if origvfs.isdir(filepath) and not origvfs.islink(filepath): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1119 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1120 _(b'removing conflicting directory: %s\n') % origvfs.join(filepath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1121 ) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1122 origvfs.rmtree(filepath, forcibly=True) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1123 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1124 return origvfs.join(filepath) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1125 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1126 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
1127 class _containsnode: |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1128 """proxy __contains__(node) to container.__contains__ which accepts revs""" |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1129 |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1130 def __init__(self, repo, revcontainer): |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1131 self._torev = repo.changelog.rev |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1132 self._revcontains = revcontainer.__contains__ |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1133 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1134 def __contains__(self, node) -> bool: |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1135 return self._revcontains(self._torev(node)) |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1136 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1137 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1138 def cleanupnodes( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1139 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1140 replacements, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1141 operation, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1142 moves=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1143 metadata=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1144 fixphase=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1145 targetphase=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1146 backup=True, |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1147 ) -> None: |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1148 """do common cleanups when old nodes are replaced by new nodes |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1149 |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1150 That includes writing obsmarkers or stripping nodes, and moving bookmarks. |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1151 (we might also want to move working directory parent in the future) |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1152 |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1153 By default, bookmark moves are calculated automatically from 'replacements', |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1154 but 'moves' can be used to override that. Also, 'moves' may include |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1155 additional bookmark moves that should not have associated obsmarkers. |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1156 |
34353
2dbd6d259cd2
cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents:
34352
diff
changeset
|
1157 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not |
2dbd6d259cd2
cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents:
34352
diff
changeset
|
1158 have replacements. operation is a string, like "rebase". |
34793
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1159 |
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1160 metadata is dictionary containing metadata to be stored in obsmarker if |
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1161 obsolescence is enabled. |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1162 """ |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1163 assert fixphase or targetphase is None |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1164 if not replacements and not moves: |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1165 return |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1166 |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1167 # translate mapping's other forms |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
1168 if not hasattr(replacements, 'items'): |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1169 replacements = {(n,): () for n in replacements} |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1170 else: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1171 # upgrading non tuple "source" to tuple ones for BC |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1172 repls = {} |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1173 for key, value in replacements.items(): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1174 if not isinstance(key, tuple): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1175 key = (key,) |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1176 repls[key] = value |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1177 replacements = repls |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1178 |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1179 # Unfiltered repo is needed since nodes in replacements might be hidden. |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1180 unfi = repo.unfiltered() |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1181 |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1182 # Calculate bookmark movements |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1183 if moves is None: |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1184 moves = {} |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1185 for oldnodes, newnodes in replacements.items(): |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1186 for oldnode in oldnodes: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1187 if oldnode in moves: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1188 continue |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1189 if len(newnodes) > 1: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1190 # usually a split, take the one with biggest rev number |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1191 newnode = next(unfi.set(b'max(%ln)', newnodes)).node() |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1192 elif len(newnodes) == 0: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1193 # move bookmark backwards |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1194 allreplaced = [] |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1195 for rep in replacements: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1196 allreplaced.extend(rep) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1197 roots = list( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1198 unfi.set(b'max((::%n) - %ln)', oldnode, allreplaced) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1199 ) |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1200 if roots: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1201 newnode = roots[0].node() |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1202 else: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
1203 newnode = repo.nullid |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1204 else: |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1205 newnode = newnodes[0] |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1206 moves[oldnode] = newnode |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1207 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1208 allnewnodes = [n for ns in replacements.values() for n in ns] |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1209 toretract = {} |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1210 toadvance = {} |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1211 if fixphase: |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1212 precursors = {} |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1213 for oldnodes, newnodes in replacements.items(): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1214 for oldnode in oldnodes: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1215 for newnode in newnodes: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1216 precursors.setdefault(newnode, []).append(oldnode) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1217 |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1218 allnewnodes.sort(key=lambda n: unfi[n].rev()) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1219 newphases = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1220 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1221 def phase(ctx): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1222 return newphases.get(ctx.node(), ctx.phase()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1223 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1224 for newnode in allnewnodes: |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1225 ctx = unfi[newnode] |
38432
05b7dd11918e
cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
1226 parentphase = max(phase(p) for p in ctx.parents()) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1227 if targetphase is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1228 oldphase = max( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1229 unfi[oldnode].phase() for oldnode in precursors[newnode] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1230 ) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1231 newphase = max(oldphase, parentphase) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1232 else: |
38432
05b7dd11918e
cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
1233 newphase = max(targetphase, parentphase) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1234 newphases[newnode] = newphase |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1235 if newphase > ctx.phase(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1236 toretract.setdefault(newphase, []).append(newnode) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1237 elif newphase < ctx.phase(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1238 toadvance.setdefault(newphase, []).append(newnode) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1239 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1240 with repo.transaction(b'cleanup') as tr: |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1241 # Move bookmarks |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1242 bmarks = repo._bookmarks |
33511
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1243 bmarkchanges = [] |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1244 for oldnode, newnode in moves.items(): |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1245 oldbmarks = repo.nodebookmarks(oldnode) |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1246 if not oldbmarks: |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1247 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1248 from . import bookmarks # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1249 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1250 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1251 b'moving bookmarks %r from %s to %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1252 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1253 pycompat.rapply(pycompat.maybebytestr, oldbmarks), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1254 hex(oldnode), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1255 hex(newnode), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1256 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1257 ) |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1258 # Delete divergent bookmarks being parents of related newnodes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1259 deleterevs = repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1260 b'parents(roots(%ln & (::%n))) - parents(%n)', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1261 allnewnodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1262 newnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1263 oldnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1264 ) |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1265 deletenodes = _containsnode(repo, deleterevs) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1266 for name in oldbmarks: |
33511
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1267 bmarkchanges.append((name, newnode)) |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1268 for b in bookmarks.divergent2delete(repo, deletenodes, name): |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1269 bmarkchanges.append((b, None)) |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1270 |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1271 if bmarkchanges: |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1272 bmarks.applychanges(repo, tr, bmarkchanges) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1273 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1274 for phase, nodes in toretract.items(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1275 phases.retractboundary(repo, tr, phase, nodes) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1276 for phase, nodes in toadvance.items(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1277 phases.advanceboundary(repo, tr, phase, nodes) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1278 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1279 mayusearchived = repo.ui.config(b'experimental', b'cleanup-as-archived') |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1280 # Obsolete or strip nodes |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1281 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1282 # If a node is already obsoleted, and we want to obsolete it |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1283 # without a successor, skip that obssolete request since it's |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1284 # unnecessary. That's the "if s or not isobs(n)" check below. |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1285 # Also sort the node in topology order, that might be useful for |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1286 # some obsstore logic. |
40041
ca9d0c93acea
cleanupnodes: update comment to drop mention of filtering
Boris Feld <boris.feld@octobus.net>
parents:
39923
diff
changeset
|
1287 # NOTE: the sorting might belong to createmarkers. |
33330
ba43e5ee9c6d
scmutil: make cleanupnodes handle filtered node
Jun Wu <quark@fb.com>
parents:
33252
diff
changeset
|
1288 torev = unfi.changelog.rev |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1289 sortfunc = lambda ns: torev(ns[0][0]) |
39890
1c3f1491965f
scmutil: expand long "one-liner"
Boris Feld <boris.feld@octobus.net>
parents:
39836
diff
changeset
|
1290 rels = [] |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1291 for ns, s in sorted(replacements.items(), key=sortfunc): |
39923
61f39a892168
cleanupnodes: pass multiple predecessors to `createmarkers` directly
Boris Feld <boris.feld@octobus.net>
parents:
39916
diff
changeset
|
1292 rel = (tuple(unfi[n] for n in ns), tuple(unfi[m] for m in s)) |
61f39a892168
cleanupnodes: pass multiple predecessors to `createmarkers` directly
Boris Feld <boris.feld@octobus.net>
parents:
39916
diff
changeset
|
1293 rels.append(rel) |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1294 if rels: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1295 obsolete.createmarkers( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1296 repo, rels, operation=operation, metadata=metadata |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1297 ) |
49450
b57c95a0f5f9
phase: introduce a dedicated function to check for the archived phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49306
diff
changeset
|
1298 elif phases.supportarchived(repo) and mayusearchived: |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1299 # this assume we do not have "unstable" nodes above the cleaned ones |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1300 allreplaced = set() |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1301 for ns in replacements.keys(): |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1302 allreplaced.update(ns) |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1303 if backup: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1304 from . import repair # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1305 |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1306 node = min(allreplaced, key=repo.changelog.rev) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1307 repair.backupbundle( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1308 repo, allreplaced, allreplaced, node, operation |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1309 ) |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1310 phases.retractboundary(repo, tr, phases.archived, allreplaced) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1311 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1312 from . import repair # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1313 |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1314 tostrip = list(n for ns in replacements for n in ns) |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1315 if tostrip: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1316 repair.delayedstrip( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1317 repo.ui, repo, tostrip, operation, backup=backup |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1318 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1319 |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1320 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1321 def addremove( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1322 repo, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1323 matcher, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1324 prefix: bytes, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1325 uipathfn: typelib.UiPathFn, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1326 opts=None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1327 open_tr=None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1328 ) -> int: |
26329
d9537ce64f3a
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26328
diff
changeset
|
1329 if opts is None: |
d9537ce64f3a
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26328
diff
changeset
|
1330 opts = {} |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23481
diff
changeset
|
1331 m = matcher |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1332 dry_run = opts.get(b'dry_run') |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1333 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1334 similarity = float(opts.get(b'similarity') or 0) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1335 except ValueError: |
48031
5b89626c11e9
errors: use InputError for bad --similarity value
Martin von Zweigbergk <martinvonz@google.com>
parents:
48030
diff
changeset
|
1336 raise error.InputError(_(b'similarity must be a number')) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1337 if similarity < 0 or similarity > 100: |
48031
5b89626c11e9
errors: use InputError for bad --similarity value
Martin von Zweigbergk <martinvonz@google.com>
parents:
48030
diff
changeset
|
1338 raise error.InputError(_(b'similarity must be between 0 and 100')) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1339 similarity /= 100.0 |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23481
diff
changeset
|
1340 |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1341 ret = 0 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1342 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1343 wctx = repo[None] |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1344 for subpath in sorted(wctx.substate): |
29802
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29771
diff
changeset
|
1345 submatch = matchmod.subdirmatcher(subpath, m) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1346 if opts.get(b'subrepos') or m.exact(subpath) or any(submatch.files()): |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1347 sub = wctx.sub(subpath) |
41629
5ee3c49fc9cd
subrepo: adjust subrepo prefix before calling subrepo.addremove() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41604
diff
changeset
|
1348 subprefix = repo.wvfs.reljoin(prefix, subpath) |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
1349 subuipathfn = subdiruipathfn(subpath, uipathfn) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1350 try: |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
1351 if sub.addremove(submatch, subprefix, subuipathfn, opts): |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1352 ret = 1 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1353 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1354 repo.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1355 _(b"skipping missing subrepository: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1356 % uipathfn(subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1357 ) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1358 |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1359 rejected = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1360 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1361 def badfn(f: bytes, msg: bytes) -> None: |
23534
83bbedc16b3f
addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1362 if f in m.files(): |
25434
5984dd42e140
addremove: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25418
diff
changeset
|
1363 m.bad(f, msg) |
23534
83bbedc16b3f
addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1364 rejected.append(f) |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1365 |
25434
5984dd42e140
addremove: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25418
diff
changeset
|
1366 badmatch = matchmod.badmatch(m, badfn) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1367 added, unknown, deleted, removed, forgotten = _interestingfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1368 repo, badmatch |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1369 ) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1370 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1371 unknownset = set(unknown + forgotten) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1372 toprint = unknownset.copy() |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1373 toprint.update(deleted) |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1374 for abs in sorted(toprint): |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1375 if repo.ui.verbose or not m.exact(abs): |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1376 if abs in unknownset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1377 status = _(b'adding %s\n') % uipathfn(abs) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1378 label = b'ui.addremove.added' |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1379 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1380 status = _(b'removing %s\n') % uipathfn(abs) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1381 label = b'ui.addremove.removed' |
39088
ad88726d6982
addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents:
38856
diff
changeset
|
1382 repo.ui.status(status, label=label) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1383 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1384 renames = _findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1385 repo, m, added + unknown, removed + deleted, similarity, uipathfn |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1386 ) |
14320 | 1387 |
50029
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49972
diff
changeset
|
1388 if not dry_run and (unknown or forgotten or deleted or renames): |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49972
diff
changeset
|
1389 if open_tr is not None: |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49972
diff
changeset
|
1390 open_tr() |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1391 _markchanges(repo, unknown + forgotten, deleted, renames) |
14320 | 1392 |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1393 for f in rejected: |
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1394 if f in m.files(): |
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1395 return 1 |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1396 return ret |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1397 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1398 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1399 def marktouched(repo, files, similarity: float = 0.0) -> int: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1400 """Assert that files have somehow been operated upon. files are relative to |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1401 the repo root.""" |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1402 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x)) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1403 rejected = [] |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1404 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1405 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1406 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1407 if repo.ui.verbose: |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1408 unknownset = set(unknown + forgotten) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1409 toprint = unknownset.copy() |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1410 toprint.update(deleted) |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1411 for abs in sorted(toprint): |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1412 if abs in unknownset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1413 status = _(b'adding %s\n') % abs |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1414 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1415 status = _(b'removing %s\n') % abs |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1416 repo.ui.status(status) |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1417 |
41662
0a5a6675c86c
addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
1418 # TODO: We should probably have the caller pass in uipathfn and apply it to |
41697
e21183db2259
scmutil: fix a comment that doesn't match the code
Martin von Zweigbergk <martinvonz@google.com>
parents:
41685
diff
changeset
|
1419 # the messages above too. legacyrelativevalue=True is consistent with how |
41662
0a5a6675c86c
addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
1420 # it used to work. |
41685
b81ecf3571d5
addremove: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41684
diff
changeset
|
1421 uipathfn = getuipathfn(repo, legacyrelativevalue=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1422 renames = _findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1423 repo, m, added + unknown, removed + deleted, similarity, uipathfn |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1424 ) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1425 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1426 _markchanges(repo, unknown + forgotten, deleted, renames) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1427 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1428 for f in rejected: |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1429 if f in m.files(): |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1430 return 1 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1431 return 0 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1432 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1433 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1434 def _interestingfiles( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1435 repo, matcher |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1436 ) -> Tuple[List[bytes], List[bytes], List[bytes], List[bytes], List[bytes]]: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1437 """Walk dirstate with matcher, looking for files that addremove would care |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1438 about. |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1439 |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1440 This is different from dirstate.status because it doesn't care about |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1441 whether files are modified or clean.""" |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1442 added, unknown, deleted, removed, forgotten = [], [], [], [], [] |
33649
377e8ddaebef
pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents:
33542
diff
changeset
|
1443 audit_path = pathutil.pathauditor(repo.root, cached=True) |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1444 |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1445 ctx = repo[None] |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1446 dirstate = repo.dirstate |
40087
1d09ba0d2ed3
narrow: move remaining narrow-limited dirstate walks to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
40041
diff
changeset
|
1447 matcher = repo.narrowmatch(matcher, includeexact=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1448 walkresults = dirstate.walk( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1449 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1450 subrepos=sorted(ctx.substate), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1451 unknown=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1452 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1453 full=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1454 ) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1455 for abs, st in walkresults.items(): |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1456 entry = dirstate.get_entry(abs) |
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1457 if (not entry.any_tracked) and audit_path.check(abs): |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1458 unknown.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1459 elif (not entry.removed) and not st: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1460 deleted.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1461 elif entry.removed and st: |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1462 forgotten.append(abs) |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1463 # for finding renames |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1464 elif entry.removed and not st: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1465 removed.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1466 elif entry.added: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1467 added.append(abs) |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1468 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1469 return added, unknown, deleted, removed, forgotten |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1470 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1471 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1472 def _findrenames( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1473 repo, matcher, added, removed, similarity, uipathfn: typelib.UiPathFn |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1474 ) -> Dict[bytes, bytes]: |
19152
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1475 '''Find renames from removed files to added ones.''' |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1476 renames = {} |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1477 if similarity > 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1478 for old, new, score in similar.findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1479 repo, added, removed, similarity |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1480 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1481 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1482 repo.ui.verbose |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1483 or not matcher.exact(old) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1484 or not matcher.exact(new) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1485 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1486 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1487 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1488 b'recording removal of %s as rename to %s ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1489 b'(%d%% similar)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1490 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1491 % (uipathfn(old), uipathfn(new), score * 100) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1492 ) |
19152
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1493 renames[new] = old |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1494 return renames |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1495 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1496 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1497 def _markchanges(repo, unknown, deleted, renames) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1498 """Marks the files in unknown as added, the files in deleted as removed, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1499 and the files in renames as copied.""" |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1500 wctx = repo[None] |
27851
4133a306606c
with: use context manager in _markchanges
Bryan O'Sullivan <bryano@fb.com>
parents:
27706
diff
changeset
|
1501 with repo.wlock(): |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1502 wctx.forget(deleted) |
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1503 wctx.add(unknown) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1504 for new, old in renames.items(): |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1505 wctx.copy(old, new) |
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1506 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1507 |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1508 def getrenamedfn(repo, endrev=None): |
42115
27475ae67676
copies: extract function for deciding whether to use changeset-centric algos
Martin von Zweigbergk <martinvonz@google.com>
parents:
42114
diff
changeset
|
1509 if copiesmod.usechangesetcentricalgo(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1510 |
42114
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1511 def getrenamed(fn, rev): |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1512 ctx = repo[rev] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1513 p1copies = ctx.p1copies() |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1514 if fn in p1copies: |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1515 return p1copies[fn] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1516 p2copies = ctx.p2copies() |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1517 if fn in p2copies: |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1518 return p2copies[fn] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1519 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1520 |
42114
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1521 return getrenamed |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1522 |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1523 rcache = {} |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1524 if endrev is None: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1525 endrev = len(repo) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1526 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1527 def getrenamed(fn, rev): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1528 """looks up all renames for a file (up to endrev) the first |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1529 time the file is given. It indexes on the changerev and only |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1530 parses the manifest if linkrev != changerev. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1531 Returns rename info for fn at changerev rev.""" |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1532 if fn not in rcache: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1533 rcache[fn] = {} |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1534 fl = repo.file(fn) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1535 for i in fl: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1536 lr = fl.linkrev(i) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1537 renamed = fl.renamed(fl.node(i)) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1538 rcache[fn][lr] = renamed and renamed[0] |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1539 if lr >= endrev: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1540 break |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1541 if rev in rcache[fn]: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1542 return rcache[fn][rev] |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1543 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1544 # If linkrev != rev (i.e. rev not found in rcache) fallback to |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1545 # filectx logic. |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1546 try: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1547 return repo[rev][fn].copysource() |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1548 except error.LookupError: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1549 return None |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1550 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1551 return getrenamed |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1552 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1553 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1554 def getcopiesfn(repo, endrev=None): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1555 if copiesmod.usechangesetcentricalgo(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1556 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1557 def copiesfn(ctx): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1558 if ctx.p2copies(): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1559 allcopies = ctx.p1copies().copy() |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1560 # There should be no overlap |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1561 allcopies.update(ctx.p2copies()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1562 return sorted(allcopies.items()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1563 else: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1564 return sorted(ctx.p1copies().items()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1565 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1566 else: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1567 getrenamed = getrenamedfn(repo, endrev) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1568 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1569 def copiesfn(ctx): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1570 copies = [] |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1571 for fn in ctx.files(): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1572 rename = getrenamed(fn, ctx.rev()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1573 if rename: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1574 copies.append((fn, rename)) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1575 return copies |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1576 |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1577 return copiesfn |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1578 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1579 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1580 def dirstatecopy( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1581 ui: "uimod.ui", |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1582 repo, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1583 wctx, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1584 src, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1585 dst, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1586 dryrun: bool = False, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1587 cwd: Optional[bytes] = None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1588 ) -> None: |
14320 | 1589 """Update the dirstate to reflect the intent of copying src to dst. For |
1590 different reasons it might not end with dst being marked as copied from src. | |
1591 """ | |
1592 origsrc = repo.dirstate.copied(src) or src | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1593 if dst == origsrc: # copying back a copy? |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1594 entry = repo.dirstate.get_entry(dst) |
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1595 if (entry.added or not entry.tracked) and not dryrun: |
47729
b66ae4468c9a
copy: use `set_tracked` instead of `normallookup` in `dirstatecopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47693
diff
changeset
|
1596 repo.dirstate.set_tracked(dst) |
14320 | 1597 else: |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1598 if repo.dirstate.get_entry(origsrc).added and origsrc == src: |
14320 | 1599 if not ui.quiet: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1600 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1601 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1602 b"%s has not been committed yet, so no copy " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1603 b"data will be stored for %s.\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1604 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1605 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1606 ) |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1607 if not repo.dirstate.get_entry(dst).tracked and not dryrun: |
14320 | 1608 wctx.add([dst]) |
1609 elif not dryrun: | |
1610 wctx.copy(origsrc, dst) | |
14482
58b36e9ea783
introduce new function scmutil.readrequires
Adrian Buehlmann <adrian@cadifra.com>
parents:
14435
diff
changeset
|
1611 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1612 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1613 def movedirstate(repo, newctx, match=None) -> None: |
41938
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1614 """Move the dirstate to newctx and adjust it as necessary. |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1615 |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1616 A matcher can be provided as an optimization. It is probably a bug to pass |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1617 a matcher that doesn't match all the differences between the parent of the |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1618 working copy and newctx. |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1619 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1620 oldctx = repo[b'.'] |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1621 ds = repo.dirstate |
44038
0750cbffdb3b
movedirstate: get copies from dirstate before setting parents
Martin von Zweigbergk <martinvonz@google.com>
parents:
44013
diff
changeset
|
1622 copies = dict(ds.copies()) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
1623 ds.setparents(newctx.node(), repo.nullid) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1624 s = newctx.status(oldctx, match=match) |
47592
0f5c203eb5ab
dirstate: add a function to update tracking status while "moving" parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47295
diff
changeset
|
1625 |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1626 for f in s.modified: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1627 ds.update_file_p1(f, p1_tracked=True) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1628 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1629 for f in s.added: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1630 ds.update_file_p1(f, p1_tracked=False) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1631 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1632 for f in s.removed: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1633 ds.update_file_p1(f, p1_tracked=True) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1634 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1635 # Merge old parent and old working dir copies |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1636 oldcopies = copiesmod.pathcopies(newctx, oldctx, match) |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1637 oldcopies.update(copies) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1638 copies = {dst: oldcopies.get(src, src) for dst, src in oldcopies.items()} |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1639 # Adjust the dirstate copies |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1640 for dst, src in copies.items(): |
48105
207df24a31f6
dirstate-item: use `added` instead of `state` when moving dirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48103
diff
changeset
|
1641 if src not in newctx or dst in newctx or not ds.get_entry(dst).added: |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1642 src = None |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1643 ds.copy(src, dst) |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1644 repo._quick_access_changeid_invalidate() |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1645 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1646 |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1647 def filterrequirements(requirements): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1648 """filters the requirements into two sets: |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1649 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1650 wcreq: requirements which should be written in .hg/requires |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1651 storereq: which should be written in .hg/store/requires |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1652 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1653 Returns (wcreq, storereq) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1654 """ |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45482
diff
changeset
|
1655 if requirementsmod.SHARESAFE_REQUIREMENT in requirements: |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1656 wc, store = set(), set() |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1657 for r in requirements: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1658 if r in requirementsmod.WORKING_DIR_REQUIREMENTS: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1659 wc.add(r) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1660 else: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1661 store.add(r) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1662 return wc, store |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1663 return requirements, None |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1664 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1665 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1666 def istreemanifest(repo) -> bool: |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46976
diff
changeset
|
1667 """returns whether the repository is using treemanifest or not""" |
45552
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1668 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements |
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1669 |
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1670 |
51806
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1671 def writereporequirements(repo, requirements=None, maywritestore=True) -> None: |
46242
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1672 """writes requirements for the repo |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1673 |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1674 Requirements are written to .hg/requires and .hg/store/requires based |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1675 on whether share-safe mode is enabled and which requirements are wdir |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1676 requirements and which are store requirements |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1677 """ |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1678 if requirements: |
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1679 repo.requirements = requirements |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1680 wcreq, storereq = filterrequirements(repo.requirements) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1681 if wcreq is not None: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1682 writerequires(repo.vfs, wcreq) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1683 if storereq is not None: |
51806
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1684 writerequires(repo.svfs, storereq, maywrite=maywritestore) |
45919
aba4f2c97e74
scmutil: try-delete `.hg/store/requires` if store requirements are empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45915
diff
changeset
|
1685 elif repo.ui.configbool(b'format', b'usestore'): |
aba4f2c97e74
scmutil: try-delete `.hg/store/requires` if store requirements are empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45915
diff
changeset
|
1686 # only remove store requires if we are using store |
51806
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1687 if maywritestore: |
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1688 repo.svfs.tryunlink(b'requires') |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1689 |
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1690 |
51802
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1691 def readrequires(vfs, allowmissing): |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1692 """reads the require file present at root of this vfs |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1693 and return a set of requirements |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1694 |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1695 If allowmissing is True, we suppress FileNotFoundError if raised""" |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1696 # requires file contains a newline-delimited list of |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1697 # features/capabilities the opener (us) must have in order to use |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1698 # the repository. This file was introduced in Mercurial 0.9.2, |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1699 # which means very old repositories may not have one. We assume |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1700 # a missing file translates to no requirements. |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1701 read = vfs.tryread if allowmissing else vfs.read |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1702 return set(read(b'requires').splitlines()) |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1703 |
eb952b2d224c
scmutil: add `readrequires` next to `writerequires`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51732
diff
changeset
|
1704 |
51806
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1705 def writerequires(opener, requirements, maywrite=True) -> None: |
51804
e69e3d585f07
scmutils: read the requires file before writing to avoid unnecessary rewrite
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51802
diff
changeset
|
1706 on_disk = readrequires(opener, True) |
e69e3d585f07
scmutils: read the requires file before writing to avoid unnecessary rewrite
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51802
diff
changeset
|
1707 if not (on_disk == set(requirements)): |
51806
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1708 if not maywrite: |
95cdc01f313d
sparse: reliably avoid writing to store without a lock
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51804
diff
changeset
|
1709 raise error.Abort(_(b"store requirements are not as expected")) |
51804
e69e3d585f07
scmutils: read the requires file before writing to avoid unnecessary rewrite
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51802
diff
changeset
|
1710 with opener(b'requires', b'w', atomictemp=True) as fp: |
e69e3d585f07
scmutils: read the requires file before writing to avoid unnecessary rewrite
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51802
diff
changeset
|
1711 for r in sorted(requirements): |
e69e3d585f07
scmutils: read the requires file before writing to avoid unnecessary rewrite
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51802
diff
changeset
|
1712 fp.write(b"%s\n" % r) |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24755
diff
changeset
|
1713 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1714 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
1715 class filecachesubentry: |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1716 _cacheable: Optional[bool] = None |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1717 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1718 def __init__(self, path, stat: bool): |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1719 self.path = path |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1720 self.cachestat = None |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1721 self._cacheable = None |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1722 |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1723 if stat: |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1724 self.cachestat = filecachesubentry.stat(self.path) |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1725 |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1726 if self.cachestat: |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1727 self._cacheable = self.cachestat.cacheable() |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1728 else: |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1729 # None means we don't know yet |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1730 self._cacheable = None |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1731 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1732 def refresh(self) -> None: |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1733 if self.cacheable(): |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1734 self.cachestat = filecachesubentry.stat(self.path) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1735 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1736 def cacheable(self) -> bool: |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1737 if self._cacheable is not None: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1738 return self._cacheable |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1739 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1740 # we don't know yet, assume it is for now |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1741 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1742 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1743 def changed(self) -> bool: |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1744 # no point in going further if we can't cache it |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1745 if not self.cacheable(): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1746 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1747 |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1748 newstat = filecachesubentry.stat(self.path) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1749 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1750 # we may not know if it's cacheable yet, check again now |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1751 if newstat and self._cacheable is None: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1752 self._cacheable = newstat.cacheable() |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1753 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1754 # check again |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1755 if not self._cacheable: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1756 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1757 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1758 if self.cachestat != newstat: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1759 self.cachestat = newstat |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1760 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1761 else: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1762 return False |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1763 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1764 @staticmethod |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1765 def stat(path: bytes) -> Optional[typelib.CacheStat]: |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1766 try: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1767 return util.cachestat(path) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49284
diff
changeset
|
1768 except FileNotFoundError: |
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49284
diff
changeset
|
1769 pass |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1770 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1771 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
1772 class filecacheentry: |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1773 def __init__(self, paths, stat: bool = True) -> None: |
20044
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1774 self._entries = [] |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1775 for path in paths: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1776 self._entries.append(filecachesubentry(path, stat)) |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1777 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1778 def changed(self) -> bool: |
20044
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1779 '''true if any entry has changed''' |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1780 for entry in self._entries: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1781 if entry.changed(): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1782 return True |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1783 return False |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1784 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1785 def refresh(self) -> None: |
20044
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1786 for entry in self._entries: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1787 entry.refresh() |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1788 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1789 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
1790 class filecache: |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1791 """A property like decorator that tracks files under .hg/ for updates. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1792 |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1793 On first access, the files defined as arguments are stat()ed and the |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1794 results cached. The decorated function is called. The results are stashed |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1795 away in a ``_filecache`` dict on the object whose method is decorated. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1796 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1797 On subsequent access, the cached result is used as it is set to the |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1798 instance dictionary. |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1799 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1800 On external property set/delete operations, the caller must update the |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1801 corresponding _filecache entry appropriately. Use __class__.<attr>.set() |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1802 instead of directly setting <attr>. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1803 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1804 When using the property API, the cached data is always used if available. |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1805 No stat() is performed to check if the file has changed. |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1806 |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1807 Others can muck about with the state of the ``_filecache`` dict. e.g. they |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1808 can populate an entry before the property's getter is called. In this case, |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1809 entries in ``_filecache`` will be used during property operations, |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1810 if available. If the underlying file changes, it is up to external callers |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1811 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1812 method result as well as possibly calling ``del obj._filecache[attr]`` to |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1813 remove the ``filecacheentry``. |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1814 """ |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1815 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1816 paths: Tuple[bytes, ...] |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1817 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1818 def __init__(self, *paths: bytes) -> None: |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1819 self.paths = paths |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1820 |
48041
37a41267d000
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1821 def tracked_paths(self, obj): |
37a41267d000
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1822 return [self.join(obj, path) for path in self.paths] |
37a41267d000
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1823 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1824 def join(self, obj, fname: bytes): |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1825 """Used to compute the runtime path of a cached file. |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1826 |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1827 Users should subclass filecache and provide their own version of this |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1828 function to call the appropriate join function on 'obj' (an instance |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1829 of the class that its member function was decorated). |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1830 """ |
31285
1937671105bc
filecache: make 'join' abstract
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31217
diff
changeset
|
1831 raise NotImplementedError |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1832 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1833 def __call__(self, func): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1834 self.func = func |
37869
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1835 self.sname = func.__name__ |
50919
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50618
diff
changeset
|
1836 # XXX We should be using a unicode string instead of bytes for the main |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50618
diff
changeset
|
1837 # name (and the _filecache key). The fact we use bytes is a remains |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50618
diff
changeset
|
1838 # from Python2, since the name is derived from an attribute name a |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50618
diff
changeset
|
1839 # `str` is a better fit now that we support Python3 only |
37869
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1840 self.name = pycompat.sysbytes(self.sname) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1841 return self |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1842 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1843 def __get__(self, obj, type=None): |
29373
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1844 # if accessed on the class, return the descriptor itself. |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1845 if obj is None: |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1846 return self |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1847 |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1848 assert self.sname not in obj.__dict__ |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1849 |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1850 entry = obj._filecache.get(self.name) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1851 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1852 if entry: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1853 if entry.changed(): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1854 entry.obj = self.func(obj) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1855 else: |
48041
37a41267d000
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1856 paths = self.tracked_paths(obj) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1857 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1858 # We stat -before- creating the object so our cache doesn't lie if |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1859 # a writer modified between the time we read and stat |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1860 entry = filecacheentry(paths, True) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1861 entry.obj = self.func(obj) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1862 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1863 obj._filecache[self.name] = entry |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1864 |
37869
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1865 obj.__dict__[self.sname] = entry.obj |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1866 return entry.obj |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1867 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1868 # don't implement __set__(), which would make __dict__ lookup as slow as |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1869 # function call. |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1870 |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1871 def set(self, obj, value): |
18316
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1872 if self.name not in obj._filecache: |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1873 # we add an entry for the missing value because X in __dict__ |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1874 # implies X in _filecache |
48041
37a41267d000
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1875 paths = self.tracked_paths(obj) |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1876 ce = filecacheentry(paths, False) |
18316
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1877 obj._filecache[self.name] = ce |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1878 else: |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1879 ce = obj._filecache[self.name] |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1880 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1881 ce.obj = value # update cached copy |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1882 obj.__dict__[self.sname] = value # update copy returned by obj.x |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1883 |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1884 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1885 def extdatasource(repo, source: bytes): |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1886 """Gather a map of rev -> value dict from the specified source |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1887 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1888 A source spec is treated as a URL, with a special case shell: type |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1889 for parsing the output from a shell command. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1890 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1891 The data is parsed as a series of newline-separated records where |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1892 each record is a revision specifier optionally followed by a space |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1893 and a freeform string value. If the revision is known locally, it |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1894 is converted to a rev, otherwise the record is skipped. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1895 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1896 Note that both key and value are treated as UTF-8 and converted to |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1897 the local encoding. This allows uniformity between local and |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1898 remote data sources. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1899 """ |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1900 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1901 spec = repo.ui.config(b"extdata", source) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1902 if not spec: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1903 raise error.Abort(_(b"unknown extdata source '%s'") % source) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1904 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1905 data = {} |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1906 src = proc = None |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1907 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1908 if spec.startswith(b"shell:"): |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1909 # external commands should be run relative to the repo root |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1910 cmd = spec[6:] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1911 proc = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1912 procutil.tonativestr(cmd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1913 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1914 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1915 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1916 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1917 cwd=procutil.tonativestr(repo.root), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1918 ) |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1919 src = proc.stdout |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1920 else: |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1921 # treat as a URL or file |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1922 src = url.open(repo.ui, spec) |
34460
910adadf08e8
extdata: just use iterator to read lines one by one
Yuya Nishihara <yuya@tcha.org>
parents:
34459
diff
changeset
|
1923 for l in src: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1924 if b" " in l: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1925 k, v = l.strip().split(b" ", 1) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1926 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1927 k, v = l.strip(), b"" |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1928 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1929 k = encoding.tolocal(k) |
34459
d5c5cc767b7e
extdata: ignore ambiguous identifier as well
Yuya Nishihara <yuya@tcha.org>
parents:
34456
diff
changeset
|
1930 try: |
37360
d0d55980ffa7
extdatasource: use revsymbol() for converting to node
Martin von Zweigbergk <martinvonz@google.com>
parents:
37350
diff
changeset
|
1931 data[revsingle(repo, k).rev()] = encoding.tolocal(v) |
46115
be3d8178251e
errors: raise InputError if an ambiguous revision id prefix is used
Martin von Zweigbergk <martinvonz@google.com>
parents:
46096
diff
changeset
|
1932 except (error.LookupError, error.RepoLookupError, error.InputError): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1933 pass # we ignore data for nodes that don't exist locally |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1934 finally: |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1935 if proc: |
42576
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1936 try: |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1937 proc.communicate() |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1938 except ValueError: |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1939 # This happens if we started iterating src and then |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1940 # get a parse error on a line. It should be safe to ignore. |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1941 pass |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1942 if src: |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1943 src.close() |
35412
b1959391a088
extdata: abort if external command exits with non-zero status (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
35308
diff
changeset
|
1944 if proc and proc.returncode != 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1945 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1946 _(b"extdata command '%s' failed: %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1947 % (cmd, procutil.explainexit(proc.returncode)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1948 ) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1949 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1950 return data |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1951 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1952 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
1953 class progress: |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1954 ui: "uimod.ui" |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1955 pos: Optional[int] # None once complete |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1956 topic: bytes |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1957 unit: bytes |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1958 total: Optional[int] |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1959 debug: bool |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1960 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1961 def __init__( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1962 self, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1963 ui: "uimod.ui", |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1964 updatebar, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1965 topic: bytes, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1966 unit: bytes = b"", |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1967 total: Optional[int] = None, |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1968 ) -> None: |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1969 self.ui = ui |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1970 self.pos = 0 |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1971 self.topic = topic |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1972 self.unit = unit |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1973 self.total = total |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1974 self.debug = ui.configbool(b'progress', b'debug') |
41145
963462786f6e
progress: check what type of progress bar to use only once per topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
41144
diff
changeset
|
1975 self._updatebar = updatebar |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1976 |
38374
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1977 def __enter__(self): |
38503
077301ac69dc
scmutil: fix __enter__ in progress context manager
Danny Hooper <hooper@google.com>
parents:
38456
diff
changeset
|
1978 return self |
38374
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1979 |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1980 def __exit__(self, exc_type, exc_value, exc_tb): |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1981 self.complete() |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1982 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1983 def update( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1984 self, pos: int, item: bytes = b"", total: Optional[int] = None |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1985 ) -> None: |
38419
6dea017eb6ba
progress: enforce use of complete() on the helper class
Martin von Zweigbergk <martinvonz@google.com>
parents:
38374
diff
changeset
|
1986 assert pos is not None |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1987 if total: |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1988 self.total = total |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1989 self.pos = pos |
41209
b223fc1c6b4c
progress: change _updatebar() to take parameters as arguments
Yuya Nishihara <yuya@tcha.org>
parents:
41145
diff
changeset
|
1990 self._updatebar(self.topic, self.pos, item, self.unit, self.total) |
41144
3025fd3c2e71
progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41143
diff
changeset
|
1991 if self.debug: |
3025fd3c2e71
progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41143
diff
changeset
|
1992 self._printdebug(item) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1993 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1994 def increment( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1995 self, step: int = 1, item: bytes = b"", total: Optional[int] = None |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1996 ) -> None: |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1997 self.update(self.pos + step, item, total) |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1998 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
1999 def complete(self) -> None: |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2000 self.pos = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2001 self.unit = b"" |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2002 self.total = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2003 self._updatebar(self.topic, self.pos, b"", self.unit, self.total) |
38373
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38345
diff
changeset
|
2004 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2005 def _printdebug(self, item: bytes) -> None: |
44063
089255b1341e
scmutil: fix an unbound variable with progressbar debug enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
44060
diff
changeset
|
2006 unit = b'' |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2007 if self.unit: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2008 unit = b' ' + self.unit |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2009 if item: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2010 item = b' ' + item |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2011 |
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2012 if self.total: |
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2013 pct = 100.0 * self.pos / self.total |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2014 self.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2015 b'%s:%s %d/%d%s (%4.2f%%)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2016 % (self.topic, item, self.pos, self.total, unit, pct) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2017 ) |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
2018 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2019 self.ui.debug(b'%s:%s %d%s\n' % (self.topic, item, self.pos, unit)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
2020 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2021 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2022 def gdinitconfig(ui: "uimod.ui"): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
2023 """helper function to know if a repo should be created as general delta""" |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
2024 # experimental config: format.generaldelta |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2025 return ui.configbool(b'format', b'generaldelta') or ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2026 b'format', b'usegeneraldelta' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2027 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2028 |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26836
diff
changeset
|
2029 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2030 def gddeltaconfig(ui: "uimod.ui"): |
49666
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2031 """helper function to know if incoming deltas should be optimized |
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2032 |
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2033 The `format.generaldelta` config is an old form of the config that also |
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2034 implies that incoming delta-bases should be never be trusted. This function |
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2035 exists for this purpose. |
4bd12c0f531e
reuse-delta-base: improves some documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49450
diff
changeset
|
2036 """ |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26836
diff
changeset
|
2037 # experimental config: format.generaldelta |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2038 return ui.configbool(b'format', b'generaldelta') |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2039 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2040 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48934
diff
changeset
|
2041 class simplekeyvaluefile: |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2042 """A simple file with key=value lines |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2043 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2044 Keys must be alphanumerics and start with a letter, values must not |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2045 contain '\n' characters""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2046 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2047 firstlinekey = b'__firstline' |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2048 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2049 def __init__(self, vfs, path: bytes, keys=None) -> None: |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2050 self.vfs = vfs |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2051 self.path = path |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2052 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2053 def read(self, firstlinenonkeyval: bool = False): |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2054 """Read the contents of a simple key-value file |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2055 |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2056 'firstlinenonkeyval' indicates whether the first line of file should |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2057 be treated as a key-value pair or reuturned fully under the |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2058 __firstline key.""" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2059 lines = self.vfs.readlines(self.path) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2060 d = {} |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2061 if firstlinenonkeyval: |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2062 if not lines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2063 e = _(b"empty simplekeyvalue file") |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2064 raise error.CorruptedState(e) |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2065 # we don't want to include '\n' in the __firstline |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2066 d[self.firstlinekey] = lines[0][:-1] |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2067 del lines[0] |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2068 |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2069 try: |
32269
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
2070 # the 'if line.strip()' part prevents us from failing on empty |
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
2071 # lines which only contain '\n' therefore are not skipped |
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
2072 # by 'if line' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2073 updatedict = dict( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2074 line[:-1].split(b'=', 1) for line in lines if line.strip() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2075 ) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2076 if self.firstlinekey in updatedict: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2077 e = _(b"%r can't be used as a key") |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2078 raise error.CorruptedState(e % self.firstlinekey) |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2079 d.update(updatedict) |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2080 except ValueError as e: |
43365
899e55e2d375
py3: fix exception message encoding in scmutil.py's simplekeyvaluefile.read
Emmanuel Leblond <emmanuel.leblond@gmail.com>
parents:
43147
diff
changeset
|
2081 raise error.CorruptedState(stringutil.forcebytestr(e)) |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2082 return d |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2083 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2084 def write(self, data, firstline: Optional[bytes] = None) -> None: |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2085 """Write key=>value mapping to a file |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2086 data is a dict. Keys must be alphanumerical and start with a letter. |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2087 Values must not contain newline characters. |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2088 |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2089 If 'firstline' is not None, it is written to file before |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2090 everything else, as it is, not in a key=value form""" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2091 lines = [] |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2092 if firstline is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2093 lines.append(b'%s\n' % firstline) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2094 |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2095 for k, v in data.items(): |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2096 if k == self.firstlinekey: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2097 e = b"key name '%s' is reserved" % self.firstlinekey |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
2098 raise error.ProgrammingError(e) |
35913
558e01a23f40
py3: slice on bytes to prevent getting the ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35888
diff
changeset
|
2099 if not k[0:1].isalpha(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2100 e = b"keys must start with a letter in a key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2101 raise error.ProgrammingError(e) |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2102 if not k.isalnum(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2103 e = b"invalid key name in a simple key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2104 raise error.ProgrammingError(e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2105 if b'\n' in v: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2106 e = b"invalid value in a simple key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
2107 raise error.ProgrammingError(e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2108 lines.append(b"%s=%s\n" % (k, v)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2109 with self.vfs(self.path, mode=b'wb', atomictemp=True) as fp: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 fp.write(b''.join(lines)) |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
2111 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2112 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2113 _reportobsoletedsource: List[bytes] = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2114 b'debugobsolete', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2115 b'pull', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2116 b'push', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2117 b'serve', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2118 b'unbundle', |
33541
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33511
diff
changeset
|
2119 ] |
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33511
diff
changeset
|
2120 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2121 _reportnewcssource: List[bytes] = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2122 b'pull', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2123 b'unbundle', |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2124 ] |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2125 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2126 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2127 def prefetchfiles(repo, revmatches) -> None: |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
2128 """Invokes the registered file prefetch functions, allowing extensions to |
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
2129 ensure the corresponding files are available locally, before the command |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2130 uses them. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2131 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2132 Args: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2133 revmatches: a list of (revision, match) tuples to indicate the files to |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2134 fetch at each revision. If any of the match elements is None, it matches |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2135 all files. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2136 """ |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
2137 |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2138 def _matcher(m): |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2139 if m: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2140 assert isinstance(m, matchmod.basematcher) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2141 # The command itself will complain about files that don't exist, so |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2142 # don't duplicate the message. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2143 return matchmod.badmatch(m, lambda fn, msg: None) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2144 else: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2145 return matchall(repo) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2146 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2147 revbadmatches = [(rev, _matcher(match)) for (rev, match) in revmatches] |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2148 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
2149 fileprefetchhooks(repo, revbadmatches) |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
2150 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2151 |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
2152 # a list of (repo, revs, match) prefetch functions |
36137
f52a9336ac5f
cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35913
diff
changeset
|
2153 fileprefetchhooks = util.hooks() |
f52a9336ac5f
cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35913
diff
changeset
|
2154 |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2155 # A marker that tells the evolve extension to suppress its own reporting |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2156 _reportstroubledchangesets: bool = True |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2157 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2158 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2159 def registersummarycallback( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2160 repo, otr, txnname: bytes = b'', as_validator: bool = False |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2161 ) -> None: |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
2162 """register a callback to issue a summary after the transaction is closed |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2163 |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2164 If as_validator is true, then the callbacks are registered as transaction |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2165 validators instead |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
2166 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2167 |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2168 def txmatch(sources): |
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2169 return any(txnname.startswith(source) for source in sources) |
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2170 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2171 categories = [] |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2172 |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2173 def reportsummary(func): |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2174 """decorator for report callbacks.""" |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2175 # The repoview life cycle is shorter than the one of the actual |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2176 # underlying repository. So the filtered object can die before the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2177 # weakref is used leading to troubles. We keep a reference to the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2178 # unfiltered object and restore the filtering when retrieving the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2179 # repository through the weakref. |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2180 filtername = repo.filtername |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2181 reporef = weakref.ref(repo.unfiltered()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2182 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2183 def wrapped(tr): |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2184 repo = reporef() |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2185 if filtername: |
43727
5b90a050082b
scmutil: add assertions to help pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
43654
diff
changeset
|
2186 assert repo is not None # help pytype |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2187 repo = repo.filtered(filtername) |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2188 func(repo, tr) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2189 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2190 newcat = b'%02i-txnreport' % len(categories) |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2191 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2192 otr.addvalidator(newcat, wrapped) |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2193 else: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2194 otr.addpostclose(newcat, wrapped) |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2195 categories.append(newcat) |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2196 return wrapped |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2197 |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2198 @reportsummary |
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2199 def reportchangegroup(repo, tr): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2200 cgchangesets = tr.changes.get(b'changegroup-count-changesets', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2201 cgrevisions = tr.changes.get(b'changegroup-count-revisions', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2202 cgfiles = tr.changes.get(b'changegroup-count-files', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2203 cgheads = tr.changes.get(b'changegroup-count-heads', 0) |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2204 if cgchangesets or cgrevisions or cgfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2205 htext = b"" |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2206 if cgheads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2207 htext = _(b" (%+d heads)") % cgheads |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2208 msg = _(b"added %d changesets with %d changes to %d files%s\n") |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2209 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2210 msg = _(b"adding %d changesets with %d changes to %d files%s\n") |
43727
5b90a050082b
scmutil: add assertions to help pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
43654
diff
changeset
|
2211 assert repo is not None # help pytype |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2212 repo.ui.status(msg % (cgchangesets, cgrevisions, cgfiles, htext)) |
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2213 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2214 if txmatch(_reportobsoletedsource): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2215 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2216 @reportsummary |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2217 def reportobsoleted(repo, tr): |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2218 obsoleted = obsutil.getobsoleted(repo, tr) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2219 newmarkers = len(tr.changes.get(b'obsmarkers', ())) |
42894
38392d5bde8e
transaction: issue "new obsmarkers" message at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42711
diff
changeset
|
2220 if newmarkers: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2221 repo.ui.status(_(b'%i new obsolescence markers\n') % newmarkers) |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2222 if obsoleted: |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2223 msg = _(b'obsoleted %i changesets\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2224 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2225 msg = _(b'obsoleting %i changesets\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2226 repo.ui.status(msg % len(obsoleted)) |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2227 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2228 if obsolete.isenabled( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2229 repo, obsolete.createmarkersopt |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2230 ) and repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2231 b'experimental', b'evolution.report-instabilities' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2232 ): |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2233 instabilitytypes = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2234 (b'orphan', b'orphan'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2235 (b'phase-divergent', b'phasedivergent'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2236 (b'content-divergent', b'contentdivergent'), |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2237 ] |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2238 |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2239 def getinstabilitycounts(repo): |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2240 filtered = repo.changelog.filteredrevs |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2241 counts = {} |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2242 for instability, revset in instabilitytypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2243 counts[instability] = len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2244 set(obsolete.getrevs(repo, revset)) - filtered |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2245 ) |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2246 return counts |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2247 |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2248 oldinstabilitycounts = getinstabilitycounts(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2249 |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2250 @reportsummary |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2251 def reportnewinstabilities(repo, tr): |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2252 newinstabilitycounts = getinstabilitycounts(repo) |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2253 for instability, revset in instabilitytypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2254 delta = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2255 newinstabilitycounts[instability] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2256 - oldinstabilitycounts[instability] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2257 ) |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2258 msg = getinstabilitymessage(delta, instability) |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2259 if msg: |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2260 repo.ui.warn(msg) |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2261 |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2262 if txmatch(_reportnewcssource): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2263 |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2264 @reportsummary |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2265 def reportnewcs(repo, tr): |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2266 """Report the range of new revisions pulled/unbundled.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2267 origrepolen = tr.changes.get(b'origrepolen', len(repo)) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2268 unfi = repo.unfiltered() |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2269 if origrepolen >= len(unfi): |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2270 return |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2271 |
39897
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
2272 # Compute the bounds of new visible revisions' range. |
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
2273 revs = smartset.spanset(repo, start=origrepolen) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2274 if revs: |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2275 minrev, maxrev = repo[revs.min()], repo[revs.max()] |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2276 |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2277 if minrev == maxrev: |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2278 revrange = minrev |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2279 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2280 revrange = b'%s:%s' % (minrev, maxrev) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2281 draft = len(repo.revs(b'%ld and draft()', revs)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2282 secret = len(repo.revs(b'%ld and secret()', revs)) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2283 if not (draft or secret): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2284 msg = _(b'new changesets %s\n') % revrange |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2285 elif draft and secret: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2286 msg = _(b'new changesets %s (%d drafts, %d secrets)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2287 msg %= (revrange, draft, secret) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2288 elif draft: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2289 msg = _(b'new changesets %s (%d drafts)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2290 msg %= (revrange, draft) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2291 elif secret: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2292 msg = _(b'new changesets %s (%d secrets)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2293 msg %= (revrange, secret) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2294 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2295 errormsg = b'entered unreachable condition' |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2296 raise error.ProgrammingError(errormsg) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2297 repo.ui.status(msg) |
35177
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2298 |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2299 # search new changesets directly pulled as obsolete |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2300 duplicates = tr.changes.get(b'revduplicates', ()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2301 obsadded = unfi.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2302 b'(%d: + %ld) and obsolete()', origrepolen, duplicates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2303 ) |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2304 cl = repo.changelog |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2305 extinctadded = [r for r in obsadded if r not in cl] |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2306 if extinctadded: |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2307 # They are not just obsolete, but obsolete and invisible |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2308 # we call them "extinct" internally but the terms have not been |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2309 # exposed to users. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2310 msg = b'(%d other changesets obsolete on arrival)\n' |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2311 repo.ui.status(msg % len(extinctadded)) |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2312 |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2313 @reportsummary |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2314 def reportphasechanges(repo, tr): |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2315 """Report statistics of phase changes for changesets pre-existing |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2316 pull/unbundle. |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2317 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2318 origrepolen = tr.changes.get(b'origrepolen', len(repo)) |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2319 published = [] |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2320 for revs, (old, new) in tr.changes.get(b'phases', []): |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2321 if new != phases.public: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2322 continue |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2323 published.extend(rev for rev in revs if rev < origrepolen) |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2324 if not published: |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2325 return |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2326 msg = _(b'%d local changesets published\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2327 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2328 msg = _(b'%d local changesets will be published\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2329 repo.ui.status(msg % len(published)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2330 |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2331 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2332 def getinstabilitymessage(delta: int, instability: bytes) -> Optional[bytes]: |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2333 """function to return the message to show warning about new instabilities |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2334 |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2335 exists as a separate function so that extension can wrap to show more |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2336 information like how to fix instabilities""" |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2337 if delta > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2338 return _(b'%i new %s changesets\n') % (delta, instability) |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2339 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2340 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2341 def nodesummaries(repo, nodes, maxnumnodes: int = 4) -> bytes: |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
35177
diff
changeset
|
2342 if len(nodes) <= maxnumnodes or repo.ui.verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2343 return b' '.join(short(h) for h in nodes) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2344 first = b' '.join(short(h) for h in nodes[:maxnumnodes]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2345 return _(b"%s and %d others") % (first, len(nodes) - maxnumnodes) |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
35177
diff
changeset
|
2346 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2347 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2348 def enforcesinglehead(repo, tr, desc: bytes, accountclosed, filtername) -> None: |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2349 """check that no named branch has multiple heads""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2350 if desc in (b'strip', b'repair'): |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2351 # skip the logic during strip |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2352 return |
46096
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46042
diff
changeset
|
2353 visible = repo.filtered(filtername) |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2354 # possible improvement: we could restrict the check to affected branch |
42969
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2355 bm = visible.branchmap() |
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2356 for name in bm: |
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2357 heads = bm.branchheads(name, closed=accountclosed) |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2358 if len(heads) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2359 msg = _(b'rejecting multiple heads on branch "%s"') |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2360 msg %= name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2361 hint = _(b'%d heads: %s') |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2362 hint %= (len(heads), nodesummaries(repo, heads)) |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2363 raise error.Abort(msg, hint=hint) |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2364 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2365 |
35177
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2366 def wrapconvertsink(sink): |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2367 """Allow extensions to wrap the sink returned by convcmd.convertsink() |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2368 before it is used, whether or not the convert extension was formally loaded. |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2369 """ |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2370 return sink |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2371 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2372 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2373 def unhidehashlikerevs(repo, specs, hiddentype: bytes): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2374 """parse the user specs and unhide changesets whose hash or revision number |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2375 is passed. |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2376 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2377 hiddentype can be: 1) 'warn': warn while unhiding changesets |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2378 2) 'nowarn': don't warn while unhiding changesets |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2379 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2380 returns a repo object with the required changesets unhidden |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2381 """ |
48460
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2382 if not specs: |
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2383 return repo |
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2384 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2385 if not repo.filtername or not repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2386 b'experimental', b'directaccess' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2387 ): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2388 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2389 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2390 if repo.filtername not in (b'visible', b'visible-hidden'): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2391 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2392 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2393 symbols = set() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2394 for spec in specs: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2395 try: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2396 tree = revsetlang.parse(spec) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2397 except error.ParseError: # will be reported by scmutil.revrange() |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2398 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2399 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2400 symbols.update(revsetlang.gethashlikesymbols(tree)) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2401 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2402 if not symbols: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2403 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2404 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2405 revs = _getrevsfromsymbols(repo, symbols) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2406 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2407 if not revs: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2408 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2409 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2410 if hiddentype == b'warn': |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2411 unfi = repo.unfiltered() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2412 revstr = b", ".join([pycompat.bytestr(unfi[l]) for l in revs]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2413 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2414 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2415 b"warning: accessing hidden changesets for write " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2416 b"operation: %s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2417 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2418 % revstr |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2419 ) |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2420 |
35499
b55a142f00c5
scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35496
diff
changeset
|
2421 # we have to use new filtername to separate branch/tags cache until we can |
b55a142f00c5
scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35496
diff
changeset
|
2422 # disbale these cache when revisions are dynamically pinned. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2423 return repo.filtered(b'visible-hidden', revs) |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2424 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2425 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2426 def _getrevsfromsymbols(repo, symbols) -> Set[int]: |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2427 """parse the list of symbols and returns a set of revision numbers of hidden |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2428 changesets present in symbols""" |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2429 revs = set() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2430 unfi = repo.unfiltered() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2431 unficl = unfi.changelog |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2432 cl = repo.changelog |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2433 tiprev = len(unficl) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2434 allowrevnums = repo.ui.configbool(b'experimental', b'directaccess.revnums') |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2435 for s in symbols: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2436 try: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2437 n = int(s) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2438 if n <= tiprev: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2439 if not allowrevnums: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2440 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2441 else: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2442 if n not in cl: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2443 revs.add(n) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2444 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2445 except ValueError: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2446 pass |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2447 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2448 try: |
37868
69de3c3de036
directaccess: use resolvehexnodeidprefix() instead of _partialmatch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37865
diff
changeset
|
2449 s = resolvehexnodeidprefix(unfi, s) |
37094
7f025c9b7865
directaccess: do not abort by 'ff...' hash
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
2450 except (error.LookupError, error.WdirUnsupported): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2451 s = None |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2452 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2453 if s is not None: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2454 rev = unficl.rev(s) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2455 if rev not in cl: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2456 revs.add(rev) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2457 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2458 return revs |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37979
diff
changeset
|
2459 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2460 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2461 def bookmarkrevs(repo, mark: bytes): |
46039
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2462 """Select revisions reachable by a given bookmark |
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2463 |
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2464 If the bookmarked revision isn't a head, an empty set will be returned. |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37979
diff
changeset
|
2465 """ |
46040
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2466 return repo.revs(format_bookmark_revspec(mark)) |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2467 |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2468 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2469 def format_bookmark_revspec(mark: bytes) -> bytes: |
46040
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2470 """Build a revset expression to select revisions reachable by a given |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2471 bookmark""" |
46042
1bf2b44c4007
log: do not accept string-matcher pattern as -u/-b/-B parameter
Yuya Nishihara <yuya@tcha.org>
parents:
46040
diff
changeset
|
2472 mark = b'literal:' + mark |
46040
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2473 return revsetlang.formatspec( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2474 b"ancestors(bookmark(%s)) - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2475 b"ancestors(head() and not bookmark(%s)) - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2476 b"ancestors(bookmark() and not bookmark(%s))", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2477 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2478 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2479 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2480 ) |
50445
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2481 |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2482 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2483 def ismember(ui: "uimod.ui", username: bytes, userlist: List[bytes]) -> bool: |
50445
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2484 """Check if username is a member of userlist. |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2485 |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2486 If userlist has a single '*' member, all users are considered members. |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2487 Can be overridden by extensions to provide more complex authorization |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2488 schemes. |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2489 """ |
4bddc2f72879
hgweb: move ismember from `hgweb.common` to `scmutil`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
2490 return userlist == [b'*'] or username in userlist |
51283
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2491 |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2492 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2493 RESOURCE_HIGH: int = 3 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2494 RESOURCE_MEDIUM: int = 2 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2495 RESOURCE_LOW: int = 1 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2496 RESOURCE_DEFAULT: int = 0 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2497 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2498 RESOURCE_MAPPING: Dict[bytes, int] = { |
51283
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2499 b'default': RESOURCE_DEFAULT, |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2500 b'low': RESOURCE_LOW, |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2501 b'medium': RESOURCE_MEDIUM, |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2502 b'high': RESOURCE_HIGH, |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2503 } |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2504 |
51732
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2505 DEFAULT_RESOURCE: int = RESOURCE_MEDIUM |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2506 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2507 |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2508 def get_resource_profile( |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2509 ui: "uimod.ui", dimension: Optional[bytes] = None |
43460c311c0c
typing: add trivial type hints to `mercurial.scmutil`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51729
diff
changeset
|
2510 ) -> int: |
51283
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2511 """return the resource profile for a dimension |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2512 |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2513 If no dimension is specified, the generic value is returned""" |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2514 generic_name = ui.config(b'usage', b'resources') |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2515 value = RESOURCE_MAPPING.get(generic_name, RESOURCE_DEFAULT) |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2516 if value == RESOURCE_DEFAULT: |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2517 value = DEFAULT_RESOURCE |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2518 if dimension is not None: |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2519 sub_name = ui.config(b'usage', b'resources.%s' % dimension) |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2520 sub_value = RESOURCE_MAPPING.get(sub_name, RESOURCE_DEFAULT) |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2521 if sub_value != RESOURCE_DEFAULT: |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2522 value = sub_value |
83c6dceeb10d
usage: add configuration option to adjust resources usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51252
diff
changeset
|
2523 return value |