Mercurial > public > mercurial-scm > hg-stable
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 |
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 ... |