Mercurial > hg
annotate mercurial/dirstatemap.py @ 51801:62b25293b620 default tip
typing: correct a type hint in `mercurial.manifest`
Obvious typo that was flagged by PyCharm.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 14 Aug 2024 03:25:16 -0400 |
parents | f3b34386d3e0 |
children |
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 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
7 from typing import ( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
8 Optional, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
9 TYPE_CHECKING, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
10 ) |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
11 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
12 from .i18n import _ |
43239
6fcdcea2b03a
dirstate: add some traces on listdir calls
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
13 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
14 from . import ( |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
15 error, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
16 pathutil, |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
17 policy, |
50228
fc8e37c380d3
dirstate: add a synchronisation point before doing a full dirstate read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50222
diff
changeset
|
18 testing, |
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
|
19 txnutil, |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
20 typelib, |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
21 util, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
22 ) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
23 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
24 from .dirstateutils import ( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
25 docket as docketmod, |
48221
a32a96079e2d
dirstate-v2: initial Python parser
Simon Sapin <simon.sapin@octobus.net>
parents:
48220
diff
changeset
|
26 v2, |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
27 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
28 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
29 if TYPE_CHECKING: |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
30 from . import ( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
31 ui as uimod, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
32 ) |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
33 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
34 parsers = policy.importmod('parsers') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
35 rustmod = policy.importrust('dirstate') |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
36 |
8261
0fe1f57ac2bd
dirstate: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8226
diff
changeset
|
37 propertycache = util.propertycache |
16201
fb7c4c14223f
dirstate: filecacheify _branch
Idan Kamara <idankk86@gmail.com>
parents:
16200
diff
changeset
|
38 |
48044
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
39 if rustmod is None: |
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
40 DirstateItem = parsers.DirstateItem |
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
41 else: |
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
42 DirstateItem = rustmod.DirstateItem |
21808
7537e57f5dbd
dirstate: add dirstatetuple to create dirstate values
Siddharth Agarwal <sid0@fb.com>
parents:
21116
diff
changeset
|
43 |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
44 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
|
45 |
50221
1891086f6c7f
dirstate: use more than a bool to control append behavior
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50097
diff
changeset
|
46 WRITE_MODE_AUTO = 0 |
1891086f6c7f
dirstate: use more than a bool to control append behavior
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50097
diff
changeset
|
47 WRITE_MODE_FORCE_NEW = 1 |
50222
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
48 WRITE_MODE_FORCE_APPEND = 2 |
50221
1891086f6c7f
dirstate: use more than a bool to control append behavior
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50097
diff
changeset
|
49 |
47482
cb29484eaade
dirstate: introduce a symbolic constant for the FROM_P2 marker
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47481
diff
changeset
|
50 |
50237
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
51 V2_MAX_READ_ATTEMPTS = 5 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
52 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
53 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
54 class _dirstatemapcommon: |
48119
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
55 """ |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
56 Methods that are identical for both implementations of the dirstatemap |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
57 class, with and without Rust extensions enabled. |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
58 """ |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
59 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
60 _use_dirstate_v2: bool |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
61 _nodeconstants: typelib.NodeConstants |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
62 _ui: "uimod.ui" |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
63 _root: bytes |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
64 _filename: bytes |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
65 _nodelen: int |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
66 _dirtyparents: bool |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
67 _docket: Optional["docketmod.DirstateDocket"] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
68 _write_mode: int |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
69 _pendingmode: Optional[bool] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
70 identity: Optional[typelib.CacheStat] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
71 |
48122
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
72 # please pytype |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
73 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
74 _map = None |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
75 copymap = None |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
76 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
77 def __init__( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
78 self, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
79 ui: "uimod.ui", |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
80 opener, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
81 root: bytes, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
82 nodeconstants: typelib.NodeConstants, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
83 use_dirstate_v2: bool, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
84 ) -> None: |
48120
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
85 self._use_dirstate_v2 = use_dirstate_v2 |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
86 self._nodeconstants = nodeconstants |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
87 self._ui = ui |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
88 self._opener = opener |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
89 self._root = root |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
90 self._filename = b'dirstate' |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
91 self._nodelen = 20 # Also update Rust code when changing this! |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
92 self._parents = None |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
93 self._dirtyparents = False |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
94 self._docket = None |
50222
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
95 write_mode = ui.config(b"devel", b"dirstate.v2.data_update_mode") |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
96 if write_mode == b"auto": |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
97 self._write_mode = WRITE_MODE_AUTO |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
98 elif write_mode == b"force-append": |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
99 self._write_mode = WRITE_MODE_FORCE_APPEND |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
100 elif write_mode == b"force-new": |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
101 self._write_mode = WRITE_MODE_FORCE_NEW |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
102 else: |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
103 # unknown value, fallback to default |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
104 self._write_mode = WRITE_MODE_AUTO |
48120
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
105 |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
106 # for consistent view between _pl() and _read() invocations |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
107 self._pendingmode = None |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
108 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
109 def _set_identity(self) -> None: |
50126
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
110 self.identity = self._get_current_identity() |
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
111 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
112 def _get_current_identity(self) -> Optional[typelib.CacheStat]: |
50126
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
113 try: |
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
114 return util.cachestat(self._opener.join(self._filename)) |
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
115 except FileNotFoundError: |
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
116 return None |
85746485a4dd
dirstate: factor the identity getting/setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50125
diff
changeset
|
117 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
118 def may_need_refresh(self) -> bool: |
50128
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
119 if 'identity' not in vars(self): |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
120 # no existing identity, we need a refresh |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
121 return True |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
122 if self.identity is None: |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
123 return True |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
124 if not self.identity.cacheable(): |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
125 # We cannot trust the entry |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
126 # XXX this is a problem on windows, NFS, or other inode less system |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
127 return True |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
128 current_identity = self._get_current_identity() |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
129 if current_identity is None: |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
130 return True |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
131 if not current_identity.cacheable(): |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
132 # We cannot trust the entry |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
133 # XXX this is a problem on windows, NFS, or other inode less system |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
134 return True |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50126
diff
changeset
|
135 return current_identity != self.identity |
50241
342c3c4640b7
dirstate: factor the identity setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50238
diff
changeset
|
136 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
137 def preload(self) -> None: |
48122
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
138 """Loads the underlying data, if it's not already loaded""" |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
139 self._map |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
140 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
141 def get(self, key, default=None): |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
142 return self._map.get(key, default) |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
143 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
144 def __len__(self): |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
145 return len(self._map) |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
146 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
147 def __iter__(self): |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
148 return iter(self._map) |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
149 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
150 def __contains__(self, key): |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
151 return key in self._map |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
152 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
153 def __getitem__(self, item): |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
154 return self._map[item] |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
155 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
156 ### disk interaction |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
157 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
158 def _opendirstatefile(self): |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
159 fp, mode = txnutil.trypending(self._root, self._opener, self._filename) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
160 if self._pendingmode is not None and self._pendingmode != mode: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
161 fp.close() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
162 raise error.Abort( |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
163 _(b'working directory state may be changed parallelly') |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
164 ) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
165 self._pendingmode = mode |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
166 return fp |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
167 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
168 def _readdirstatefile(self, size: int = -1) -> bytes: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
169 try: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
170 with self._opendirstatefile() as fp: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
171 return fp.read(size) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49120
diff
changeset
|
172 except FileNotFoundError: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
173 # File doesn't exist, so the current state is empty |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
174 return b'' |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
175 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
176 @property |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
177 def docket(self) -> "docketmod.DirstateDocket": |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
178 if not self._docket: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
179 if not self._use_dirstate_v2: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
180 raise error.ProgrammingError( |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
181 b'dirstate only has a docket in v2 format' |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
182 ) |
50242
379a78001d8e
dirstate: set identity whenever we read the dirstate's v2 docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
183 self._set_identity() |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
184 data = self._readdirstatefile() |
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
185 if data == b'' or data.startswith(docketmod.V2_FORMAT_MARKER): |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
186 self._docket = docketmod.DirstateDocket.parse( |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
187 data, self._nodeconstants |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
188 ) |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
189 else: |
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
190 raise error.CorruptedDirstate(b"dirstate is not in v2 format") |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
191 return self._docket |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
192 |
50236
53f196622699
dirstate: abstract the reading of the data file in v2 in a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50234
diff
changeset
|
193 def _read_v2_data(self): |
50237
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
194 data = None |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
195 attempts = 0 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
196 while attempts < V2_MAX_READ_ATTEMPTS: |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
197 attempts += 1 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
198 try: |
50238
c9066fc609ef
dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50237
diff
changeset
|
199 # TODO: use mmap when possible |
50237
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
200 data = self._opener.read(self.docket.data_filename()) |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
201 except FileNotFoundError: |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
202 # read race detected between docket and data file |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
203 # reload the docket and retry |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
204 self._docket = None |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
205 if data is None: |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
206 assert attempts >= V2_MAX_READ_ATTEMPTS |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
207 msg = b"dirstate read race happened %d times in a row" |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
208 msg %= attempts |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
209 raise error.Abort(msg) |
50236
53f196622699
dirstate: abstract the reading of the data file in v2 in a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50234
diff
changeset
|
210 return self._opener.read(self.docket.data_filename()) |
53f196622699
dirstate: abstract the reading of the data file in v2 in a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50234
diff
changeset
|
211 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
212 def write_v2_no_append(self, tr, st, meta, packed): |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
213 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
214 old_docket = self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
215 except error.CorruptedDirstate: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
216 # This means we've identified a dirstate-v1 file on-disk when we |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
217 # were expecting a dirstate-v2 docket. We've managed to recover |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
218 # from that unexpected situation, and now we want to write back a |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
219 # dirstate-v2 file to make the on-disk situation right again. |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
220 # |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
221 # This shouldn't be triggered since `self.docket` is cached and |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
222 # we would have called parents() or read() first, but it's here |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
223 # just in case. |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
224 old_docket = None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
225 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
226 new_docket = docketmod.DirstateDocket.with_new_uuid( |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
227 self.parents(), len(packed), meta |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
228 ) |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
229 if old_docket is not None and old_docket.uuid == new_docket.uuid: |
50097
ca9d65d69c27
dirstate-v2: complain early on docket name collision
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49619
diff
changeset
|
230 raise error.ProgrammingError(b'dirstate docket name collision') |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
231 data_filename = new_docket.data_filename() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
232 self._opener.write(data_filename, packed) |
50081
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
233 # tell the transaction that we are adding a new file |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
234 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
235 tr.addbackup(data_filename, location=b'plain') |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
236 # Write the new docket after the new data file has been |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
237 # written. Because `st` was opened with `atomictemp=True`, |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
238 # the actual `.hg/dirstate` file is only affected on close. |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
239 st.write(new_docket.serialize()) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
240 st.close() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
241 # Remove the old data file after the new docket pointing to |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
242 # the new data file was written. |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
243 if old_docket is not None and old_docket.uuid: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
244 data_filename = old_docket.data_filename() |
50081
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
245 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
246 tr.addbackup(data_filename, location=b'plain') |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
247 unlink = lambda _tr=None: self._opener.unlink(data_filename) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
248 if tr: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
249 category = b"dirstate-v2-clean-" + old_docket.uuid |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
250 tr.addpostclose(category, unlink) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
251 else: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
252 unlink() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
253 self._docket = new_docket |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
254 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
255 ### reading/setting parents |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
256 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
257 def parents(self): |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
258 if not self._parents: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
259 if self._use_dirstate_v2: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
260 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
261 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
262 except error.CorruptedDirstate as e: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
263 # fall back to dirstate-v1 if we fail to read v2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
264 self._v1_parents(e) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
265 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
266 self._parents = self.docket.parents |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
267 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
268 self._v1_parents() |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
269 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
270 return self._parents |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
271 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
272 def _v1_parents(self, from_v2_exception=None): |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
273 read_len = self._nodelen * 2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
274 st = self._readdirstatefile(read_len) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
275 l = len(st) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
276 if l == read_len: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
277 self._parents = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
278 st[: self._nodelen], |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
279 st[self._nodelen : 2 * self._nodelen], |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
280 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
281 elif l == 0: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
282 self._parents = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
283 self._nodeconstants.nullid, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
284 self._nodeconstants.nullid, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
285 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
286 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
287 hint = None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
288 if from_v2_exception is not None: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
289 hint = _(b"falling back to dirstate-v1 from v2 also failed") |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
290 raise error.Abort( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
291 _(b'working directory state appears damaged!'), hint |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
292 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
293 |
48119
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
294 |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
295 class dirstatemap(_dirstatemapcommon): |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
296 """Map encapsulating the dirstate's contents. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
297 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
298 The dirstate contains the following state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
299 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
300 - `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
|
301 detect when changes have occurred to the dirstate file. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
302 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
303 - `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
|
304 parents are updated by calling `setparents`. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
305 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
306 - 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
|
307 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
|
308 '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
|
309 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
|
310 documentation for details): |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
311 |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
312 - `reset_state`, |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
313 - `set_tracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
314 - `set_untracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
315 - `set_clean` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
316 - `set_possibly_dirty` |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
317 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
318 - `copymap` maps destination filenames to their source filename. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
319 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
320 The dirstate also provides the following views onto the state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
321 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
322 - `filefoldmap` is a dict mapping normalized filenames to the denormalized |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
323 form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
324 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
325 - `dirfoldmap` is a dict mapping normalized directory names to the |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
326 denormalized form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
327 """ |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
328 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
329 ### Core data storage and access |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
330 |
34934
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
331 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
332 def _map(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
333 self._map = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
334 self.read() |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
335 return self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
336 |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
337 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
338 def copymap(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
339 self.copymap = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
340 self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
341 return self.copymap |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
342 |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
343 def clear(self): |
34935
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
344 self._map.clear() |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
345 self.copymap.clear() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
346 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
|
347 util.clearcachedproperty(self, b"_dirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
348 util.clearcachedproperty(self, b"_alldirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 util.clearcachedproperty(self, b"filefoldmap") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 util.clearcachedproperty(self, b"dirfoldmap") |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
351 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
352 def items(self): |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
353 return self._map.items() |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
354 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
355 # forward for python2,3 compat |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
356 iteritems = items |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
357 |
48023
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
358 def debug_iter(self, all): |
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
359 """ |
48024
cedfe2606adf
debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents:
48023
diff
changeset
|
360 Return an iterator of (filename, state, mode, size, mtime) tuples |
cedfe2606adf
debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents:
48023
diff
changeset
|
361 |
48023
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
362 `all` is unused when Rust is not enabled |
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
363 """ |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
364 for filename, item in self.items(): |
48024
cedfe2606adf
debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents:
48023
diff
changeset
|
365 yield (filename, item.state, item.mode, item.size, item.mtime) |
47683
284a20269a97
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents:
47682
diff
changeset
|
366 |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
367 def keys(self): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
368 return self._map.keys() |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
369 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
370 ### reading/setting parents |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
371 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
372 def setparents(self, p1, p2, fold_p2=False): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
373 self._parents = (p1, p2) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
374 self._dirtyparents = True |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
375 copies = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
376 if fold_p2: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
377 for f, s in self._map.items(): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
378 # Discard "merged" markers when moving away from a merge state |
48148
e2753a7acfa7
dirstate-item: use the `p2_info` property to replace more verbose call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48140
diff
changeset
|
379 if s.p2_info: |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
380 source = self.copymap.pop(f, None) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
381 if source: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
382 copies[f] = source |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
383 s.drop_merge_data() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
384 return copies |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
385 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
386 ### disk interaction |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
387 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
388 def read(self): |
50228
fc8e37c380d3
dirstate: add a synchronisation point before doing a full dirstate read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50222
diff
changeset
|
389 testing.wait_on_cfg(self._ui, b'dirstate.pre-read-file') |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
390 if self._use_dirstate_v2: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
391 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
392 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
393 except error.CorruptedDirstate: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
394 # fall back to dirstate-v1 if we fail to read v2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
395 self._set_identity() |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
396 st = self._readdirstatefile() |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
397 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
398 if not self.docket.uuid: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
399 return |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
400 testing.wait_on_cfg(self._ui, b'dirstate.post-docket-read-file') |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
401 st = self._read_v2_data() |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
402 else: |
50242
379a78001d8e
dirstate: set identity whenever we read the dirstate's v2 docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50241
diff
changeset
|
403 self._set_identity() |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
404 st = self._readdirstatefile() |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
405 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
406 if not st: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
407 return |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
408 |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
409 # TODO: adjust this estimate for dirstate-v2 |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50723
diff
changeset
|
410 if hasattr(parsers, 'dict_new_presized'): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
411 # Make an estimate of the number of files in the dirstate based on |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
412 # its size. This trades wasting some memory for avoiding costly |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
413 # resizes. Each entry have a prefix of 17 bytes followed by one or |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
414 # two path names. Studies on various large-scale real-world repositories |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
415 # found 54 bytes a reasonable upper limit for the average path names. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
416 # Copy entries are ignored for the sake of this estimate. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
417 self._map = parsers.dict_new_presized(len(st) // 71) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
418 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
419 # Python's garbage collector triggers a GC each time a certain number |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
420 # of container objects (the number being defined by |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
421 # gc.get_threshold()) are allocated. parse_dirstate creates a tuple |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
422 # for each file in the dirstate. The C version then immediately marks |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
423 # them as not to be tracked by the collector. However, this has no |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
424 # effect on when GCs are triggered, only on what objects the GC looks |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
425 # into. This means that O(number of files) GCs are unavoidable. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
426 # Depending on when in the process's lifetime the dirstate is parsed, |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
427 # this can get very expensive. As a workaround, disable GC while |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
428 # parsing the dirstate. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
429 # |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
430 # (we cannot decorate the function directly since it is in a C module) |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
431 if self._use_dirstate_v2: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
432 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
433 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
434 except error.CorruptedDirstate: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
435 # fall back to dirstate-v1 if we fail to parse v2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
436 parse_dirstate = util.nogc(parsers.parse_dirstate) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
437 p = parse_dirstate(self._map, self.copymap, st) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
438 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
439 p = self.docket.parents |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
440 meta = self.docket.tree_metadata |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
441 parse_dirstate = util.nogc(v2.parse_dirstate) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
442 parse_dirstate(self._map, self.copymap, st, meta) |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
443 else: |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
444 parse_dirstate = util.nogc(parsers.parse_dirstate) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
445 p = parse_dirstate(self._map, self.copymap, st) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
446 if not self._dirtyparents: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
447 self.setparents(*p) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
448 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
449 # Avoid excess attribute lookups by fast pathing certain checks |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
450 self.__contains__ = self._map.__contains__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
451 self.__getitem__ = self._map.__getitem__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
452 self.get = self._map.get |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
453 |
48393
1a8a70b4b0ad
dirstate: cleanup remaining of "now" during write
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48392
diff
changeset
|
454 def write(self, tr, st): |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
455 if self._use_dirstate_v2: |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
456 packed, meta = v2.pack_dirstate(self._map, self.copymap) |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
457 self.write_v2_no_append(tr, st, meta, packed) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
458 else: |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
459 packed = parsers.pack_dirstate( |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
460 self._map, self.copymap, self.parents() |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
461 ) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
462 st.write(packed) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
463 st.close() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
464 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
465 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
466 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
467 def identity(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
468 self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
469 return self.identity |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
470 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
471 ### code related to maintaining and accessing "extra" property |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
472 # (e.g. "has_dir") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
473 |
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
|
474 def _dirs_incr(self, filename, old_entry=None): |
49118
2c78dd3f11de
dirstatemap: move `_dirs_incr` and `_dirs_decr` methods out of the common
Raphaël Gomès <rgomes@octobus.net>
parents:
49117
diff
changeset
|
475 """increment the dirstate counter if applicable""" |
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
|
476 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
|
477 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
|
478 ) 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
|
479 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
|
480 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
|
481 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
|
482 |
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
|
483 def _dirs_decr(self, filename, old_entry=None, remove_variant=False): |
49118
2c78dd3f11de
dirstatemap: move `_dirs_incr` and `_dirs_decr` methods out of the common
Raphaël Gomès <rgomes@octobus.net>
parents:
49117
diff
changeset
|
484 """decrement the dirstate counter if applicable""" |
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
|
485 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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
496 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
497 def filefoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
498 """Returns a dictionary mapping normalized case paths to their |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
499 non-normalized versions. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
500 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
501 try: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
502 makefilefoldmap = parsers.make_file_foldmap |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
503 except AttributeError: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
504 pass |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
505 else: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
506 return makefilefoldmap( |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
507 self._map, util.normcasespec, util.normcasefallback |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
508 ) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
509 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
510 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
511 normcase = util.normcase |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
512 for name, s in self._map.items(): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
513 if not s.removed: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
514 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
515 f[b'.'] = b'.' # prevents useless util.fspath() invocation |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
516 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
517 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
518 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
519 def dirfoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
520 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
521 normcase = util.normcase |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
522 for name in self._dirs: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
523 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
524 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
525 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
526 def hastrackeddir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
527 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
528 Returns True if the dirstate contains a tracked (not removed) file |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
529 in this directory. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
530 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
531 return d in self._dirs |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
532 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
533 def hasdir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
534 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
535 Returns True if the dirstate contains a file (tracked or removed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
536 in this directory. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
537 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
538 return d in self._alldirs |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
539 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
540 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
541 def _dirs(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
542 return pathutil.dirs(self._map, only_tracked=True) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
543 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
544 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
545 def _alldirs(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
546 return pathutil.dirs(self._map) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
547 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
548 ### code related to manipulation of entries and copy-sources |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
549 |
49102
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
550 def reset_state( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
551 self, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
552 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
553 wc_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
554 p1_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
555 p2_info=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
556 has_meaningful_mtime=True, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
557 parentfiledata=None, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
558 ): |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
559 """Set a entry to a given state, diregarding all previous state |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
560 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
561 This is to be used by the part of the dirstate API dedicated to |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
562 adjusting the dirstate after a update/merge. |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
563 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
564 note: calling this might result to no entry existing at all if the |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
565 dirstate map does not see any point at having one for this file |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
566 anymore. |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
567 """ |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
568 # copy information are now outdated |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
569 # (maybe new information should be in directly passed to this function) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
570 self.copymap.pop(filename, None) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
571 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
572 if not (p1_tracked or p2_info or wc_tracked): |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
573 old_entry = self._map.get(filename) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
574 self._drop_entry(filename) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
575 self._dirs_decr(filename, old_entry=old_entry) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
576 return |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
577 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
578 old_entry = self._map.get(filename) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
579 self._dirs_incr(filename, old_entry) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
580 entry = DirstateItem( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
581 wc_tracked=wc_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
582 p1_tracked=p1_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
583 p2_info=p2_info, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
584 has_meaningful_mtime=has_meaningful_mtime, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
585 parentfiledata=parentfiledata, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
586 ) |
49103
77dfde417e5e
dirstatemap: remove `_insert_entry`
Raphaël Gomès <rgomes@octobus.net>
parents:
49102
diff
changeset
|
587 self._map[filename] = entry |
49102
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
588 |
49098
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
589 def set_tracked(self, filename): |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
590 new = False |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
591 entry = self.get(filename) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
592 if entry is None: |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
593 self._dirs_incr(filename) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
594 entry = DirstateItem( |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
595 wc_tracked=True, |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
596 ) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
597 |
49103
77dfde417e5e
dirstatemap: remove `_insert_entry`
Raphaël Gomès <rgomes@octobus.net>
parents:
49102
diff
changeset
|
598 self._map[filename] = entry |
49098
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
599 new = True |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
600 elif not entry.tracked: |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
601 self._dirs_incr(filename, entry) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
602 entry.set_tracked() |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
603 self._refresh_entry(filename, entry) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
604 new = True |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
605 else: |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
606 # XXX This is probably overkill for more case, but we need this to |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
607 # fully replace the `normallookup` call with `set_tracked` one. |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
608 # Consider smoothing this in the future. |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
609 entry.set_possibly_dirty() |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
610 self._refresh_entry(filename, entry) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
611 return new |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
612 |
49109
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
613 def set_untracked(self, f): |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
614 """Mark a file as no longer tracked in the dirstate map""" |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
615 entry = self.get(f) |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
616 if entry is None: |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
617 return False |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
618 else: |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
619 self._dirs_decr(f, old_entry=entry, remove_variant=not entry.added) |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
620 if not entry.p2_info: |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
621 self.copymap.pop(f, None) |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
622 entry.set_untracked() |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
623 self._refresh_entry(f, entry) |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
624 return True |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
625 |
49105
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
626 def set_clean(self, filename, mode, size, mtime): |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
627 """mark a file as back to a clean state""" |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
628 entry = self[filename] |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
629 size = size & rangemask |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
630 entry.set_clean(mode, size, mtime) |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
631 self._refresh_entry(filename, entry) |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
632 self.copymap.pop(filename, None) |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
633 |
49107
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
634 def set_possibly_dirty(self, filename): |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
635 """record that the current state of the file on disk is unknown""" |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
636 entry = self[filename] |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
637 entry.set_possibly_dirty() |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
638 self._refresh_entry(filename, entry) |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
639 |
48126
a1a6569b9283
dirstatemap: add a common `_refresh_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48125
diff
changeset
|
640 def _refresh_entry(self, f, entry): |
49117
4c562108384f
dirstatemap: move `_refresh_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49116
diff
changeset
|
641 """record updated state of an entry""" |
48126
a1a6569b9283
dirstatemap: add a common `_refresh_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48125
diff
changeset
|
642 if not entry.any_tracked: |
a1a6569b9283
dirstatemap: add a common `_refresh_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48125
diff
changeset
|
643 self._map.pop(f, None) |
a1a6569b9283
dirstatemap: add a common `_refresh_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48125
diff
changeset
|
644 |
48132
c057d7c97b72
dirstatemap: add a common `_drop_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48131
diff
changeset
|
645 def _drop_entry(self, f): |
49116
cebb263c865c
dirstatemap: move `_drop_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49115
diff
changeset
|
646 """remove any entry for file f |
cebb263c865c
dirstatemap: move `_drop_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49115
diff
changeset
|
647 |
cebb263c865c
dirstatemap: move `_drop_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49115
diff
changeset
|
648 This should also drop associated copy information |
cebb263c865c
dirstatemap: move `_drop_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49115
diff
changeset
|
649 |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
650 The fact we actually need to drop it is the responsability of the caller |
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
651 """ |
48132
c057d7c97b72
dirstatemap: add a common `_drop_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48131
diff
changeset
|
652 self._map.pop(f, None) |
48133
55293938b843
dirstatemap: use a common implement for reset_state
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48132
diff
changeset
|
653 self.copymap.pop(f, None) |
48132
c057d7c97b72
dirstatemap: add a common `_drop_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48131
diff
changeset
|
654 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
655 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
656 if rustmod is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
657 |
48119
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
658 class dirstatemap(_dirstatemapcommon): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
659 ### Core data storage and access |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
660 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
661 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
662 def _map(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
663 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
664 Fills the Dirstatemap when called. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
665 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
666 # ignore HG_PENDING because identity is used only for writing |
50241
342c3c4640b7
dirstate: factor the identity setting code in the dirstate map
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50238
diff
changeset
|
667 self._set_identity() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
668 |
50228
fc8e37c380d3
dirstate: add a synchronisation point before doing a full dirstate read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50222
diff
changeset
|
669 testing.wait_on_cfg(self._ui, b'dirstate.pre-read-file') |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
670 if self._use_dirstate_v2: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
671 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
672 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
673 except error.CorruptedDirstate as e: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
674 # fall back to dirstate-v1 if we fail to read v2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
675 parents = self._v1_map(e) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
676 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
677 parents = self.docket.parents |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
678 inode = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
679 self.identity.stat.st_ino |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
680 if self.identity is not None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
681 and self.identity.stat is not None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
682 else None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
683 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
684 testing.wait_on_cfg( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
685 self._ui, b'dirstate.post-docket-read-file' |
50243
6cce0afc1454
rust-dirstate: remember the data file uuid dirstate was loaded with
Raphaël Gomès <rgomes@octobus.net>
parents:
50242
diff
changeset
|
686 ) |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
687 if not self.docket.uuid: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
688 data = b'' |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
689 self._map = rustmod.DirstateMap.new_empty() |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
690 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
691 data = self._read_v2_data() |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
692 self._map = rustmod.DirstateMap.new_v2( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
693 data, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
694 self.docket.data_size, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
695 self.docket.tree_metadata, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
696 self.docket.uuid, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
697 inode, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
698 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
699 parents = self.docket.parents |
48051
98c0408324e6
dirstate: Pass the final DirstateItem to _rustmap.addfile()
Simon Sapin <simon.sapin@octobus.net>
parents:
48050
diff
changeset
|
700 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
701 parents = self._v1_map() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
702 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
703 if parents and not self._dirtyparents: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
704 self.setparents(*parents) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
705 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
706 self.__contains__ = self._map.__contains__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
707 self.__getitem__ = self._map.__getitem__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
708 self.get = self._map.get |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
709 return self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
710 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
711 def _v1_map(self, from_v2_exception=None): |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
712 self._set_identity() |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
713 inode = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
714 self.identity.stat.st_ino |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
715 if self.identity is not None and self.identity.stat is not None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
716 else None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
717 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
718 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
719 self._map, parents = rustmod.DirstateMap.new_v1( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
720 self._readdirstatefile(), inode |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
721 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
722 except OSError as e: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
723 if from_v2_exception is not None: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
724 raise e from from_v2_exception |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
725 raise |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
726 return parents |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
727 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
728 @property |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
729 def copymap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
730 return self._map.copymap() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
731 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
732 def debug_iter(self, all): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
733 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
734 Return an iterator of (filename, state, mode, size, mtime) tuples |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
735 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
736 `all`: also include with `state == b' '` dirstate tree nodes that |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
737 don't have an associated `DirstateItem`. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
738 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
739 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
740 return self._map.debug_iter(all) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
741 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
742 def clear(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
743 self._map.clear() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
744 self.setparents( |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
745 self._nodeconstants.nullid, self._nodeconstants.nullid |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
746 ) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
747 util.clearcachedproperty(self, b"_dirs") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
748 util.clearcachedproperty(self, b"_alldirs") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
749 util.clearcachedproperty(self, b"dirfoldmap") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
750 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
751 def items(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
752 return self._map.items() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
753 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
754 # forward for python2,3 compat |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
755 iteritems = items |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
756 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
757 def keys(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
758 return iter(self._map) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
759 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
760 ### reading/setting parents |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
761 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
762 def setparents(self, p1, p2, fold_p2=False): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
763 self._parents = (p1, p2) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
764 self._dirtyparents = True |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
765 copies = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
766 if fold_p2: |
49120
3df46f3a3d6c
rust-dirstatemap: implement part of the `setparents` logic
Raphaël Gomès <rgomes@octobus.net>
parents:
49118
diff
changeset
|
767 copies = self._map.setparents_fixup() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
768 return copies |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
769 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
770 ### disk interaction |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
771 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
772 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
773 def identity(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
774 self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
775 return self.identity |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
776 |
48393
1a8a70b4b0ad
dirstate: cleanup remaining of "now" during write
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48392
diff
changeset
|
777 def write(self, tr, st): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
778 if not self._use_dirstate_v2: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
779 p1, p2 = self.parents() |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
780 packed = self._map.write_v1(p1, p2) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
781 st.write(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
782 st.close() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
783 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
784 return |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
785 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
786 write_mode = self._write_mode |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
787 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
788 docket = self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
789 except error.CorruptedDirstate: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
790 # fall back to dirstate-v1 if we fail to parse v2 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
791 docket = None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
792 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
793 # We can only append to an existing data file if there is one |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
794 if docket is None or docket.uuid is None: |
50221
1891086f6c7f
dirstate: use more than a bool to control append behavior
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50097
diff
changeset
|
795 write_mode = WRITE_MODE_FORCE_NEW |
1891086f6c7f
dirstate: use more than a bool to control append behavior
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50097
diff
changeset
|
796 packed, meta, append = self._map.write_v2(write_mode) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
797 if append: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
798 docket = self.docket |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
799 data_filename = docket.data_filename() |
50081
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
800 # We mark it for backup to make sure a future `hg rollback` (or |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
801 # `hg recover`?) call find the data it needs to restore a |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
802 # working repository. |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
803 # |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
804 # The backup can use a hardlink because the format is resistant |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
805 # to trailing "dead" data. |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
806 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
807 tr.addbackup(data_filename, location=b'plain') |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
808 with self._opener(data_filename, b'r+b') as fp: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
809 fp.seek(docket.data_size) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
810 assert fp.tell() == docket.data_size |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
811 written = fp.write(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
812 if written is not None: # py2 may return None |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
813 assert written == len(packed), (written, len(packed)) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
814 docket.data_size += len(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
815 docket.parents = self.parents() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
816 docket.tree_metadata = meta |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
817 st.write(docket.serialize()) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
818 st.close() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
819 else: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
820 self.write_v2_no_append(tr, st, meta, packed) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
821 # Reload from the newly-written file |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
822 util.clearcachedproperty(self, b"_map") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
823 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
824 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
825 ### code related to maintaining and accessing "extra" property |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
826 # (e.g. "has_dir") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
827 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
828 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
829 def filefoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
830 """Returns a dictionary mapping normalized case paths to their |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
831 non-normalized versions. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
832 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
833 return self._map.filefoldmapasdict() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
834 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
835 def hastrackeddir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
836 return self._map.hastrackeddir(d) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
837 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
838 def hasdir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
839 return self._map.hasdir(d) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
840 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
841 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
842 def dirfoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
843 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
844 normcase = util.normcase |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
845 for name in self._map.tracked_dirs(): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
846 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
847 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
848 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
849 ### code related to manipulation of entries and copy-sources |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
850 |
49098
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
851 def set_tracked(self, f): |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
852 return self._map.set_tracked(f) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
853 |
49109
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
854 def set_untracked(self, f): |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
855 return self._map.set_untracked(f) |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
856 |
49105
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
857 def set_clean(self, filename, mode, size, mtime): |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
858 self._map.set_clean(filename, mode, size, mtime) |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
859 |
49107
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
860 def set_possibly_dirty(self, f): |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
861 self._map.set_possibly_dirty(f) |
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
862 |
49102
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
863 def reset_state( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
864 self, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
865 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
866 wc_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
867 p1_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
868 p2_info=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
869 has_meaningful_mtime=True, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
870 parentfiledata=None, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
871 ): |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
872 return self._map.reset_state( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
873 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
874 wc_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
875 p1_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
876 p2_info, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
877 has_meaningful_mtime, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
878 parentfiledata, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
879 ) |