Mercurial > public > mercurial-scm > hg
annotate mercurial/narrowspec.py @ 51528:f85f23f1479b
branchcache: skip entries that are topological heads in the on disk file
In the majority of cases, topological heads are also branch heads. We have
efficient way to get the topological heads and efficient way to retrieve
their branch information. So there is little value in putting them in the branch
cache file explicitly. On the contrary, writing them explicitly tend to create
very large cache file that are inefficient to read and update.
So the branch cache v3 format is no longer including them. This changeset focus
on the format aspect and have no focus on the performance aspect. We will cover
that later.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 07 Mar 2024 10:55:22 +0100 |
parents | 18c8c18993f0 |
children | 493034cc3265 |
rev | line source |
---|---|
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 # narrowspec.py - methods for working with a narrow view of a repository |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 # |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 # Copyright 2017 Google, Inc. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 # |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
8 import weakref |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 |
36160
9fd8c2a3db5a
narrowspec: move module into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36159
diff
changeset
|
10 from .i18n import _ |
9fd8c2a3db5a
narrowspec: move module into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36159
diff
changeset
|
11 from . import ( |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 error, |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 match as matchmod, |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
14 merge, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44563
diff
changeset
|
15 mergestate as mergestatemod, |
42150
770f5f586ae5
narrow: make warning about possibly dirty files respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
16 scmutil, |
38839
f64ebe7d2259
narrowspec: use sparse.parseconfig() to parse narrowspec file (BC)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38836
diff
changeset
|
17 sparse, |
50248
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
18 txnutil, |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 util, |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 ) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
22 # The file in .hg/store/ that indicates which paths exit in the store |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
23 FILENAME = b'narrowspec' |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
24 # The file in .hg/ that indicates which paths exit in the dirstate |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
25 DIRSTATE_FILENAME = b'narrowspec.dirstate' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
26 |
39531
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
27 # Pattern prefixes that are allowed in narrow patterns. This list MUST |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
28 # only contain patterns that are fast and safe to evaluate. Keep in mind |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
29 # that patterns are supplied by clients and executed on remote servers |
39811
ae20f52437e9
wireprotov2: advertise recognized path filter prefixes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39556
diff
changeset
|
30 # as part of wire protocol commands. That means that changes to this |
ae20f52437e9
wireprotov2: advertise recognized path filter prefixes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39556
diff
changeset
|
31 # data structure influence the wire protocol and should not be taken |
ae20f52437e9
wireprotov2: advertise recognized path filter prefixes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39556
diff
changeset
|
32 # lightly - especially removals. |
39531
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
33 VALID_PREFIXES = ( |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
34 b'path:', |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
35 b'rootfilesin:', |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
36 ) |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
37 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
38 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 def normalizesplitpattern(kind, pat): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
40 """Returns the normalized version of a pattern and kind. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 Returns a tuple with the normalized kind and normalized pattern. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
44 pat = pat.rstrip(b'/') |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
45 _validatepattern(pat) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
46 return kind, pat |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
48 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
49 def _numlines(s): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
50 """Returns the number of lines in s, including ending empty lines.""" |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
51 # We use splitlines because it is Unicode-friendly and thus Python 3 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
52 # compatible. However, it does not count empty lines at the end, so trick |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
53 # it by adding a character at the end. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 return len((s + b'x').splitlines()) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
55 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
56 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
57 def _validatepattern(pat): |
36098
9c55bbc29dcf
narrowspec: document constraints when validating patterns
Augie Fackler <augie@google.com>
parents:
36079
diff
changeset
|
58 """Validates the pattern and aborts if it is invalid. |
9c55bbc29dcf
narrowspec: document constraints when validating patterns
Augie Fackler <augie@google.com>
parents:
36079
diff
changeset
|
59 |
9c55bbc29dcf
narrowspec: document constraints when validating patterns
Augie Fackler <augie@google.com>
parents:
36079
diff
changeset
|
60 Patterns are stored in the narrowspec as newline-separated |
9c55bbc29dcf
narrowspec: document constraints when validating patterns
Augie Fackler <augie@google.com>
parents:
36079
diff
changeset
|
61 POSIX-style bytestring paths. There's no escaping. |
9c55bbc29dcf
narrowspec: document constraints when validating patterns
Augie Fackler <augie@google.com>
parents:
36079
diff
changeset
|
62 """ |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
63 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
64 # We use newlines as separators in the narrowspec file, so don't allow them |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
65 # in patterns. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
66 if _numlines(pat) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
67 raise error.Abort(_(b'newlines are not allowed in narrowspec paths')) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
68 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
69 components = pat.split(b'/') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 if b'.' in components or b'..' in components: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
71 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
72 _(b'"." and ".." are not allowed in narrowspec paths') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
73 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
74 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
75 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 def normalizepattern(pattern, defaultkind=b'path'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
77 """Returns the normalized version of a text-format pattern. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 If the pattern has no kind, the default will be added. |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
80 """ |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 kind, pat = matchmod._patsplit(pattern, defaultkind) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 return b'%s:%s' % normalizesplitpattern(kind, pat) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
83 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
84 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 def parsepatterns(pats): |
39531
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
86 """Parses an iterable of patterns into a typed pattern set. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
87 |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
88 Patterns are assumed to be ``path:`` if no prefix is present. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
89 For safety and performance reasons, only some prefixes are allowed. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
90 See ``validatepatterns()``. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
91 |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
92 This function should be used on patterns that come from the user to |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
93 normalize and validate them to the internal data structure used for |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
94 representing patterns. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
95 """ |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
96 res = {normalizepattern(orig) for orig in pats} |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
97 validatepatterns(res) |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
98 return res |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
99 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
100 |
39531
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
101 def validatepatterns(pats): |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
102 """Validate that patterns are in the expected data structure and format. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
103 |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
104 And that is a set of normalized patterns beginning with ``path:`` or |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
105 ``rootfilesin:``. |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
106 |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
107 This function should be used to validate internal data structures |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
108 and patterns that are loaded from sources that use the internal, |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
109 prefixed pattern representation (but can't necessarily be fully trusted). |
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
110 """ |
48777
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
111 with util.timedcm('narrowspec.validatepatterns(pats size=%d)', len(pats)): |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
112 if not isinstance(pats, set): |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
113 raise error.ProgrammingError( |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
114 b'narrow patterns should be a set; got %r' % pats |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
115 ) |
39531
0d572769046a
narrowspec: limit patterns to path: and rootfilesin: (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39525
diff
changeset
|
116 |
48777
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
117 for pat in pats: |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
118 if not pat.startswith(VALID_PREFIXES): |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
119 # Use a Mercurial exception because this can happen due to user |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
120 # bugs (e.g. manually updating spec file). |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
121 raise error.Abort( |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
122 _(b'invalid prefix on narrow pattern: %s') % pat, |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
123 hint=_( |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
124 b'narrow patterns must begin with one of ' |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
125 b'the following: %s' |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
126 ) |
eb9c55453249
narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com>
parents:
48390
diff
changeset
|
127 % b', '.join(VALID_PREFIXES), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
128 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
129 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
130 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
131 def format(includes, excludes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
132 output = b'[include]\n' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
133 for i in sorted(includes - excludes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 output += i + b'\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 output += b'[exclude]\n' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
136 for e in sorted(excludes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 output += e + b'\n' |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
138 return output |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
139 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
140 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 def match(root, include=None, exclude=None): |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
142 if not include: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
143 # Passing empty include and empty exclude to matchmod.match() |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
144 # gives a matcher that matches everything, so explicitly use |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
145 # the nevermatcher. |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41298
diff
changeset
|
146 return matchmod.never() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
147 return matchmod.match( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 root, b'', [], include=include or [], exclude=exclude or [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
149 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
150 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
151 |
40690
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
152 def parseconfig(ui, spec): |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
153 # maybe we should care about the profiles returned too |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 includepats, excludepats, profiles = sparse.parseconfig(ui, spec, b'narrow') |
40690
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
155 if profiles: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
156 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
157 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 b"including other spec files using '%include' is not" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 b" supported in narrowspec" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
160 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
161 ) |
40690
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
162 |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
163 validatepatterns(includepats) |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
164 validatepatterns(excludepats) |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
165 |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
166 return includepats, excludepats |
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
167 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
168 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
169 def load(repo): |
42404
0c0a22f5b0b5
narrowspec: use vfs.tryread() instead of reimplementing
Martin von Zweigbergk <martinvonz@google.com>
parents:
42171
diff
changeset
|
170 # Treat "narrowspec does not exist" the same as "narrowspec file exists |
0c0a22f5b0b5
narrowspec: use vfs.tryread() instead of reimplementing
Martin von Zweigbergk <martinvonz@google.com>
parents:
42171
diff
changeset
|
171 # and is empty". |
50248
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
172 spec = None |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
173 if txnutil.mayhavepending(repo.root): |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
174 pending_path = b"%s.pending" % FILENAME |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
175 if repo.svfs.exists(pending_path): |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
176 spec = repo.svfs.tryread(FILENAME) |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
177 if spec is None: |
2fbc109fd58a
narrow: read pending file when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50192
diff
changeset
|
178 spec = repo.svfs.tryread(FILENAME) |
40690
efd0f79246e3
narrow: extract helper for parsing narrowspec file
Martin von Zweigbergk <martinvonz@google.com>
parents:
39811
diff
changeset
|
179 return parseconfig(repo.ui, spec) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
180 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
181 |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 def save(repo, includepats, excludepats): |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
183 repo = repo.unfiltered() |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
184 |
39539
8d8e61df8259
narrowspec: validate patterns when loading and saving spec file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39531
diff
changeset
|
185 validatepatterns(includepats) |
8d8e61df8259
narrowspec: validate patterns when loading and saving spec file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39531
diff
changeset
|
186 validatepatterns(excludepats) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
187 spec = format(includepats, excludepats) |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
188 |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
189 tr = repo.currenttransaction() |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
190 if tr is None: |
50192
6794f927bc48
narrow: enforce that narrow spec is written within a transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50188
diff
changeset
|
191 m = "changing narrow spec outside of a transaction" |
6794f927bc48
narrow: enforce that narrow spec is written within a transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50188
diff
changeset
|
192 raise error.ProgrammingError(m) |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
193 else: |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
194 # the roundtrip is sometime different |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
195 # not taking any chance for now |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
196 value = parseconfig(repo.ui, spec) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
197 reporef = weakref.ref(repo) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
198 |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
199 def clean_pending(tr): |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
200 r = reporef() |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
201 if r is not None: |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
202 r._pending_narrow_pats = None |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
203 |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
204 tr.addpostclose(b'narrow-spec', clean_pending) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
205 tr.addabort(b'narrow-spec', clean_pending) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
206 repo._pending_narrow_pats = value |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
207 |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
208 def write_spec(f): |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
209 f.write(spec) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
210 |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
211 tr.addfilegenerator( |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
212 # XXX think about order at some point |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
213 b"narrow-spec", |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
214 (FILENAME,), |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
215 write_spec, |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
216 location=b'store', |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50185
diff
changeset
|
217 ) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
218 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
219 |
41229
50ca531f1f24
narrow: copy store narrowspec to working copy immediately
Martin von Zweigbergk <martinvonz@google.com>
parents:
41227
diff
changeset
|
220 def copytoworkingcopy(repo): |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
221 repo = repo.unfiltered() |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
222 tr = repo.currenttransaction() |
50185
99296ca9f29e
narrow: get the narrow patterns from the repository object instead of disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50135
diff
changeset
|
223 spec = format(*repo.narrowpats) |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
224 if tr is None: |
50192
6794f927bc48
narrow: enforce that narrow spec is written within a transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50188
diff
changeset
|
225 m = "changing narrow spec outside of a transaction" |
6794f927bc48
narrow: enforce that narrow spec is written within a transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50188
diff
changeset
|
226 raise error.ProgrammingError(m) |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
227 else: |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
228 |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
229 reporef = weakref.ref(repo) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
230 |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
231 def clean_pending(tr): |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
232 r = reporef() |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
233 if r is not None: |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
234 r._pending_narrow_pats_dirstate = None |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
235 |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
236 tr.addpostclose(b'narrow-spec-dirstate', clean_pending) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
237 tr.addabort(b'narrow-spec-dirstate', clean_pending) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
238 repo._pending_narrow_pats_dirstate = repo.narrowpats |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
239 |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
240 def write_spec(f): |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
241 f.write(spec) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
242 |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
243 tr.addfilegenerator( |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
244 # XXX think about order at some point |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
245 b"narrow-spec-dirstate", |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
246 (DIRSTATE_FILENAME,), |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
247 write_spec, |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
248 location=b'plain', |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
249 ) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
250 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
251 |
36100
8fd0a9e2d7e9
narrow: make restrictpatterns a little more idiomatic
Augie Fackler <augie@google.com>
parents:
36099
diff
changeset
|
252 def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45372
diff
changeset
|
253 r"""Restricts the patterns according to repo settings, |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
254 results in a logical AND operation |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
255 |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
256 :param req_includes: requested includes |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
257 :param req_excludes: requested excludes |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
258 :param repo_includes: repo includes |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
259 :param repo_excludes: repo excludes |
36100
8fd0a9e2d7e9
narrow: make restrictpatterns a little more idiomatic
Augie Fackler <augie@google.com>
parents:
36099
diff
changeset
|
260 :return: include patterns, exclude patterns, and invalid include patterns. |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
261 """ |
36099
b8bbe589fd47
narrowspec: consistently use set() to copy sets
Augie Fackler <augie@google.com>
parents:
36098
diff
changeset
|
262 res_excludes = set(req_excludes) |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 res_excludes.update(repo_excludes) |
36100
8fd0a9e2d7e9
narrow: make restrictpatterns a little more idiomatic
Augie Fackler <augie@google.com>
parents:
36099
diff
changeset
|
264 invalid_includes = [] |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
265 if not req_includes: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
266 res_includes = set(repo_includes) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 elif b'path:.' not in repo_includes: |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
268 res_includes = [] |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
269 for req_include in req_includes: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
270 req_include = util.expandpath(util.normpath(req_include)) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
271 if req_include in repo_includes: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
272 res_includes.append(req_include) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
273 continue |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
274 valid = False |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
275 for repo_include in repo_includes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
276 if req_include.startswith(repo_include + b'/'): |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
277 valid = True |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
278 res_includes.append(req_include) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
279 break |
36100
8fd0a9e2d7e9
narrow: make restrictpatterns a little more idiomatic
Augie Fackler <augie@google.com>
parents:
36099
diff
changeset
|
280 if not valid: |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
281 invalid_includes.append(req_include) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
282 if len(res_includes) == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 res_excludes = {b'path:.'} |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
284 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
285 res_includes = set(res_includes) |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
286 else: |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
287 res_includes = set(req_includes) |
36100
8fd0a9e2d7e9
narrow: make restrictpatterns a little more idiomatic
Augie Fackler <augie@google.com>
parents:
36099
diff
changeset
|
288 return res_includes, res_excludes, invalid_includes |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
289 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
290 |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
291 # These two are extracted for extensions (specifically for Google's CitC file |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
292 # system) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
293 def _deletecleanfiles(repo, files): |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
294 for f in files: |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
295 repo.wvfs.unlinkpath(f) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
296 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
297 |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
298 def _writeaddedfiles(repo, pctx, files): |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
299 mresult = merge.mergeresult() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
300 mf = repo[b'.'].manifest() |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
301 for f in files: |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
302 if not repo.wvfs.exists(f): |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
303 mresult.addfile( |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
304 f, |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
305 mergestatemod.ACTION_GET, |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
306 (mf.flags(f), False), |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
307 b"narrowspec updated", |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
308 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
309 merge.applyupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
310 repo, |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
311 mresult, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
312 wctx=repo[None], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 mctx=repo[b'.'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
314 overwrite=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
315 wantfiledata=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
316 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
317 |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
318 |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
319 def checkworkingcopynarrowspec(repo): |
42411
4738c292a520
narrowspec: replace one recursion-avoidance hack with another
Martin von Zweigbergk <martinvonz@google.com>
parents:
42404
diff
changeset
|
320 # Avoid infinite recursion when updating the working copy |
4738c292a520
narrowspec: replace one recursion-avoidance hack with another
Martin von Zweigbergk <martinvonz@google.com>
parents:
42404
diff
changeset
|
321 if getattr(repo, '_updatingnarrowspec', False): |
4738c292a520
narrowspec: replace one recursion-avoidance hack with another
Martin von Zweigbergk <martinvonz@google.com>
parents:
42404
diff
changeset
|
322 return |
50185
99296ca9f29e
narrow: get the narrow patterns from the repository object instead of disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50135
diff
changeset
|
323 storespec = repo.narrowpats |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
324 wcspec = repo._pending_narrow_pats_dirstate |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
325 if wcspec is None: |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
326 oldspec = repo.vfs.tryread(DIRSTATE_FILENAME) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
327 wcspec = parseconfig(repo.ui, oldspec) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
328 if wcspec != storespec: |
48230
7ed0fc687220
narrow: raise StateError when working copy is stale (for detailed exit code)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47752
diff
changeset
|
329 raise error.StateError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 _(b"working copy's narrowspec is stale"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 hint=_(b"run 'hg tracked --update-working-copy'"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
332 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
333 |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
334 |
41238
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
335 def updateworkingcopy(repo, assumeclean=False): |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
336 """updates the working copy and dirstate from the store narrowspec |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
337 |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
338 When assumeclean=True, files that are not known to be clean will also |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
339 be deleted. It is then up to the caller to make sure they are clean. |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
340 """ |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
341 old = repo._pending_narrow_pats_dirstate |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
342 if old is None: |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
343 oldspec = repo.vfs.tryread(DIRSTATE_FILENAME) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
344 oldincludes, oldexcludes = parseconfig(repo.ui, oldspec) |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
345 else: |
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
346 oldincludes, oldexcludes = old |
50185
99296ca9f29e
narrow: get the narrow patterns from the repository object instead of disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50135
diff
changeset
|
347 newincludes, newexcludes = repo.narrowpats |
42411
4738c292a520
narrowspec: replace one recursion-avoidance hack with another
Martin von Zweigbergk <martinvonz@google.com>
parents:
42404
diff
changeset
|
348 repo._updatingnarrowspec = True |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
349 |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
350 oldmatch = match(repo.root, include=oldincludes, exclude=oldexcludes) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
351 newmatch = match(repo.root, include=newincludes, exclude=newexcludes) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
352 addedmatch = matchmod.differencematcher(newmatch, oldmatch) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
353 removedmatch = matchmod.differencematcher(oldmatch, newmatch) |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
354 |
50135
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
355 assert repo.currentwlock() is not None |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
356 ds = repo.dirstate |
50135
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
357 with ds.running_status(repo): |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
358 lookup, status, _mtime_boundary = ds.status( |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
359 removedmatch, |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
360 subrepos=[], |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
361 ignored=True, |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
362 clean=True, |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
363 unknown=True, |
31be0b46fd47
narrow: use `running_status` in `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
364 ) |
41238
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
365 trackeddirty = status.modified + status.added |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
366 clean = status.clean |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
367 if assumeclean: |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
368 clean.extend(lookup) |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
369 else: |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
370 trackeddirty.extend(lookup) |
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
371 _deletecleanfiles(repo, clean) |
42150
770f5f586ae5
narrow: make warning about possibly dirty files respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
372 uipathfn = scmutil.getuipathfn(repo) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
373 for f in sorted(trackeddirty): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
374 repo.ui.status( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
375 _(b'not deleting possibly dirty file %s\n') % uipathfn(f) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 ) |
42171
84bd6ae2d1f6
narrow: also warn when not deleting untracked or ignored files
Martin von Zweigbergk <martinvonz@google.com>
parents:
42150
diff
changeset
|
377 for f in sorted(status.unknown): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 repo.ui.status(_(b'not deleting unknown file %s\n') % uipathfn(f)) |
42171
84bd6ae2d1f6
narrow: also warn when not deleting untracked or ignored files
Martin von Zweigbergk <martinvonz@google.com>
parents:
42150
diff
changeset
|
379 for f in sorted(status.ignored): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 repo.ui.status(_(b'not deleting ignored file %s\n') % uipathfn(f)) |
41238
8c366af085f4
narrow: reuse narrowspec.updateworkingcopy() when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
381 for f in clean + trackeddirty: |
47752
5bcd305389c7
narrow: stop using `drop` in the `updateworkingcopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47739
diff
changeset
|
382 ds.update_file(f, p1_tracked=False, wc_tracked=False) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
383 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 pctx = repo[b'.'] |
47303
e4ccc341e65b
narrow: widen when files are excluded by sparse and not included by narrow
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46606
diff
changeset
|
385 |
e4ccc341e65b
narrow: widen when files are excluded by sparse and not included by narrow
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46606
diff
changeset
|
386 # only update added files that are in the sparse checkout |
e4ccc341e65b
narrow: widen when files are excluded by sparse and not included by narrow
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46606
diff
changeset
|
387 addedmatch = matchmod.intersectmatchers(addedmatch, sparse.matcher(repo)) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
388 newfiles = [f for f in pctx.manifest().walk(addedmatch) if f not in ds] |
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
389 for f in newfiles: |
47739
6a06155dfaef
narrow: use `update_file` instead of `normallookup` after update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47303
diff
changeset
|
390 ds.update_file(f, p1_tracked=True, wc_tracked=True, possibly_dirty=True) |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41041
diff
changeset
|
391 _writeaddedfiles(repo, pctx, newfiles) |
42411
4738c292a520
narrowspec: replace one recursion-avoidance hack with another
Martin von Zweigbergk <martinvonz@google.com>
parents:
42404
diff
changeset
|
392 repo._updatingnarrowspec = False |