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