Mercurial > hg
annotate mercurial/dirstatemap.py @ 47996:aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
The API changed so should the documentation.
Differential Revision: https://phab.mercurial-scm.org/D11436
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 15 Sep 2021 18:27:57 +0200 |
parents | 0d2a404f1932 |
children | 70547a7d5930 |
rev | line source |
---|---|
47501
8b7e47802deb
dirstate: split dirstatemap in its own file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47489
diff
changeset
|
1 # dirstatemap.py |
8226
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
2 # |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
10263 | 4 # GNU General Public License version 2 or any later version. |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
5 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
6 from __future__ import absolute_import |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
7 |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
8 import errno |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
9 |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
10 from .i18n import _ |
43239
6fcdcea2b03a
dirstate: add some traces on listdir calls
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
11 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
12 from . import ( |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
13 error, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
14 pathutil, |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
15 policy, |
30304
ba2c04059317
py3: use pycompat.ossep at certain places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30224
diff
changeset
|
16 pycompat, |
31050
206532700213
txnutil: factor out the logic to read file in according to HG_PENDING
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30634
diff
changeset
|
17 txnutil, |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
18 util, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
19 ) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
20 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
21 from .dirstateutils import ( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
22 docket as docketmod, |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
23 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
24 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
25 parsers = policy.importmod('parsers') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
26 rustmod = policy.importrust('dirstate') |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
27 |
8261
0fe1f57ac2bd
dirstate: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8226
diff
changeset
|
28 propertycache = util.propertycache |
16201
fb7c4c14223f
dirstate: filecacheify _branch
Idan Kamara <idankk86@gmail.com>
parents:
16200
diff
changeset
|
29 |
47539
84391ddf4c78
dirstate-item: rename the class to DirstateItem
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47535
diff
changeset
|
30 DirstateItem = parsers.DirstateItem |
21808
7537e57f5dbd
dirstate: add dirstatetuple to create dirstate values
Siddharth Agarwal <sid0@fb.com>
parents:
21116
diff
changeset
|
31 |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
32 rangemask = 0x7FFFFFFF |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
33 |
47482
cb29484eaade
dirstate: introduce a symbolic constant for the FROM_P2 marker
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47481
diff
changeset
|
34 |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
35 class dirstatemap(object): |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
36 """Map encapsulating the dirstate's contents. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
37 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
38 The dirstate contains the following state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
39 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
40 - `identity` is the identity of the dirstate file, which can be used to |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
41 detect when changes have occurred to the dirstate file. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
42 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
43 - `parents` is a pair containing the parents of the working copy. The |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
44 parents are updated by calling `setparents`. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
45 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
46 - the state map maps filenames to tuples of (state, mode, size, mtime), |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
47 where state is a single character representing 'normal', 'added', |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
48 'removed', or 'merged'. It is read by treating the dirstate as a |
47996
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
49 dict. File state is updated by calling various methods (see each |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
50 documentation for details): |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
51 |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
52 - `reset_state`, |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
53 - `set_tracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
54 - `set_untracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
55 - `set_clean` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
56 - `set_possibly_dirty` |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
57 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
58 - `copymap` maps destination filenames to their source filename. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
59 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
60 The dirstate also provides the following views onto the state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
61 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
62 - `nonnormalset` is a set of the filenames that have state other |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
63 than 'normal', or are normal but have an mtime of -1 ('normallookup'). |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
64 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
65 - `otherparentset` is a set of the filenames that are marked as coming |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
66 from the second parent when the dirstate is currently being merged. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
67 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
68 - `filefoldmap` is a dict mapping normalized filenames to the denormalized |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
69 form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
70 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
71 - `dirfoldmap` is a dict mapping normalized directory names to the |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
72 denormalized form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
73 """ |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
74 |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
75 def __init__(self, ui, opener, root, nodeconstants, use_dirstate_v2): |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
76 self._ui = ui |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
77 self._opener = opener |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
78 self._root = root |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 self._filename = b'dirstate' |
45219
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
80 self._nodelen = 20 |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
81 self._nodeconstants = nodeconstants |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
82 assert ( |
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
83 not use_dirstate_v2 |
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
84 ), "should have detected unsupported requirement" |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
85 |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
86 self._parents = None |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
87 self._dirtyparents = False |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
88 |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
89 # for consistent view between _pl() and _read() invocations |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
90 self._pendingmode = None |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
91 |
34934
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
92 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
93 def _map(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
94 self._map = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
95 self.read() |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
96 return self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
97 |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
98 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
99 def copymap(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
100 self.copymap = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
101 self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
102 return self.copymap |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
103 |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
104 def clear(self): |
34935
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
105 self._map.clear() |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
106 self.copymap.clear() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
107 self.setparents(self._nodeconstants.nullid, self._nodeconstants.nullid) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 util.clearcachedproperty(self, b"_dirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 util.clearcachedproperty(self, b"_alldirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 util.clearcachedproperty(self, b"filefoldmap") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 util.clearcachedproperty(self, b"dirfoldmap") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 util.clearcachedproperty(self, b"nonnormalset") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 util.clearcachedproperty(self, b"otherparentset") |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
114 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
115 def items(self): |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43090
diff
changeset
|
116 return pycompat.iteritems(self._map) |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
117 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
118 # forward for python2,3 compat |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
119 iteritems = items |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
120 |
47683
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
121 debug_iter = items |
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
122 |
34408
7d2f71b7bc31
dirstate: implement __len__ on dirstatemap (issue5695)
Simon Whitaker <swhitaker@fb.com>
parents:
34339
diff
changeset
|
123 def __len__(self): |
7d2f71b7bc31
dirstate: implement __len__ on dirstatemap (issue5695)
Simon Whitaker <swhitaker@fb.com>
parents:
34339
diff
changeset
|
124 return len(self._map) |
7d2f71b7bc31
dirstate: implement __len__ on dirstatemap (issue5695)
Simon Whitaker <swhitaker@fb.com>
parents:
34339
diff
changeset
|
125 |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
126 def __iter__(self): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
127 return iter(self._map) |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
128 |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
129 def get(self, key, default=None): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
130 return self._map.get(key, default) |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
131 |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
132 def __contains__(self, key): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
133 return key in self._map |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
134 |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
135 def __getitem__(self, key): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
136 return self._map[key] |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
137 |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
138 def keys(self): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
139 return self._map.keys() |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
140 |
34935
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
141 def preload(self): |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
142 """Loads the underlying data, if it's not already loaded""" |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
143 self._map |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
144 |
47687
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
145 def _dirs_incr(self, filename, old_entry=None): |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
146 """incremente the dirstate counter if applicable""" |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
147 if ( |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
148 old_entry is None or old_entry.removed |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
149 ) and "_dirs" in self.__dict__: |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
150 self._dirs.addpath(filename) |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
151 if old_entry is None and "_alldirs" in self.__dict__: |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
152 self._alldirs.addpath(filename) |
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
153 |
47689
f2aef39abc14
dirstate-map: factor out the change to _dirs and _alldirs on removing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47688
diff
changeset
|
154 def _dirs_decr(self, filename, old_entry=None, remove_variant=False): |
47688
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
155 """decremente the dirstate counter if applicable""" |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
156 if old_entry is not None: |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
157 if "_dirs" in self.__dict__ and not old_entry.removed: |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
158 self._dirs.delpath(filename) |
47689
f2aef39abc14
dirstate-map: factor out the change to _dirs and _alldirs on removing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47688
diff
changeset
|
159 if "_alldirs" in self.__dict__ and not remove_variant: |
47688
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
160 self._alldirs.delpath(filename) |
47689
f2aef39abc14
dirstate-map: factor out the change to _dirs and _alldirs on removing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47688
diff
changeset
|
161 elif remove_variant and "_alldirs" in self.__dict__: |
f2aef39abc14
dirstate-map: factor out the change to _dirs and _alldirs on removing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47688
diff
changeset
|
162 self._alldirs.addpath(filename) |
47688
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
163 if "filefoldmap" in self.__dict__: |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
164 normed = util.normcase(filename) |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
165 self.filefoldmap.pop(normed, None) |
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
166 |
47720
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
167 def set_possibly_dirty(self, filename): |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
168 """record that the current state of the file on disk is unknown""" |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
169 self[filename].set_possibly_dirty() |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
170 |
47974
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
171 def set_clean(self, filename, mode, size, mtime): |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
172 """mark a file as back to a clean state""" |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
173 entry = self[filename] |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
174 mtime = mtime & rangemask |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
175 size = size & rangemask |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
176 entry.set_clean(mode, size, mtime) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
177 self.copymap.pop(filename, None) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
178 self.nonnormalset.discard(filename) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
179 |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
180 def addfile( |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
181 self, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
182 f, |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
183 mode=0, |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
184 size=None, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
185 mtime=None, |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
186 added=False, |
47527
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
187 merged=False, |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
188 from_p2=False, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
189 possibly_dirty=False, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
190 ): |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
191 """Add a tracked file to the dirstate.""" |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
192 if added: |
47527
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
193 assert not merged |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
194 assert not possibly_dirty |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
195 assert not from_p2 |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
196 new_entry = DirstateItem.new_added() |
47983
ffde999a3ea9
dirstate: same logic as what we did for `_drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47974
diff
changeset
|
197 self.copymap.pop(f, None) |
47527
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
198 elif merged: |
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
199 assert not possibly_dirty |
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
200 assert not from_p2 |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
201 new_entry = DirstateItem.new_merged() |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
202 elif from_p2: |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
203 assert not possibly_dirty |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
204 new_entry = DirstateItem.new_from_p2() |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
205 elif possibly_dirty: |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
206 new_entry = DirstateItem.new_possibly_dirty() |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
207 else: |
47770
460e479be66e
typing: add several assertions to dirstatemap to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
47720
diff
changeset
|
208 assert size is not None |
460e479be66e
typing: add several assertions to dirstatemap to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
47720
diff
changeset
|
209 assert mtime is not None |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
210 size = size & rangemask |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
211 mtime = mtime & rangemask |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
212 new_entry = DirstateItem.new_normal(mode, size, mtime) |
47524
69a463a4f193
dirstate: no longer pass the `oldstate` value to the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47521
diff
changeset
|
213 old_entry = self.get(f) |
47687
e59bd6723f2f
dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47686
diff
changeset
|
214 self._dirs_incr(f, old_entry) |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
215 self._map[f] = new_entry |
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
216 if new_entry.dm_nonnormal: |
35080
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
217 self.nonnormalset.add(f) |
47907
bbae583333e9
dirstatemap: also discard item from sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47906
diff
changeset
|
218 else: |
bbae583333e9
dirstatemap: also discard item from sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47906
diff
changeset
|
219 self.nonnormalset.discard(f) |
47905
c0d6a59a7704
dirstate-item: add dedicated "legacy" constructor for `addfile` case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47904
diff
changeset
|
220 if new_entry.dm_otherparent: |
35080
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
221 self.otherparentset.add(f) |
47907
bbae583333e9
dirstatemap: also discard item from sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47906
diff
changeset
|
222 else: |
bbae583333e9
dirstatemap: also discard item from sets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47906
diff
changeset
|
223 self.otherparentset.discard(f) |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
224 |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
225 def reset_state( |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
226 self, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
227 filename, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
228 wc_tracked, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
229 p1_tracked, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
230 p2_tracked=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
231 merged=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
232 clean_p1=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
233 clean_p2=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
234 possibly_dirty=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
235 parentfiledata=None, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
236 ): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
237 """Set a entry to a given state, diregarding all previous state |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
238 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
239 This is to be used by the part of the dirstate API dedicated to |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
240 adjusting the dirstate after a update/merge. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
241 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
242 note: calling this might result to no entry existing at all if the |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
243 dirstate map does not see any point at having one for this file |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
244 anymore. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
245 """ |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
246 if merged and (clean_p1 or clean_p2): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
247 msg = b'`merged` argument incompatible with `clean_p1`/`clean_p2`' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
248 raise error.ProgrammingError(msg) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
249 # copy information are now outdated |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
250 # (maybe new information should be in directly passed to this function) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
251 self.copymap.pop(filename, None) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
252 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
253 if not (p1_tracked or p2_tracked or wc_tracked): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
254 self.dropfile(filename) |
47896
d5b54917eb92
dirstatemap: temporarily return early in `reset_state`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47894
diff
changeset
|
255 return |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
256 elif merged: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
257 # XXX might be merged and removed ? |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
258 entry = self.get(filename) |
47904
822c67420c77
dirstatemap: use the default code to handle "merged" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47903
diff
changeset
|
259 if entry is None or not entry.tracked: |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
260 # XXX mostly replicate dirstate.other parent. We should get |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
261 # the higher layer to pass us more reliable data where `merged` |
47904
822c67420c77
dirstatemap: use the default code to handle "merged" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47903
diff
changeset
|
262 # actually mean merged. Dropping this clause will show failure |
822c67420c77
dirstatemap: use the default code to handle "merged" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47903
diff
changeset
|
263 # in `test-graft.t` |
822c67420c77
dirstatemap: use the default code to handle "merged" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47903
diff
changeset
|
264 merged = False |
822c67420c77
dirstatemap: use the default code to handle "merged" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47903
diff
changeset
|
265 clean_p2 = True |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
266 elif not (p1_tracked or p2_tracked) and wc_tracked: |
47903
6816ae362ddd
dirstatemap: use the default code to handle "added" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47902
diff
changeset
|
267 pass # file is added, nothing special to adjust |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
268 elif (p1_tracked or p2_tracked) and not wc_tracked: |
47902
4cade5e944c2
dirstatemap: use the default code to handle "removed" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47901
diff
changeset
|
269 pass |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
270 elif clean_p2 and wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
271 if p1_tracked or self.get(filename) is not None: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
272 # XXX the `self.get` call is catching some case in |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
273 # `test-merge-remove.t` where the file is tracked in p1, the |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
274 # p1_tracked argument is False. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
275 # |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
276 # In addition, this seems to be a case where the file is marked |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
277 # as merged without actually being the result of a merge |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
278 # action. So thing are not ideal here. |
47901
3429f48d486d
dirstatemap: use the default code to handle "clean-p2" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47900
diff
changeset
|
279 merged = True |
3429f48d486d
dirstatemap: use the default code to handle "clean-p2" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47900
diff
changeset
|
280 clean_p2 = False |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
281 elif not p1_tracked and p2_tracked and wc_tracked: |
47900
40cf4b278f8f
dirstatemap: use the default code to handle "p2-tracked" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47899
diff
changeset
|
282 clean_p2 = True |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
283 elif possibly_dirty: |
47899
625b6ddb828c
dirstatemap: use the default code to handle "possibly_dirty" case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47898
diff
changeset
|
284 pass |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
285 elif wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
286 # this is a "normal" file |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
287 if parentfiledata is None: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
288 msg = b'failed to pass parentfiledata for a normal file: %s' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
289 msg %= filename |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
290 raise error.ProgrammingError(msg) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
291 else: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
292 assert False, 'unreachable' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
293 |
47897
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
294 old_entry = self._map.get(filename) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
295 self._dirs_incr(filename, old_entry) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
296 entry = DirstateItem( |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
297 wc_tracked=wc_tracked, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
298 p1_tracked=p1_tracked, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
299 p2_tracked=p2_tracked, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
300 merged=merged, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
301 clean_p1=clean_p1, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
302 clean_p2=clean_p2, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
303 possibly_dirty=possibly_dirty, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
304 parentfiledata=parentfiledata, |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
305 ) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
306 if entry.dm_nonnormal: |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
307 self.nonnormalset.add(filename) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
308 else: |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
309 self.nonnormalset.discard(filename) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
310 if entry.dm_otherparent: |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
311 self.otherparentset.add(filename) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
312 else: |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
313 self.otherparentset.discard(filename) |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
314 self._map[filename] = entry |
4f0ebf83e4dc
dirstatemap: conclude `reset_state` with logic using the new __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47896
diff
changeset
|
315 |
47990
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
316 def set_tracked(self, filename): |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
317 new = False |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
318 entry = self.get(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
319 if entry is None: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
320 self._dirs_incr(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
321 entry = DirstateItem( |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
322 p1_tracked=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
323 p2_tracked=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
324 wc_tracked=True, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
325 merged=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
326 clean_p1=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
327 clean_p2=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
328 possibly_dirty=False, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
329 parentfiledata=None, |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
330 ) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
331 self._map[filename] = entry |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
332 if entry.dm_nonnormal: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
333 self.nonnormalset.add(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
334 new = True |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
335 elif not entry.tracked: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
336 self._dirs_incr(filename, entry) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
337 entry.set_tracked() |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
338 new = True |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
339 else: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
340 # XXX This is probably overkill for more case, but we need this to |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
341 # fully replace the `normallookup` call with `set_tracked` one. |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
342 # Consider smoothing this in the future. |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
343 self.set_possibly_dirty(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
344 return new |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
345 |
47890
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
346 def set_untracked(self, f): |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
347 """Mark a file as no longer tracked in the dirstate map""" |
47972
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
348 entry = self.get(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
349 if entry is None: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
350 return False |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
351 else: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
352 self._dirs_decr(f, old_entry=entry, remove_variant=not entry.added) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
353 if not entry.merged: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
354 self.copymap.pop(f, None) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
355 if entry.added: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
356 self.nonnormalset.discard(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
357 self._map.pop(f, None) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
358 else: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
359 self.nonnormalset.add(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
360 if entry.from_p2: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
361 self.otherparentset.add(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
362 entry.set_untracked() |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
363 return True |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
364 |
47535
6025353c9c55
dirstate: no longer pass `oldstate` to the `dropfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47530
diff
changeset
|
365 def dropfile(self, f): |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
366 """ |
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
367 Remove a file from the dirstate. Returns True if the file was |
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
368 previously recorded. |
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
369 """ |
47535
6025353c9c55
dirstate: no longer pass `oldstate` to the `dropfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47530
diff
changeset
|
370 old_entry = self._map.pop(f, None) |
47688
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
371 self._dirs_decr(f, old_entry=old_entry) |
35080
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
372 self.nonnormalset.discard(f) |
47970
7ab99007fce5
dirstate: move the copymap drop inside dropfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47944
diff
changeset
|
373 self.copymap.pop(f, None) |
47688
b37ab6b5c438
dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47687
diff
changeset
|
374 return old_entry is not None |
35080
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
375 |
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
376 def clearambiguoustimes(self, files, now): |
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
377 for f in files: |
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
378 e = self.get(f) |
47542
b8013cb71ef3
dirstate-item: use the properties in dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47539
diff
changeset
|
379 if e is not None and e.need_delay(now): |
47668
724a77979b47
dirstatemap: use `set_possibly_dirty` in `clearambiguoustimes`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47542
diff
changeset
|
380 e.set_possibly_dirty() |
35080
19b75779b7c3
dirstate: move management of nonnormal sets into dirstate map
Mark Thomas <mbthomas@fb.com>
parents:
35079
diff
changeset
|
381 self.nonnormalset.add(f) |
35079
853b7c41d19c
dirstate: add explicit methods for modifying dirstate
Mark Thomas <mbthomas@fb.com>
parents:
35078
diff
changeset
|
382 |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
383 def nonnormalentries(self): |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
384 '''Compute the nonnormal dirstate entries from the dmap''' |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
385 try: |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
386 return parsers.nonnormalotherparententries(self._map) |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
387 except AttributeError: |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
388 nonnorm = set() |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
389 otherparent = set() |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43090
diff
changeset
|
390 for fname, e in pycompat.iteritems(self._map): |
47685
265cdfaad372
dirstate-item: introduce a `dm_nonnormal` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47683
diff
changeset
|
391 if e.dm_nonnormal: |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
392 nonnorm.add(fname) |
47542
b8013cb71ef3
dirstate-item: use the properties in dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47539
diff
changeset
|
393 if e.from_p2: |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
394 otherparent.add(fname) |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
395 return nonnorm, otherparent |
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
396 |
34676
bfddc3d678ae
dirstate: remove _filefoldmap property cache
Durham Goode <durham@fb.com>
parents:
34675
diff
changeset
|
397 @propertycache |
34334
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
398 def filefoldmap(self): |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
399 """Returns a dictionary mapping normalized case paths to their |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
400 non-normalized versions. |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
401 """ |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
402 try: |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
403 makefilefoldmap = parsers.make_file_foldmap |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
404 except AttributeError: |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
405 pass |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
406 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
407 return makefilefoldmap( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
408 self._map, util.normcasespec, util.normcasefallback |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
409 ) |
34334
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
410 |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
411 f = {} |
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
412 normcase = util.normcase |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43090
diff
changeset
|
413 for name, s in pycompat.iteritems(self._map): |
47542
b8013cb71ef3
dirstate-item: use the properties in dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47539
diff
changeset
|
414 if not s.removed: |
34334
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
415 f[normcase(name)] = name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 f[b'.'] = b'.' # prevents useless util.fspath() invocation |
34334
d8b35920b7b1
dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34333
diff
changeset
|
417 return f |
34335
af9722412ac3
dirstate: move _dirs to dirstatemap
Durham Goode <durham@fb.com>
parents:
34334
diff
changeset
|
418 |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
419 def hastrackeddir(self, d): |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
420 """ |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
421 Returns True if the dirstate contains a tracked (not removed) file |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
422 in this directory. |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
423 """ |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
424 return d in self._dirs |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
425 |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
426 def hasdir(self, d): |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
427 """ |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
428 Returns True if the dirstate contains a file (tracked or removed) |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
429 in this directory. |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
430 """ |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
431 return d in self._alldirs |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
432 |
34677
014bd2a555c8
dirstate: remove _dirs property cache
Durham Goode <durham@fb.com>
parents:
34676
diff
changeset
|
433 @propertycache |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
434 def _dirs(self): |
47944
e02f9af7aed1
pathutil: replace the `skip` argument of `dirs` with a boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47907
diff
changeset
|
435 return pathutil.dirs(self._map, only_tracked=True) |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
436 |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
437 @propertycache |
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
438 def _alldirs(self): |
43523
c21aca51b392
utils: move the `dirs` definition in pathutil (API)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
439 return pathutil.dirs(self._map) |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
440 |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
441 def _opendirstatefile(self): |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
442 fp, mode = txnutil.trypending(self._root, self._opener, self._filename) |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
443 if self._pendingmode is not None and self._pendingmode != mode: |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
444 fp.close() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
445 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
446 _(b'working directory state may be changed parallelly') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
447 ) |
34337
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
448 self._pendingmode = mode |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
449 return fp |
c36c3fa7d35b
dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com>
parents:
34336
diff
changeset
|
450 |
34338
0c3e3810cdb6
dirstate: move parent reading to the dirstatemap class
Durham Goode <durham@fb.com>
parents:
34337
diff
changeset
|
451 def parents(self): |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
452 if not self._parents: |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
453 try: |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
454 fp = self._opendirstatefile() |
45219
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
455 st = fp.read(2 * self._nodelen) |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
456 fp.close() |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
457 except IOError as err: |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
458 if err.errno != errno.ENOENT: |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
459 raise |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
460 # File doesn't exist, so the current state is empty |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 st = b'' |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
462 |
34338
0c3e3810cdb6
dirstate: move parent reading to the dirstatemap class
Durham Goode <durham@fb.com>
parents:
34337
diff
changeset
|
463 l = len(st) |
45219
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
464 if l == self._nodelen * 2: |
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
465 self._parents = ( |
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
466 st[: self._nodelen], |
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
467 st[self._nodelen : 2 * self._nodelen], |
4f0e03d980f3
dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de>
parents:
44852
diff
changeset
|
468 ) |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
469 elif l == 0: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
470 self._parents = ( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
471 self._nodeconstants.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
472 self._nodeconstants.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
473 ) |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
474 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
475 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
476 _(b'working directory state appears damaged!') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
477 ) |
34339
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
478 |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
479 return self._parents |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
480 |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
481 def setparents(self, p1, p2): |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
482 self._parents = (p1, p2) |
ec769bba34d3
dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com>
parents:
34338
diff
changeset
|
483 self._dirtyparents = True |
34672
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
484 |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
485 def read(self): |
34675
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
486 # ignore HG_PENDING because identity is used only for writing |
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
487 self.identity = util.filestat.frompath( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
488 self._opener.join(self._filename) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
489 ) |
34675
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
490 |
34672
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
491 try: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
492 fp = self._opendirstatefile() |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
493 try: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
494 st = fp.read() |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
495 finally: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
496 fp.close() |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
497 except IOError as err: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
498 if err.errno != errno.ENOENT: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
499 raise |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
500 return |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
501 if not st: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
502 return |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
503 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
504 if util.safehasattr(parsers, b'dict_new_presized'): |
34672
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
505 # Make an estimate of the number of files in the dirstate based on |
45243
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
506 # its size. This trades wasting some memory for avoiding costly |
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
507 # resizes. Each entry have a prefix of 17 bytes followed by one or |
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
508 # two path names. Studies on various large-scale real-world repositories |
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
509 # found 54 bytes a reasonable upper limit for the average path names. |
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
510 # Copy entries are ignored for the sake of this estimate. |
ad7006830106
dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de>
parents:
45241
diff
changeset
|
511 self._map = parsers.dict_new_presized(len(st) // 71) |
34672
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
512 |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
513 # Python's garbage collector triggers a GC each time a certain number |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
514 # of container objects (the number being defined by |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
515 # gc.get_threshold()) are allocated. parse_dirstate creates a tuple |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
516 # for each file in the dirstate. The C version then immediately marks |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
517 # them as not to be tracked by the collector. However, this has no |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
518 # effect on when GCs are triggered, only on what objects the GC looks |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
519 # into. This means that O(number of files) GCs are unavoidable. |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
520 # Depending on when in the process's lifetime the dirstate is parsed, |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
521 # this can get very expensive. As a workaround, disable GC while |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
522 # parsing the dirstate. |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
523 # |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
524 # (we cannot decorate the function directly since it is in a C module) |
42747
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42456
diff
changeset
|
525 parse_dirstate = util.nogc(parsers.parse_dirstate) |
34672
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
526 p = parse_dirstate(self._map, self.copymap, st) |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
527 if not self._dirtyparents: |
e159f217230e
dirstate: move _read into dirstatemap
Durham Goode <durham@fb.com>
parents:
34480
diff
changeset
|
528 self.setparents(*p) |
34673
e2214632c3a2
dirstate: move write into dirstatemap
Durham Goode <durham@fb.com>
parents:
34672
diff
changeset
|
529 |
34935
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
530 # Avoid excess attribute lookups by fast pathing certain checks |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
531 self.__contains__ = self._map.__contains__ |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
532 self.__getitem__ = self._map.__getitem__ |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
533 self.get = self._map.get |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
534 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
535 def write(self, _tr, st, now): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
536 st.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
537 parsers.pack_dirstate(self._map, self.copymap, self.parents(), now) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
538 ) |
34673
e2214632c3a2
dirstate: move write into dirstatemap
Durham Goode <durham@fb.com>
parents:
34672
diff
changeset
|
539 st.close() |
e2214632c3a2
dirstate: move write into dirstatemap
Durham Goode <durham@fb.com>
parents:
34672
diff
changeset
|
540 self._dirtyparents = False |
34674
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
541 self.nonnormalset, self.otherparentset = self.nonnormalentries() |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
542 |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
543 @propertycache |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
544 def nonnormalset(self): |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
545 nonnorm, otherparents = self.nonnormalentries() |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
546 self.otherparentset = otherparents |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
547 return nonnorm |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
548 |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
549 @propertycache |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
550 def otherparentset(self): |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
551 nonnorm, otherparents = self.nonnormalentries() |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
552 self.nonnormalset = nonnorm |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
553 return otherparents |
60927b19ed65
dirstate: move nonnormal and otherparent sets to dirstatemap
Durham Goode <durham@fb.com>
parents:
34673
diff
changeset
|
554 |
47094
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
555 def non_normal_or_other_parent_paths(self): |
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
556 return self.nonnormalset.union(self.otherparentset) |
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
557 |
34675
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
558 @propertycache |
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
559 def identity(self): |
34934
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
560 self._map |
34675
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
561 return self.identity |
c6ef9a2498a5
dirstate: move identity to dirstatemap
Durham Goode <durham@fb.com>
parents:
34674
diff
changeset
|
562 |
34678
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
563 @propertycache |
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
564 def dirfoldmap(self): |
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
565 f = {} |
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
566 normcase = util.normcase |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
35083
diff
changeset
|
567 for name in self._dirs: |
34678
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
568 f[normcase(name)] = name |
e8a89ed7ce96
dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents:
34677
diff
changeset
|
569 return f |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
570 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
571 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
572 if rustmod is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
573 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
574 class dirstatemap(object): |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
575 def __init__(self, ui, opener, root, nodeconstants, use_dirstate_v2): |
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
576 self._use_dirstate_v2 = use_dirstate_v2 |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
577 self._nodeconstants = nodeconstants |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
578 self._ui = ui |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
579 self._opener = opener |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
580 self._root = root |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
581 self._filename = b'dirstate' |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
582 self._nodelen = 20 # Also update Rust code when changing this! |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
583 self._parents = None |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
584 self._dirtyparents = False |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
585 self._docket = None |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
586 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
587 # for consistent view between _pl() and _read() invocations |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
588 self._pendingmode = None |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
589 |
47320
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
590 self._use_dirstate_tree = self._ui.configbool( |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
591 b"experimental", |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
592 b"dirstate-tree.in-memory", |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
593 False, |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
594 ) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47280
diff
changeset
|
595 |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
596 def addfile( |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
597 self, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
598 f, |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
599 mode=0, |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
600 size=None, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
601 mtime=None, |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
602 added=False, |
47527
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
603 merged=False, |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
604 from_p2=False, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
605 possibly_dirty=False, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
606 ): |
47983
ffde999a3ea9
dirstate: same logic as what we did for `_drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47974
diff
changeset
|
607 ret = self._rustmap.addfile( |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
608 f, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
609 mode, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
610 size, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
611 mtime, |
47525
fe4641cf9b72
dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47524
diff
changeset
|
612 added, |
47527
c6b91a9c242a
dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47525
diff
changeset
|
613 merged, |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
614 from_p2, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
615 possibly_dirty, |
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
616 ) |
47983
ffde999a3ea9
dirstate: same logic as what we did for `_drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47974
diff
changeset
|
617 if added: |
ffde999a3ea9
dirstate: same logic as what we did for `_drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47974
diff
changeset
|
618 self.copymap.pop(f, None) |
ffde999a3ea9
dirstate: same logic as what we did for `_drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47974
diff
changeset
|
619 return ret |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
620 |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
621 def reset_state( |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
622 self, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
623 filename, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
624 wc_tracked, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
625 p1_tracked, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
626 p2_tracked=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
627 merged=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
628 clean_p1=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
629 clean_p2=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
630 possibly_dirty=False, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
631 parentfiledata=None, |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
632 ): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
633 """Set a entry to a given state, disregarding all previous state |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
634 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
635 This is to be used by the part of the dirstate API dedicated to |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
636 adjusting the dirstate after a update/merge. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
637 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
638 note: calling this might result to no entry existing at all if the |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
639 dirstate map does not see any point at having one for this file |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
640 anymore. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
641 """ |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
642 if merged and (clean_p1 or clean_p2): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
643 msg = ( |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
644 b'`merged` argument incompatible with `clean_p1`/`clean_p2`' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
645 ) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
646 raise error.ProgrammingError(msg) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
647 # copy information are now outdated |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
648 # (maybe new information should be in directly passed to this function) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
649 self.copymap.pop(filename, None) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
650 |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
651 if not (p1_tracked or p2_tracked or wc_tracked): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
652 self.dropfile(filename) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
653 elif merged: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
654 # XXX might be merged and removed ? |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
655 entry = self.get(filename) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
656 if entry is not None and entry.tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
657 # XXX mostly replicate dirstate.other parent. We should get |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
658 # the higher layer to pass us more reliable data where `merged` |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
659 # actually mean merged. Dropping the else clause will show |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
660 # failure in `test-graft.t` |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
661 self.addfile(filename, merged=True) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
662 else: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
663 self.addfile(filename, from_p2=True) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
664 elif not (p1_tracked or p2_tracked) and wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
665 self.addfile( |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
666 filename, added=True, possibly_dirty=possibly_dirty |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
667 ) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
668 elif (p1_tracked or p2_tracked) and not wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
669 # XXX might be merged and removed ? |
47894
226c7dbeea11
rust-dirstatemap: temporarily use `from_v1_data` in `addfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47893
diff
changeset
|
670 self[filename] = DirstateItem.from_v1_data(b'r', 0, 0, 0) |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
671 self.nonnormalset.add(filename) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
672 elif clean_p2 and wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
673 if p1_tracked or self.get(filename) is not None: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
674 # XXX the `self.get` call is catching some case in |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
675 # `test-merge-remove.t` where the file is tracked in p1, the |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
676 # p1_tracked argument is False. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
677 # |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
678 # In addition, this seems to be a case where the file is marked |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
679 # as merged without actually being the result of a merge |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
680 # action. So thing are not ideal here. |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
681 self.addfile(filename, merged=True) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
682 else: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
683 self.addfile(filename, from_p2=True) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
684 elif not p1_tracked and p2_tracked and wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
685 self.addfile( |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
686 filename, from_p2=True, possibly_dirty=possibly_dirty |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
687 ) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
688 elif possibly_dirty: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
689 self.addfile(filename, possibly_dirty=possibly_dirty) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
690 elif wc_tracked: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
691 # this is a "normal" file |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
692 if parentfiledata is None: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
693 msg = b'failed to pass parentfiledata for a normal file: %s' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
694 msg %= filename |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
695 raise error.ProgrammingError(msg) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
696 mode, size, mtime = parentfiledata |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
697 self.addfile(filename, mode=mode, size=size, mtime=mtime) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
698 self.nonnormalset.discard(filename) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
699 else: |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
700 assert False, 'unreachable' |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
701 |
47990
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
702 def set_tracked(self, filename): |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
703 new = False |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
704 entry = self.get(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
705 if entry is None: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
706 self.addfile(filename, added=True) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
707 new = True |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
708 elif not entry.tracked: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
709 entry.set_tracked() |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
710 self._rustmap.set_v1(filename, entry) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
711 new = True |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
712 else: |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
713 # XXX This is probably overkill for more case, but we need this to |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
714 # fully replace the `normallookup` call with `set_tracked` one. |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
715 # Consider smoothing this in the future. |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
716 self.set_possibly_dirty(filename) |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
717 return new |
0d2a404f1932
dirstate: introduce a set_tracked method on "map" and "item"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47983
diff
changeset
|
718 |
47890
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
719 def set_untracked(self, f): |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
720 """Mark a file as no longer tracked in the dirstate map""" |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
721 # in merge is only trigger more logic, so it "fine" to pass it. |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
722 # |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
723 # the inner rust dirstate map code need to be adjusted once the API |
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
724 # for dirstate/dirstatemap/DirstateItem is a bit more settled |
47972
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
725 entry = self.get(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
726 if entry is None: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
727 return False |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
728 else: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
729 if entry.added: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
730 self._rustmap.copymap().pop(f, None) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
731 self._rustmap.dropfile(f) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
732 else: |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
733 self._rustmap.removefile(f, in_merge=True) |
5a6c1ef4bcac
dirstate: make dirstatemap.set_untracked deal with added file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47970
diff
changeset
|
734 return True |
47890
3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47770
diff
changeset
|
735 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
736 def removefile(self, *args, **kwargs): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
737 return self._rustmap.removefile(*args, **kwargs) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
738 |
47970
7ab99007fce5
dirstate: move the copymap drop inside dropfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47944
diff
changeset
|
739 def dropfile(self, f, *args, **kwargs): |
7ab99007fce5
dirstate: move the copymap drop inside dropfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47944
diff
changeset
|
740 self._rustmap.copymap().pop(f, None) |
7ab99007fce5
dirstate: move the copymap drop inside dropfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47944
diff
changeset
|
741 return self._rustmap.dropfile(f, *args, **kwargs) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
742 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
743 def clearambiguoustimes(self, *args, **kwargs): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
744 return self._rustmap.clearambiguoustimes(*args, **kwargs) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
745 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
746 def nonnormalentries(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
747 return self._rustmap.nonnormalentries() |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
748 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
749 def get(self, *args, **kwargs): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
750 return self._rustmap.get(*args, **kwargs) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
751 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
752 @property |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
753 def copymap(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
754 return self._rustmap.copymap() |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
755 |
47351
3b9914b28133
dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents:
47350
diff
changeset
|
756 def directories(self): |
3b9914b28133
dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents:
47350
diff
changeset
|
757 return self._rustmap.directories() |
3b9914b28133
dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents:
47350
diff
changeset
|
758 |
47683
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
759 def debug_iter(self): |
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
760 return self._rustmap.debug_iter() |
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
761 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
762 def preload(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
763 self._rustmap |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
764 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
765 def clear(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
766 self._rustmap.clear() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
767 self.setparents( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
768 self._nodeconstants.nullid, self._nodeconstants.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
769 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
770 util.clearcachedproperty(self, b"_dirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
771 util.clearcachedproperty(self, b"_alldirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
772 util.clearcachedproperty(self, b"dirfoldmap") |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
773 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
774 def items(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
775 return self._rustmap.items() |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
776 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
777 def keys(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
778 return iter(self._rustmap) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
779 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
780 def __contains__(self, key): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
781 return key in self._rustmap |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
782 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
783 def __getitem__(self, item): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
784 return self._rustmap[item] |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
785 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
786 def __len__(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
787 return len(self._rustmap) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
788 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
789 def __iter__(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
790 return iter(self._rustmap) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
791 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
792 # forward for python2,3 compat |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
793 iteritems = items |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
794 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
795 def _opendirstatefile(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
796 fp, mode = txnutil.trypending( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
797 self._root, self._opener, self._filename |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
798 ) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
799 if self._pendingmode is not None and self._pendingmode != mode: |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
800 fp.close() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
801 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
802 _(b'working directory state may be changed parallelly') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
803 ) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
804 self._pendingmode = mode |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
805 return fp |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
806 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
807 def _readdirstatefile(self, size=-1): |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
808 try: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
809 with self._opendirstatefile() as fp: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
810 return fp.read(size) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
811 except IOError as err: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
812 if err.errno != errno.ENOENT: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
813 raise |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
814 # File doesn't exist, so the current state is empty |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
815 return b'' |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
816 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
817 def setparents(self, p1, p2): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
818 self._parents = (p1, p2) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
819 self._dirtyparents = True |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
820 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
821 def parents(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
822 if not self._parents: |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
823 if self._use_dirstate_v2: |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
824 self._parents = self.docket.parents |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
825 else: |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
826 read_len = self._nodelen * 2 |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
827 st = self._readdirstatefile(read_len) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
828 l = len(st) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
829 if l == read_len: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
830 self._parents = ( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
831 st[: self._nodelen], |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
832 st[self._nodelen : 2 * self._nodelen], |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
833 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
834 elif l == 0: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
835 self._parents = ( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
836 self._nodeconstants.nullid, |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
837 self._nodeconstants.nullid, |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
838 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
839 else: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
840 raise error.Abort( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
841 _(b'working directory state appears damaged!') |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
842 ) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
843 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
844 return self._parents |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
845 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
846 @property |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
847 def docket(self): |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
848 if not self._docket: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
849 if not self._use_dirstate_v2: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
850 raise error.ProgrammingError( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
851 b'dirstate only has a docket in v2 format' |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
852 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
853 self._docket = docketmod.DirstateDocket.parse( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
854 self._readdirstatefile(), self._nodeconstants |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
855 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
856 return self._docket |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
857 |
47122
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
858 @propertycache |
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
859 def _rustmap(self): |
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
860 """ |
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
861 Fills the Dirstatemap when called. |
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
862 """ |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
863 # ignore HG_PENDING because identity is used only for writing |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
864 self.identity = util.filestat.frompath( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
865 self._opener.join(self._filename) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
866 ) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
867 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
868 if self._use_dirstate_v2: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
869 if self.docket.uuid: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
870 # TODO: use mmap when possible |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
871 data = self._opener.read(self.docket.data_filename()) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
872 else: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
873 data = b'' |
47675
48aec076b8fb
dirstate-v2: Enforce data size read from the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47674
diff
changeset
|
874 self._rustmap = rustmod.DirstateMap.new_v2( |
47682
78f7f0d490ee
dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47678
diff
changeset
|
875 data, self.docket.data_size, self.docket.tree_metadata |
47675
48aec076b8fb
dirstate-v2: Enforce data size read from the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47674
diff
changeset
|
876 ) |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
877 parents = self.docket.parents |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
878 else: |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
879 self._rustmap, parents = rustmod.DirstateMap.new_v1( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
880 self._use_dirstate_tree, self._readdirstatefile() |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
881 ) |
47122
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
882 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
883 if parents and not self._dirtyparents: |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
884 self.setparents(*parents) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
885 |
43280
5d4046594d6f
rust-dirstatemap: remove additional lookups in dirstatemap
Raphaël Gomès <rgomes@octobus.net>
parents:
43274
diff
changeset
|
886 self.__contains__ = self._rustmap.__contains__ |
5d4046594d6f
rust-dirstatemap: remove additional lookups in dirstatemap
Raphaël Gomès <rgomes@octobus.net>
parents:
43274
diff
changeset
|
887 self.__getitem__ = self._rustmap.__getitem__ |
5d4046594d6f
rust-dirstatemap: remove additional lookups in dirstatemap
Raphaël Gomès <rgomes@octobus.net>
parents:
43274
diff
changeset
|
888 self.get = self._rustmap.get |
47122
9aba0cde0ed9
rust: Read dirstate from disk in DirstateMap constructor
Simon Sapin <simon.sapin@octobus.net>
parents:
47121
diff
changeset
|
889 return self._rustmap |
43280
5d4046594d6f
rust-dirstatemap: remove additional lookups in dirstatemap
Raphaël Gomès <rgomes@octobus.net>
parents:
43274
diff
changeset
|
890 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
891 def write(self, tr, st, now): |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
892 if not self._use_dirstate_v2: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
893 p1, p2 = self.parents() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
894 packed = self._rustmap.write_v1(p1, p2, now) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
895 st.write(packed) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
896 st.close() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
897 self._dirtyparents = False |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
898 return |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
899 |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
900 # We can only append to an existing data file if there is one |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
901 can_append = self.docket.uuid is not None |
47682
78f7f0d490ee
dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47678
diff
changeset
|
902 packed, meta, append = self._rustmap.write_v2(now, can_append) |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
903 if append: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
904 docket = self.docket |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
905 data_filename = docket.data_filename() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
906 if tr: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
907 tr.add(data_filename, docket.data_size) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
908 with self._opener(data_filename, b'r+b') as fp: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
909 fp.seek(docket.data_size) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
910 assert fp.tell() == docket.data_size |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
911 written = fp.write(packed) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
912 if written is not None: # py2 may return None |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
913 assert written == len(packed), (written, len(packed)) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
914 docket.data_size += len(packed) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
915 docket.parents = self.parents() |
47682
78f7f0d490ee
dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47678
diff
changeset
|
916 docket.tree_metadata = meta |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
917 st.write(docket.serialize()) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
918 st.close() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
919 else: |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
920 old_docket = self.docket |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
921 new_docket = docketmod.DirstateDocket.with_new_uuid( |
47682
78f7f0d490ee
dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47678
diff
changeset
|
922 self.parents(), len(packed), meta |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
923 ) |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
924 data_filename = new_docket.data_filename() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
925 if tr: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
926 tr.add(data_filename, 0) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
927 self._opener.write(data_filename, packed) |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
928 # Write the new docket after the new data file has been |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
929 # written. Because `st` was opened with `atomictemp=True`, |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
930 # the actual `.hg/dirstate` file is only affected on close. |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
931 st.write(new_docket.serialize()) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
932 st.close() |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
933 # Remove the old data file after the new docket pointing to |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
934 # the new data file was written. |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
935 if old_docket.uuid: |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
936 data_filename = old_docket.data_filename() |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
937 unlink = lambda _tr=None: self._opener.unlink(data_filename) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
938 if tr: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
939 category = b"dirstate-v2-clean-" + old_docket.uuid |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
940 tr.addpostclose(category, unlink) |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
941 else: |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
942 unlink() |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
943 self._docket = new_docket |
47678
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
944 # Reload from the newly-written file |
065e61628980
dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents:
47675
diff
changeset
|
945 util.clearcachedproperty(self, b"_rustmap") |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
946 self._dirtyparents = False |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
947 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
948 @propertycache |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
949 def filefoldmap(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
950 """Returns a dictionary mapping normalized case paths to their |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
951 non-normalized versions. |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
952 """ |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
953 return self._rustmap.filefoldmapasdict() |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
954 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
955 def hastrackeddir(self, d): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
956 return self._rustmap.hastrackeddir(d) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
957 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
958 def hasdir(self, d): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
959 return self._rustmap.hasdir(d) |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
960 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
961 @propertycache |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
962 def identity(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
963 self._rustmap |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
964 return self.identity |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
965 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
966 @property |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
967 def nonnormalset(self): |
44297
cf1f8660e568
rust-dirstatemap: add `NonNormalEntries` class
Raphaël Gomès <rgomes@octobus.net>
parents:
44227
diff
changeset
|
968 nonnorm = self._rustmap.non_normal_entries() |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
969 return nonnorm |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
970 |
44227
7f5410dfc8a6
rust-dirstatemap: add missing @propertycache
Raphaël Gomès <rgomes@octobus.net>
parents:
44078
diff
changeset
|
971 @propertycache |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
972 def otherparentset(self): |
44297
cf1f8660e568
rust-dirstatemap: add `NonNormalEntries` class
Raphaël Gomès <rgomes@octobus.net>
parents:
44227
diff
changeset
|
973 otherparents = self._rustmap.other_parent_entries() |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
974 return otherparents |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
975 |
47094
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
976 def non_normal_or_other_parent_paths(self): |
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
977 return self._rustmap.non_normal_or_other_parent_paths() |
e061a1df32a8
dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents:
47012
diff
changeset
|
978 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
979 @propertycache |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
980 def dirfoldmap(self): |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
981 f = {} |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
982 normcase = util.normcase |
47683
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
983 for name in self._rustmap.tracked_dirs(): |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
984 f[normcase(name)] = name |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
985 return f |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
986 |
47720
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
987 def set_possibly_dirty(self, filename): |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
988 """record that the current state of the file on disk is unknown""" |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
989 entry = self[filename] |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
990 entry.set_possibly_dirty() |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
991 self._rustmap.set_v1(filename, entry) |
b0314d8deee1
dirstate: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47692
diff
changeset
|
992 |
47974
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
993 def set_clean(self, filename, mode, size, mtime): |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
994 """mark a file as back to a clean state""" |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
995 entry = self[filename] |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
996 mtime = mtime & rangemask |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
997 size = size & rangemask |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
998 entry.set_clean(mode, size, mtime) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
999 self._rustmap.set_v1(filename, entry) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
1000 self._rustmap.copymap().pop(filename, None) |
4e6f27230aee
dirstate: introduce a `set_clean` method on dirstate's map and items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47972
diff
changeset
|
1001 |
47692
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
1002 def __setitem__(self, key, value): |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
1003 assert isinstance(value, DirstateItem) |
e5fb14a07866
dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47689
diff
changeset
|
1004 self._rustmap.set_v1(key, value) |