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