annotate mercurial/interfaces/transaction.py @ 53040:cdd7bf612c7b stable tip

bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 11 Mar 2025 02:29:42 +0100
parents a7dcb7c1ff5a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52768
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 # transaction.py - simple journaling scheme for mercurial
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 #
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3 # This transaction scheme is intended to gracefully handle program
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 # errors and interruptions. More serious failures like system crashes
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
5 # can be recovered with an fsck-like tool. As the whole repository is
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
6 # effectively log-structured, this should amount to simply truncating
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7 # anything that isn't referenced in the changelog.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
8 #
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 # Copyright 2005, 2006 Olivia Mackall <olivia@selenic.com>
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
10 #
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
11 # This software may be used and distributed according to the terms of the
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
12 # GNU General Public License version 2 or any later version.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
14 from __future__ import annotations
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
15
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
16 import abc
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
17
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
18 from typing import (
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
19 Callable,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20 Collection,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21 List,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22 Optional,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 Protocol,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 Tuple,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25 Union,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
26 )
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
27
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
28 from ._basetypes import (
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
29 CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
30 HgPathT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
31 VfsKeyT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
32 )
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
33
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
34 JournalEntryT = Tuple[HgPathT, int]
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
35
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
36
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
37 class ITransaction(Protocol):
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
38 @property
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
39 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
40 def finalized(self) -> bool:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
41 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
42
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
43 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
44 def startgroup(self) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
45 """delay registration of file entry
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
46
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
47 This is used by strip to delay vision of strip offset. The transaction
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
48 sees either none or all of the strip actions to be done."""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
49
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
50 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
51 def endgroup(self) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
52 """apply delayed registration of file entry.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
53
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
54 This is used by strip to delay vision of strip offset. The transaction
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
55 sees either none or all of the strip actions to be done."""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
56
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
57 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
58 def add(self, file: HgPathT, offset: int) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
59 """record the state of an append-only file before update"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
60
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
61 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62 def addbackup(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 file: HgPathT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65 hardlink: bool = True,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 location: VfsKeyT = b'',
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67 for_offset: Union[bool, int] = False,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
68 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
69 """Adds a backup of the file to the transaction
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
70
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
71 Calling addbackup() creates a hardlink backup of the specified file
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
72 that is used to recover the file in the event of the transaction
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
73 aborting.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
74
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
75 * `file`: the file path, relative to .hg/store
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
76 * `hardlink`: use a hardlink to quickly create the backup
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
77
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
78 If `for_offset` is set, we expect a offset for this file to have been
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
79 previously recorded
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
80 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
81
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
82 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
83 def registertmp(self, tmpfile: HgPathT, location: VfsKeyT = b'') -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
84 """register a temporary transaction file
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
85
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
86 Such files will be deleted when the transaction exits (on both
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
87 failure and success).
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
88 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
89
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
90 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 def addfilegenerator(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
92 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
93 genid: bytes,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
94 filenames: Collection[HgPathT],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
95 genfunc: Callable,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
96 order: int = 0,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
97 location: VfsKeyT = b'',
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
98 post_finalize: bool = False,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
99 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
100 """add a function to generates some files at transaction commit
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
101
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
102 The `genfunc` argument is a function capable of generating proper
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
103 content of each entry in the `filename` tuple.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
104
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
105 At transaction close time, `genfunc` will be called with one file
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
106 object argument per entries in `filenames`.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
107
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
108 The transaction itself is responsible for the backup, creation and
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
109 final write of such file.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
110
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
111 The `genid` argument is used to ensure the same set of file is only
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
112 generated once. Call to `addfilegenerator` for a `genid` already
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
113 present will overwrite the old entry.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
114
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
115 The `order` argument may be used to control the order in which multiple
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
116 generator will be executed.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
117
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
118 The `location` arguments may be used to indicate the files are located
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
119 outside of the the standard directory for transaction. It should match
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
120 one of the key of the `transaction.vfsmap` dictionary.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
121
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
122 The `post_finalize` argument can be set to `True` for file generation
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
123 that must be run after the transaction has been finalized.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
124 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
125
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
126 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
127 def removefilegenerator(self, genid: bytes) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
128 """reverse of addfilegenerator, remove a file generator function"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
129
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
130 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
131 def findoffset(self, file: HgPathT) -> Optional[int]:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
132 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
133
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
134 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
135 def readjournal(self) -> List[JournalEntryT]:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
136 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
137
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
138 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
139 def replace(self, file: HgPathT, offset: int) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
140 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
141 replace can only replace already committed entries
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
142 that are not pending in the queue
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
143 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
144
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
145 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
146 def nest(self, name: bytes = b'<unnamed>') -> ITransaction:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
147 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
148
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
149 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
150 def release(self) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
151 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
152
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
153 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
154 def running(self) -> bool:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
155 ...
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
156
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
157 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
158 def addpending(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
159 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
160 category: CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
161 callback: Callable[[ITransaction], None],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
162 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
163 """add a callback to be called when the transaction is pending
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
165 The transaction will be given as callback's first argument.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
166
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167 Category is a unique identifier to allow overwriting an old callback
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 with a newer callback.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
169 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
170
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
171 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
172 def writepending(self) -> bool:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
173 """write pending file to temporary version
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
174
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
175 This is used to allow hooks to view a transaction before commit"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
176
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
177 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
178 def hasfinalize(self, category: CallbackCategoryT) -> bool:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
179 """check is a callback already exist for a category"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
180
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
181 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
182 def addfinalize(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
183 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
184 category: CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
185 callback: Callable[[ITransaction], None],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
186 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
187 """add a callback to be called when the transaction is closed
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
188
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
189 The transaction will be given as callback's first argument.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
190
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
191 Category is a unique identifier to allow overwriting old callbacks with
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
192 newer callbacks.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
193 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
194
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
195 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
196 def addpostclose(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
197 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
198 category: CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
199 callback: Callable[[ITransaction], None],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
200 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
201 """add or replace a callback to be called after the transaction closed
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
202
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
203 The transaction will be given as callback's first argument.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
204
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
205 Category is a unique identifier to allow overwriting an old callback
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
206 with a newer callback.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
207 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
208
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
209 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
210 def getpostclose(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
211 self, category: CallbackCategoryT
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
212 ) -> Optional[Callable[[ITransaction], None]]:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
213 """return a postclose callback added before, or None"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
214
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
215 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
216 def addabort(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
217 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
218 category: CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
219 callback: Callable[[ITransaction], None],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
220 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
221 """add a callback to be called when the transaction is aborted.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
222
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
223 The transaction will be given as the first argument to the callback.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
224
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
225 Category is a unique identifier to allow overwriting an old callback
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
226 with a newer callback.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
227 """
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
228
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
229 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
230 def addvalidator(
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
231 self,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
232 category: CallbackCategoryT,
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
233 callback: Callable[[ITransaction], None],
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
234 ) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
235 """adds a callback to be called when validating the transaction.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
236
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
237 The transaction will be given as the first argument to the callback.
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
238
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
239 callback should raise exception if to abort transaction"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
240
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
241 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
242 def close(self) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
243 '''commit the transaction'''
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
244
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
245 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
246 def abort(self) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
247 """abort the transaction (generally called on error, or when the
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
248 transaction is not explicitly committed before going out of
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
249 scope)"""
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
250
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
251 @abc.abstractmethod
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
252 def add_journal(self, vfs_id: VfsKeyT, path: HgPathT) -> None:
a7dcb7c1ff5a typing: add a transaction protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
253 ...