Mercurial > hg
annotate mercurial/state.py @ 51418:c9c017b34464
phasees: properly shallow caopy the phase sets dictionary
We are about to increments the set more incrementally in some case, so we need
to make a proper shallow copy of it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 23 Feb 2024 00:01:33 +0100 |
parents | f15cb5111a1e |
children | f4733654f144 |
rev | line source |
---|---|
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1 # state.py - writing and reading state files in Mercurial |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 # |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2018 Pulkit Goyal <pulkitmgoyal@gmail.com> |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 # |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
9 This file contains class to wrap the state for commands and other |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 related logic. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
11 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
12 All the data related to the command state is stored as dictionary in the object. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
13 The class has methods using which the data can be stored to disk in a file under |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
14 .hg/ directory. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
15 |
41135
050ea8eb42a5
state: update comment about use of CBOR
Augie Fackler <augie@google.com>
parents:
39451
diff
changeset
|
16 We store the data on disk in cbor, for which we use the CBOR format to encode |
050ea8eb42a5
state: update comment about use of CBOR
Augie Fackler <augie@google.com>
parents:
39451
diff
changeset
|
17 the data. |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
18 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
19 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
20 |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
21 import contextlib |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
22 |
51285
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
23 from typing import ( |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
24 Any, |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
25 Dict, |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
26 ) |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
27 |
42529
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41135
diff
changeset
|
28 from .i18n import _ |
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41135
diff
changeset
|
29 |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
30 from . import ( |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
31 error, |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
32 util, |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
33 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
34 from .utils import cborutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
35 |
51285
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
36 # keeps pyflakes happy |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
37 for t in (Any, Dict): |
9d3721552b6c
pytype: import typing directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49829
diff
changeset
|
38 assert t |
43702
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
39 |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
40 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
41 class cmdstate: |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
42 """a wrapper class to store the state of commands like `rebase`, `graft`, |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
43 `histedit`, `shelve` etc. Extensions can also use this to write state files. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
44 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
45 All the data for the state is stored in the form of key-value pairs in a |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
46 dictionary. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
47 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
48 The class object can write all the data to a file in .hg/ directory and |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
49 can populate the object data reading that file. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
50 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
51 Uses cbor to serialize and deserialize data while writing and reading from |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
52 disk. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
53 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
54 |
38145
6f67bfe4b82f
state: removing remaining instances of opts class variable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38133
diff
changeset
|
55 def __init__(self, repo, fname): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
56 """repo is the repo object |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
57 fname is the file name in which data should be stored in .hg directory |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
58 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
59 self._repo = repo |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
60 self.fname = fname |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 |
51287
f15cb5111a1e
pytype: move some type comment to proper annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51285
diff
changeset
|
62 def read(self) -> Dict[bytes, Any]: |
38104
36a5a1239a15
state: don't have a dict like interface for cmdstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38103
diff
changeset
|
63 """read the existing state file and return a dict of data stored""" |
36a5a1239a15
state: don't have a dict like interface for cmdstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38103
diff
changeset
|
64 return self._read() |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
65 |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
66 def save(self, version, data): |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
67 """write all the state data stored to .hg/<filename> file |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
68 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
69 we use third-party library cbor to serialize data to write in the file. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
70 """ |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
71 if not isinstance(version, int): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
72 raise error.ProgrammingError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
73 b"version of state file should be an integer" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
74 ) |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
75 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 with self._repo.vfs(self.fname, b'wb', atomictemp=True) as fp: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 fp.write(b'%d\n' % version) |
39451
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
78 for chunk in cborutil.streamencode(data): |
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
79 fp.write(chunk) |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
80 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
81 def _read(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
82 """reads the state file and returns a dictionary which contain |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
83 data in the same format as it was before storing""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
84 with self._repo.vfs(self.fname, b'rb') as fp: |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
85 try: |
38127
b7e5c53a779e
state: temporary silence pyflakes warning by removing variable assignment
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38126
diff
changeset
|
86 int(fp.readline()) |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
87 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
88 raise error.CorruptedState( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
89 b"unknown version of state file found" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
90 ) |
39451
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
91 |
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
92 return cborutil.decodeall(fp.read())[0] |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
93 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
94 def delete(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
95 """drop the state file if exists""" |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
96 util.unlinkpath(self._repo.vfs.join(self.fname), ignoremissing=True) |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
97 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
98 def exists(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
99 """check whether the state file exists or not""" |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
100 return self._repo.vfs.exists(self.fname) |
42529
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41135
diff
changeset
|
101 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
102 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
103 class _statecheck: |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
104 """a utility class that deals with multistep operations like graft, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
105 histedit, bisect, update etc and check whether such commands |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
106 are in an unfinished conditition or not and return appropriate message |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
107 and hint. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
108 It also has the ability to register and determine the states of any new |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
109 multistep operation or multistep command extension. |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
110 """ |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
111 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
112 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
113 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
114 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
115 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
116 clearable, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
117 allowcommit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
118 reportonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
119 continueflag, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
120 stopflag, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
121 childopnames, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
122 cmdmsg, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
123 cmdhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
124 statushint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
125 abortfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
126 continuefunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
127 ): |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
128 self._opname = opname |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
129 self._fname = fname |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
130 self._clearable = clearable |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
131 self._allowcommit = allowcommit |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
132 self._reportonly = reportonly |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
133 self._continueflag = continueflag |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
134 self._stopflag = stopflag |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
135 self._childopnames = childopnames |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
136 self._delegating = False |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
137 self._cmdmsg = cmdmsg |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
138 self._cmdhint = cmdhint |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
139 self._statushint = statushint |
42581
bb135a784b70
abort: added logic for of hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
42541
diff
changeset
|
140 self.abortfunc = abortfunc |
42612
3c16b9c0b099
continue: added logic for hg continue
Taapas Agrawal <taapas2897@gmail.com>
parents:
42600
diff
changeset
|
141 self.continuefunc = continuefunc |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
142 |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
143 def statusmsg(self): |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
144 """returns the hint message corresponding to the command for |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
145 hg status --verbose |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
146 """ |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
147 if not self._statushint: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
148 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 b'To continue: hg %s --continue\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 b'To abort: hg %s --abort' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
151 ) % (self._opname, self._opname) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
152 if self._stopflag: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
153 hint = hint + ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 _(b'\nTo stop: hg %s --stop') % (self._opname) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
155 ) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
156 return hint |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
157 return self._statushint |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
158 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
159 def hint(self): |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
160 """returns the hint message corresponding to an interrupted |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
161 operation |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
162 """ |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
163 if not self._cmdhint: |
45215
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
164 if not self._stopflag: |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
165 return _(b"use 'hg %s --continue' or 'hg %s --abort'") % ( |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
166 self._opname, |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
167 self._opname, |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
168 ) |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
169 else: |
45244
d4a28b76fa54
cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com>
parents:
45215
diff
changeset
|
170 return _( |
d4a28b76fa54
cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com>
parents:
45215
diff
changeset
|
171 b"use 'hg %s --continue', 'hg %s --abort', " |
d4a28b76fa54
cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com>
parents:
45215
diff
changeset
|
172 b"or 'hg %s --stop'" |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
173 ) % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
174 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
175 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
176 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
177 ) |
45215
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
178 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
179 return self._cmdhint |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
180 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
181 def msg(self): |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
182 """returns the status message corresponding to the command""" |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
183 if not self._cmdmsg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
184 return _(b'%s in progress') % (self._opname) |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
185 return self._cmdmsg |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
186 |
42533
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
187 def continuemsg(self): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
45942
diff
changeset
|
188 """returns appropriate continue message corresponding to command""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 return _(b'hg %s --continue') % (self._opname) |
42533
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
190 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
191 def isunfinished(self, repo): |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
192 """determines whether a multi-step operation is in progress |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
193 or not |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
194 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 if self._opname == b'merge': |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
196 return len(repo[None].parents()) > 1 |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
197 elif self._delegating: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
198 return False |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
199 else: |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
200 return repo.vfs.exists(self._fname) |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
201 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
202 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
203 # A list of statecheck objects for multistep operations like graft. |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
204 _unfinishedstates = [] |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
205 _unfinishedstatesbyname = {} |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
206 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
207 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
208 def addunfinished( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
209 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
210 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
211 clearable=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
212 allowcommit=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
213 reportonly=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
214 continueflag=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
215 stopflag=False, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
216 childopnames=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 cmdmsg=b"", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 cmdhint=b"", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 statushint=b"", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
220 abortfunc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
221 continuefunc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
222 ): |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
223 """this registers a new command or operation to unfinishedstates |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
224 opname is the name the command or operation |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
225 fname is the file name in which data should be stored in .hg directory. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
226 It is None for merge command. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
227 clearable boolean determines whether or not interrupted states can be |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
228 cleared by running `hg update -C .` which in turn deletes the |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
229 state file. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
230 allowcommit boolean decides whether commit is allowed during interrupted |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
231 state or not. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
232 reportonly flag is used for operations like bisect where we just |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
233 need to detect the operation using 'hg status --verbose' |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
234 continueflag is a boolean determines whether or not a command supports |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
235 `--continue` option or not. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
236 stopflag is a boolean that determines whether or not a command supports |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
237 --stop flag |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
238 childopnames is a list of other opnames this op uses as sub-steps of its |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
239 own execution. They must already be added. |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
240 cmdmsg is used to pass a different status message in case standard |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
241 message of the format "abort: cmdname in progress" is not desired. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
242 cmdhint is used to pass a different hint message in case standard |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
243 message of the format "To continue: hg cmdname --continue |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
244 To abort: hg cmdname --abort" is not desired. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
245 statushint is used to pass a different status message in case standard |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
246 message of the format ('To continue: hg cmdname --continue' |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
247 'To abort: hg cmdname --abort') is not desired |
42581
bb135a784b70
abort: added logic for of hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
42541
diff
changeset
|
248 abortfunc stores the function required to abort an unfinished state. |
42612
3c16b9c0b099
continue: added logic for hg continue
Taapas Agrawal <taapas2897@gmail.com>
parents:
42600
diff
changeset
|
249 continuefunc stores the function required to finish an interrupted |
3c16b9c0b099
continue: added logic for hg continue
Taapas Agrawal <taapas2897@gmail.com>
parents:
42600
diff
changeset
|
250 operation. |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
251 """ |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
252 childopnames = childopnames or [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
253 statecheckobj = _statecheck( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
254 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
255 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
256 clearable, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
257 allowcommit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
258 reportonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
259 continueflag, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
260 stopflag, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
261 childopnames, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
262 cmdmsg, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
263 cmdhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
264 statushint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
265 abortfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
266 continuefunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
267 ) |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
268 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
269 if opname == b'merge': |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
270 _unfinishedstates.append(statecheckobj) |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
271 else: |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
272 # This check enforces that for any op 'foo' which depends on op 'bar', |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
273 # 'foo' comes before 'bar' in _unfinishedstates. This ensures that |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
274 # getrepostate() always returns the most specific applicable answer. |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
275 for childopname in childopnames: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
276 if childopname not in _unfinishedstatesbyname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
277 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
278 _(b'op %s depends on unknown op %s') % (opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
279 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
280 |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
281 _unfinishedstates.insert(0, statecheckobj) |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
282 |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
283 if opname in _unfinishedstatesbyname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
284 raise error.ProgrammingError(_(b'op %s registered twice') % opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
285 _unfinishedstatesbyname[opname] = statecheckobj |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
286 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
287 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
288 def _getparentandchild(opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
289 p = _unfinishedstatesbyname.get(opname, None) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
290 if not p: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
291 raise error.ProgrammingError(_(b'unknown op %s') % opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
292 if childopname not in p._childopnames: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
293 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
294 _(b'op %s does not delegate to %s') % (opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
295 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
296 c = _unfinishedstatesbyname[childopname] |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
297 return p, c |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
298 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
299 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
300 @contextlib.contextmanager |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
301 def delegating(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
302 """context wrapper for delegations from opname to childopname. |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
303 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
304 requires that childopname was specified when opname was registered. |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
305 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
306 Usage: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
307 def my_command_foo_that_uses_rebase(...): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
308 ... |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
309 with state.delegating(repo, 'foo', 'rebase'): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
310 _run_rebase(...) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
311 ... |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
312 """ |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
313 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
314 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
315 if p._delegating: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
316 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
317 _(b'cannot delegate from op %s recursively') % opname |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
318 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
319 p._delegating = True |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
320 try: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
321 yield |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
322 except error.ConflictResolutionRequired as e: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
323 # Rewrite conflict resolution advice for the parent opname. |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
324 if e.opname == childopname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
325 raise error.ConflictResolutionRequired(opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
326 raise e |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
327 finally: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
328 p._delegating = False |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
329 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
330 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
331 def ischildunfinished(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
332 """Returns true if both opname and childopname are unfinished.""" |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
333 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
334 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
335 return (p._delegating or p.isunfinished(repo)) and c.isunfinished(repo) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
336 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
337 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
338 def continuechild(ui, repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
339 """Checks that childopname is in progress, and continues it.""" |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
340 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
341 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
342 if not ischildunfinished(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
343 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
344 _(b'child op %s of parent %s is not unfinished') |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
345 % (childopname, opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
346 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
347 if not c.continuefunc: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
348 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
349 _(b'op %s has no continue function') % childopname |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
350 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
351 return c.continuefunc(ui, repo) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
352 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
353 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
354 addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
355 b'update', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 fname=b'updatestate', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
357 clearable=True, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 cmdmsg=_(b'last update was interrupted'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
359 cmdhint=_(b"use 'hg update' to get a consistent checkout"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
360 statushint=_(b"To continue: hg update ."), |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
361 ) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
362 addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
363 b'bisect', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 fname=b'bisect.state', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
365 allowcommit=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
366 reportonly=True, |
49829
8ced4ca30ea1
bisect: correct message about aborting an in-progress bisect (issue6527)
Anton Shestakov <av6@dwimlabs.net>
parents:
48946
diff
changeset
|
367 cmdhint=_(b"use 'hg bisect --reset'"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
368 statushint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
369 b'To mark the changeset good: hg bisect --good\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 b'To mark the changeset bad: hg bisect --bad\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 b'To abort: hg bisect --reset\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
372 ), |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
373 ) |
42531
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
374 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
375 |
42531
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
376 def getrepostate(repo): |
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
377 # experimental config: commands.status.skipstates |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 skip = set(repo.ui.configlist(b'commands', b'status.skipstates')) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
379 for state in _unfinishedstates: |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
380 if state._opname in skip: |
42531
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
381 continue |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
382 if state.isunfinished(repo): |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
383 return (state._opname, state.statusmsg()) |