Mercurial > hg
annotate mercurial/dirstatemap.py @ 52032:09a54892b7ee
mergestate: reduce the number of attribute lookups
This code is called a lot during updates, this is a very small but also very
easy thing to do.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Wed, 21 Aug 2024 09:48:14 +0200 |
parents | f4733654f144 |
children | af54626bf358 |
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 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51716
diff
changeset
|
6 from __future__ import annotations |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
7 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
8 from typing import ( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
9 Optional, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
10 TYPE_CHECKING, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
11 ) |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
12 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
13 from .i18n import _ |
43239
6fcdcea2b03a
dirstate: add some traces on listdir calls
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
14 |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
15 from . import ( |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
16 error, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
17 pathutil, |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
18 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
|
19 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
|
20 txnutil, |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
21 typelib, |
27503
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
22 util, |
0f4596622273
dirstate: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27399
diff
changeset
|
23 ) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
24 |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
25 from .dirstateutils import ( |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
26 docket as docketmod, |
48221
a32a96079e2d
dirstate-v2: initial Python parser
Simon Sapin <simon.sapin@octobus.net>
parents:
48220
diff
changeset
|
27 v2, |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
28 ) |
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47672
diff
changeset
|
29 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
30 if TYPE_CHECKING: |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
31 from . import ( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
32 ui as uimod, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
33 ) |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
34 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
35 parsers = policy.importmod('parsers') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43505
diff
changeset
|
36 rustmod = policy.importrust('dirstate') |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32352
diff
changeset
|
37 |
8261
0fe1f57ac2bd
dirstate: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8226
diff
changeset
|
38 propertycache = util.propertycache |
16201
fb7c4c14223f
dirstate: filecacheify _branch
Idan Kamara <idankk86@gmail.com>
parents:
16200
diff
changeset
|
39 |
48044
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
40 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
|
41 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
|
42 else: |
d5528ac9b4f2
dirstate: Use the Rust implementation of DirstateItem when Rust is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48024
diff
changeset
|
43 DirstateItem = rustmod.DirstateItem |
21808
7537e57f5dbd
dirstate: add dirstatetuple to create dirstate values
Siddharth Agarwal <sid0@fb.com>
parents:
21116
diff
changeset
|
44 |
47521
abed645b8e96
dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47514
diff
changeset
|
45 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
|
46 |
50221
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_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
|
48 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
|
49 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
|
50 |
47482
cb29484eaade
dirstate: introduce a symbolic constant for the FROM_P2 marker
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47481
diff
changeset
|
51 |
50237
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
52 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
|
53 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
54 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
55 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
|
56 """ |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
57 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
|
58 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
|
59 """ |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
60 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
61 _use_dirstate_v2: bool |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
62 _nodeconstants: typelib.NodeConstants |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
63 _ui: "uimod.ui" |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
64 _root: bytes |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
65 _filename: bytes |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
66 _nodelen: int |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
67 _dirtyparents: bool |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
68 _docket: Optional["docketmod.DirstateDocket"] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
69 _write_mode: int |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
70 _pendingmode: Optional[bool] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
71 identity: Optional[typelib.CacheStat] |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
72 |
48122
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
73 # 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
|
74 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
75 _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
|
76 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
|
77 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
78 def __init__( |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
79 self, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
80 ui: "uimod.ui", |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
81 opener, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
82 root: bytes, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
83 nodeconstants: typelib.NodeConstants, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
84 use_dirstate_v2: bool, |
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
85 ) -> None: |
48120
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
86 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
|
87 self._nodeconstants = nodeconstants |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
88 self._ui = ui |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
89 self._opener = opener |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
90 self._root = root |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
91 self._filename = b'dirstate' |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
92 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
|
93 self._parents = None |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
94 self._dirtyparents = False |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 else: |
ecd28d89c29e
dirstate-v2: add devel config option to control write behavior
Raphaël Gomès <rgomes@octobus.net>
parents:
50221
diff
changeset
|
104 # 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
|
105 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
|
106 |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
107 # 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
|
108 self._pendingmode = None |
fe6617715464
dirstatemap: use a common __init__ for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48119
diff
changeset
|
109 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
110 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
|
111 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
|
112 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
113 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
|
114 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
|
115 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
|
116 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
|
117 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
|
118 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
119 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
|
120 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
|
121 # 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 # 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
|
127 # 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
|
128 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
|
129 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
|
130 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
|
131 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
|
132 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
|
133 # 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
|
134 # 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
|
135 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
|
136 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
|
137 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
138 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
|
139 """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
|
140 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
|
141 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
142 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
|
143 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
|
144 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
145 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
|
146 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
|
147 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
148 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
|
149 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
|
150 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
151 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
|
152 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
|
153 |
bbd924a36a6e
dirstatemap: move a multiple simple functions in the common class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48121
diff
changeset
|
154 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
|
155 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
|
156 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
157 ### disk interaction |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
158 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
159 def _opendirstatefile(self): |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
160 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
|
161 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
|
162 fp.close() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
163 raise error.Abort( |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
164 _(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
|
165 ) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
166 self._pendingmode = mode |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
167 return fp |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
168 |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
169 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
|
170 try: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
171 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
|
172 return fp.read(size) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49120
diff
changeset
|
173 except FileNotFoundError: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
174 # 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
|
175 return b'' |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
176 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
177 @property |
51716
f3b34386d3e0
typing: add type hints to `mercurial.dirstatemap`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
178 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
|
179 if not self._docket: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
180 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
|
181 raise error.ProgrammingError( |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
182 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
|
183 ) |
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
|
184 self._set_identity() |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
185 data = self._readdirstatefile() |
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
186 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
|
187 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
|
188 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
|
189 ) |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
190 else: |
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
191 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
|
192 return self._docket |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
193 |
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
|
194 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
|
195 data = None |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
196 attempts = 0 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
197 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
|
198 attempts += 1 |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
199 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
|
200 # 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
|
201 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
|
202 except FileNotFoundError: |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
203 # 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
|
204 # 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 msg %= attempts |
a3b1ab5f5dee
dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50236
diff
changeset
|
210 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
|
211 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
|
212 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
213 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
|
214 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
215 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
|
216 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
|
217 # 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
|
218 # 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
|
219 # 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
|
220 # 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
|
221 # |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
222 # 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
|
223 # 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
|
224 # 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
|
225 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
|
226 |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
227 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
|
228 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
|
229 ) |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
230 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
|
231 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
|
232 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
|
233 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
|
234 # 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
|
235 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
236 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
|
237 # 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
|
238 # 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
|
239 # 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
|
240 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
|
241 st.close() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
242 # 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
|
243 # 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
|
244 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
|
245 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
|
246 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
247 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
|
248 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
|
249 if tr: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
250 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
|
251 tr.addpostclose(category, unlink) |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
252 else: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
253 unlink() |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
254 self._docket = new_docket |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
255 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
256 ### reading/setting parents |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
257 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
258 def parents(self): |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
259 if not self._parents: |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
260 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
|
261 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
262 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
263 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
|
264 # 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
|
265 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
|
266 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
267 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
|
268 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
269 self._v1_parents() |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
270 |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
271 return self._parents |
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
272 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
273 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
|
274 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
|
275 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
|
276 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
|
277 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
|
278 self._parents = ( |
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], |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
280 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
|
281 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
282 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
|
283 self._parents = ( |
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 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
|
286 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
287 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
288 hint = None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 _(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
|
293 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
294 |
48119
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
295 |
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
296 class dirstatemap(_dirstatemapcommon): |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
297 """Map encapsulating the dirstate's contents. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
298 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
299 The dirstate contains the following state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
300 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
301 - `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
|
302 detect when changes have occurred to the dirstate file. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
303 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
304 - `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
|
305 parents are updated by calling `setparents`. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
306 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
307 - 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
|
308 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
|
309 '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
|
310 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
|
311 documentation for details): |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
312 |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
313 - `reset_state`, |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
314 - `set_tracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
315 - `set_untracked` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
316 - `set_clean` |
aa442fde0ea5
dirstate: update the documentation of the dirstatemap API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47990
diff
changeset
|
317 - `set_possibly_dirty` |
35078
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
318 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
319 - `copymap` maps destination filenames to their source filename. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
320 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
321 The dirstate also provides the following views onto the state: |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
322 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
323 - `filefoldmap` is a dict mapping normalized filenames to the denormalized |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
324 form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
325 |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
326 - `dirfoldmap` is a dict mapping normalized directory names to the |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
327 denormalized form that they appear as in the dirstate. |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
328 """ |
a052022639cc
dirstate: document dirstatemap interface
Mark Thomas <mbthomas@fb.com>
parents:
35016
diff
changeset
|
329 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
330 ### Core data storage and access |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
331 |
34934
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
332 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
333 def _map(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
334 self._map = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
335 self.read() |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
336 return self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
337 |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
338 @propertycache |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
339 def copymap(self): |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
340 self.copymap = {} |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
341 self._map |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
342 return self.copymap |
6e66033f91cc
dirstate: avoid reading the map when possible (issue5713) (issue5717)
Durham Goode <durham@fb.com>
parents:
34933
diff
changeset
|
343 |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
344 def clear(self): |
34935
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
345 self._map.clear() |
ffeea2406276
dirstate: remove excess attribute lookups for dirstate.status (issue5714)
Durham Goode <durham@fb.com>
parents:
34934
diff
changeset
|
346 self.copymap.clear() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
347 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
|
348 util.clearcachedproperty(self, b"_dirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 util.clearcachedproperty(self, b"_alldirs") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 util.clearcachedproperty(self, b"filefoldmap") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 util.clearcachedproperty(self, b"dirfoldmap") |
34933
0217f75b6e59
dirstate: move clear onto dirstatemap class
Durham Goode <durham@fb.com>
parents:
34678
diff
changeset
|
352 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
353 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
|
354 return self._map.items() |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
355 |
35878
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
356 # forward for python2,3 compat |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
357 iteritems = items |
6e7fae8f1c6c
contrib: fix dirstatenonnormalcheck to work in Python 3
Augie Fackler <augie@google.com>
parents:
35835
diff
changeset
|
358 |
48023
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
359 def debug_iter(self, all): |
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
360 """ |
48024
cedfe2606adf
debugsate: Change debug_iter() to yield tuples instead of DirstateItem
Simon Sapin <simon.sapin@octobus.net>
parents:
48023
diff
changeset
|
361 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
|
362 |
48023
357307feaf61
debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents:
48019
diff
changeset
|
363 `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
|
364 """ |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
365 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
|
366 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
|
367 |
34332
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
368 def keys(self): |
b36881c68569
dirstate: create new dirstatemap class
Durham Goode <durham@fb.com>
parents:
34188
diff
changeset
|
369 return self._map.keys() |
34333
4ac04418ce66
dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com>
parents:
34332
diff
changeset
|
370 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
371 ### reading/setting parents |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
372 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
373 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
|
374 self._parents = (p1, p2) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
375 self._dirtyparents = True |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
376 copies = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
377 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
|
378 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
|
379 # 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
|
380 if s.p2_info: |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
381 source = self.copymap.pop(f, None) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
382 if source: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
383 copies[f] = source |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
384 s.drop_merge_data() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
385 return copies |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
386 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
387 ### disk interaction |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
388 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
389 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
|
390 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
|
391 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
|
392 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
393 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
394 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
|
395 # 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
|
396 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
|
397 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
|
398 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
399 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
|
400 return |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
401 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
|
402 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
|
403 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
|
404 self._set_identity() |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
405 st = self._readdirstatefile() |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
406 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
407 if not st: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
408 return |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
409 |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
410 # 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
|
411 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
|
412 # 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
|
413 # 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
|
414 # 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
|
415 # 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
|
416 # 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
|
417 # 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
|
418 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
|
419 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
420 # 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
|
421 # 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
|
422 # 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
|
423 # 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
|
424 # 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
|
425 # 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
|
426 # 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
|
427 # 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
|
428 # 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
|
429 # parsing the dirstate. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
430 # |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
431 # (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
|
432 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
|
433 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
434 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
435 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
|
436 # 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
|
437 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
|
438 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
|
439 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 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
|
444 else: |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
445 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
|
446 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
|
447 if not self._dirtyparents: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
448 self.setparents(*p) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
449 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
450 # 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
|
451 self.__contains__ = self._map.__contains__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
452 self.__getitem__ = self._map.__getitem__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
453 self.get = self._map.get |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
454 |
48393
1a8a70b4b0ad
dirstate: cleanup remaining of "now" during write
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48392
diff
changeset
|
455 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
|
456 if self._use_dirstate_v2: |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
457 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
|
458 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
|
459 else: |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
460 packed = parsers.pack_dirstate( |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
461 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
|
462 ) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
463 st.write(packed) |
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48221
diff
changeset
|
464 st.close() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
465 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
466 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
467 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
468 def identity(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
469 self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
470 return self.identity |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
471 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
472 ### 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
|
473 # (e.g. "has_dir") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
474 |
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
|
475 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
|
476 """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
|
477 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
|
478 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
|
479 ) 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
|
480 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
|
481 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
|
482 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
|
483 |
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
|
484 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
|
485 """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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 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
|
496 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
497 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
498 def filefoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
499 """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
|
500 non-normalized versions. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
501 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
502 try: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
503 makefilefoldmap = parsers.make_file_foldmap |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
504 except AttributeError: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
505 pass |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
506 else: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
507 return makefilefoldmap( |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
508 self._map, util.normcasespec, util.normcasefallback |
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 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
511 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
512 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
|
513 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
|
514 if not s.removed: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
515 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
516 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
|
517 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
518 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
519 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
520 def dirfoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
521 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
522 normcase = util.normcase |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
523 for name in self._dirs: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
524 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
525 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
526 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
527 def hastrackeddir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
528 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
529 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
|
530 in this directory. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
531 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
532 return d in self._dirs |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
533 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
534 def hasdir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
535 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
536 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
|
537 in this directory. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
538 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
539 return d in self._alldirs |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
540 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
541 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
542 def _dirs(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
543 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
|
544 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
545 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
546 def _alldirs(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
547 return pathutil.dirs(self._map) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
548 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
549 ### 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
|
550 |
49102
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
551 def reset_state( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
552 self, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
553 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
554 wc_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
555 p1_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
556 p2_info=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
557 has_meaningful_mtime=True, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
558 parentfiledata=None, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
559 ): |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
560 """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
|
561 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
562 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
|
563 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
|
564 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
565 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
|
566 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
|
567 anymore. |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
568 """ |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
569 # 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
|
570 # (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
|
571 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
|
572 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
573 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
|
574 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
|
575 self._drop_entry(filename) |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
576 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
|
577 return |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
578 |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
579 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
|
580 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
|
581 entry = DirstateItem( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
582 wc_tracked=wc_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
583 p1_tracked=p1_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
584 p2_info=p2_info, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
585 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
|
586 parentfiledata=parentfiledata, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
587 ) |
49103
77dfde417e5e
dirstatemap: remove `_insert_entry`
Raphaël Gomès <rgomes@octobus.net>
parents:
49102
diff
changeset
|
588 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
|
589 |
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
|
590 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
|
591 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
|
592 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
|
593 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
|
594 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
|
595 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
|
596 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
|
597 ) |
55c158a33fa5
dirstatemap: move `set_tracked` out of common methods and plug in Rust
Raphaël Gomès <rgomes@octobus.net>
parents:
49040
diff
changeset
|
598 |
49103
77dfde417e5e
dirstatemap: remove `_insert_entry`
Raphaël Gomès <rgomes@octobus.net>
parents:
49102
diff
changeset
|
599 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
|
600 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
|
601 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
|
602 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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 # 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
|
608 # 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
|
609 # 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
|
610 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
|
611 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
|
612 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
|
613 |
49109
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
614 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
|
615 """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
|
616 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
|
617 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
|
618 return False |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
619 else: |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
620 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
|
621 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
|
622 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
|
623 entry.set_untracked() |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
624 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
|
625 return True |
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
626 |
49105
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
627 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
|
628 """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
|
629 entry = self[filename] |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
630 size = size & rangemask |
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
631 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
|
632 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
|
633 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
|
634 |
49107
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
635 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
|
636 """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
|
637 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
|
638 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
|
639 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
|
640 |
48126
a1a6569b9283
dirstatemap: add a common `_refresh_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48125
diff
changeset
|
641 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
|
642 """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
|
643 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
|
644 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
|
645 |
48132
c057d7c97b72
dirstatemap: add a common `_drop_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48131
diff
changeset
|
646 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
|
647 """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
|
648 |
cebb263c865c
dirstatemap: move `_drop_entry` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49115
diff
changeset
|
649 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
|
650 |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
651 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
|
652 """ |
48132
c057d7c97b72
dirstatemap: add a common `_drop_entry` method for dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48131
diff
changeset
|
653 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
|
654 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
|
655 |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
656 |
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42747
diff
changeset
|
657 if rustmod is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42927
diff
changeset
|
658 |
48119
aec5b0981c26
dirstatemap: introduce a common base for the dirstatemap class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48109
diff
changeset
|
659 class dirstatemap(_dirstatemapcommon): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
660 ### Core data storage and access |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
661 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
662 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
663 def _map(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
664 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
665 Fills the Dirstatemap when called. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
666 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
667 # 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
|
668 self._set_identity() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
669 |
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
|
670 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
|
671 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
|
672 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
673 self.docket |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
674 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
|
675 # 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
|
676 parents = self._v1_map(e) |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
677 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
678 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
|
679 inode = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
680 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
|
681 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
|
682 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
|
683 else None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
684 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
685 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
|
686 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
|
687 ) |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
688 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
|
689 data = b'' |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
690 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
|
691 else: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
692 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
|
693 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
|
694 data, |
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.data_size, |
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.tree_metadata, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
697 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
|
698 inode, |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
699 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
700 parents = self.docket.parents |
48051
98c0408324e6
dirstate: Pass the final DirstateItem to _rustmap.addfile()
Simon Sapin <simon.sapin@octobus.net>
parents:
48050
diff
changeset
|
701 else: |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
702 parents = self._v1_map() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
703 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
704 if parents and not self._dirtyparents: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
705 self.setparents(*parents) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
706 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
707 self.__contains__ = self._map.__contains__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
708 self.__getitem__ = self._map.__getitem__ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
709 self.get = self._map.get |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
710 return self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
711 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
712 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
|
713 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
|
714 inode = ( |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
715 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
|
716 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
|
717 else None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
718 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
719 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
720 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
|
721 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
|
722 ) |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
723 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
|
724 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
|
725 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
|
726 raise |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
727 return parents |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
728 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
729 @property |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
730 def copymap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
731 return self._map.copymap() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
732 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
733 def debug_iter(self, all): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
734 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
735 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
|
736 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
737 `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
|
738 don't have an associated `DirstateItem`. |
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 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
741 return self._map.debug_iter(all) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
742 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
743 def clear(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
744 self._map.clear() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
745 self.setparents( |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
746 self._nodeconstants.nullid, self._nodeconstants.nullid |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
747 ) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
748 util.clearcachedproperty(self, b"_dirs") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
749 util.clearcachedproperty(self, b"_alldirs") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
750 util.clearcachedproperty(self, b"dirfoldmap") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
751 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
752 def items(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
753 return self._map.items() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
754 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
755 # forward for python2,3 compat |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
756 iteritems = items |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
757 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
758 def keys(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
759 return iter(self._map) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
760 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
761 ### reading/setting parents |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
762 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
763 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
|
764 self._parents = (p1, p2) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
765 self._dirtyparents = True |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
766 copies = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
767 if fold_p2: |
49120
3df46f3a3d6c
rust-dirstatemap: implement part of the `setparents` logic
Raphaël Gomès <rgomes@octobus.net>
parents:
49118
diff
changeset
|
768 copies = self._map.setparents_fixup() |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
769 return copies |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
770 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
771 ### disk interaction |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
772 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
773 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
774 def identity(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
775 self._map |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
776 return self.identity |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
777 |
48393
1a8a70b4b0ad
dirstate: cleanup remaining of "now" during write
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48392
diff
changeset
|
778 def write(self, tr, st): |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
779 if not self._use_dirstate_v2: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
780 p1, p2 = self.parents() |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
781 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
|
782 st.write(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
783 st.close() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
784 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
785 return |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
786 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
787 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
|
788 try: |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
789 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
|
790 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
|
791 # 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
|
792 docket = None |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50252
diff
changeset
|
793 |
48123
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
794 # 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
|
795 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
|
796 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
|
797 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
|
798 if append: |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
799 docket = self.docket |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
800 data_filename = docket.data_filename() |
50081
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
801 # 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
|
802 # `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
|
803 # working repository. |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
804 # |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
805 # 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
|
806 # to trailing "dead" data. |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
807 if tr is not None: |
9a0778bbae6a
dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49619
diff
changeset
|
808 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
|
809 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
|
810 fp.seek(docket.data_size) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
811 assert fp.tell() == docket.data_size |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
812 written = fp.write(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
813 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
|
814 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
|
815 docket.data_size += len(packed) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
816 docket.parents = self.parents() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
817 docket.tree_metadata = meta |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
818 st.write(docket.serialize()) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
819 st.close() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
820 else: |
48220
e7b5e8ba7cab
dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net>
parents:
48151
diff
changeset
|
821 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
|
822 # Reload from the newly-written file |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
823 util.clearcachedproperty(self, b"_map") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
824 self._dirtyparents = False |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
825 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
826 ### 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
|
827 # (e.g. "has_dir") |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
828 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
829 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
830 def filefoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
831 """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
|
832 non-normalized versions. |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
833 """ |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
834 return self._map.filefoldmapasdict() |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
835 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
836 def hastrackeddir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
837 return self._map.hastrackeddir(d) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
838 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
839 def hasdir(self, d): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
840 return self._map.hasdir(d) |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
841 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
842 @propertycache |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
843 def dirfoldmap(self): |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
844 f = {} |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
845 normcase = util.normcase |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
846 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
|
847 f[normcase(name)] = name |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
848 return f |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
849 |
771c90807a2b
dirstatemap: arrange methods by category
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48122
diff
changeset
|
850 ### 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
|
851 |
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
|
852 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
|
853 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
|
854 |
49109
953b08a2d983
dirstatemap: move `set_untracked` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49107
diff
changeset
|
855 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
|
856 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
|
857 |
49105
a69ea5a3c5a5
dirstatemap: move `set_clean` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49103
diff
changeset
|
858 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
|
859 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
|
860 |
49107
079aaf996eca
dirstatemap: move `set_possibly_dirty` out of the common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49105
diff
changeset
|
861 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
|
862 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
|
863 |
49102
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
864 def reset_state( |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
865 self, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
866 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
867 wc_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
868 p1_tracked=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
869 p2_info=False, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
870 has_meaningful_mtime=True, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
871 parentfiledata=None, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
872 ): |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
873 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
|
874 filename, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
875 wc_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
876 p1_tracked, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
877 p2_info, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
878 has_meaningful_mtime, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
879 parentfiledata, |
358b1a1e3678
dirstatemap: move `reset_state` out of common methods
Raphaël Gomès <rgomes@octobus.net>
parents:
49099
diff
changeset
|
880 ) |