Mercurial > hg
annotate mercurial/state.py @ 46490:86b019899737 stable
hooks: forbid ':' in hook name
The `:` character is a special separator in the config and it seems same do to
the same for hooks. This is necessary to improve the experience around the
HGPLAIN behavior change in 5.7. See next changesets for details.
Differential Revision: https://phab.mercurial-scm.org/D9978
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 10 Feb 2021 21:05:05 +0100 |
parents | 89a2afe31e82 |
children | f38bf44e077f |
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 from __future__ import absolute_import |
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:
43773
diff
changeset
|
22 import contextlib |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
23 |
42529
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41135
diff
changeset
|
24 from .i18n import _ |
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41135
diff
changeset
|
25 |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
26 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
|
27 error, |
43773
7b14d649af1b
typing: consolidate "if not globals():" trick
Yuya Nishihara <yuya@tcha.org>
parents:
43702
diff
changeset
|
28 pycompat, |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
29 util, |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
30 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
31 from .utils import cborutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
32 |
43773
7b14d649af1b
typing: consolidate "if not globals():" trick
Yuya Nishihara <yuya@tcha.org>
parents:
43702
diff
changeset
|
33 if pycompat.TYPE_CHECKING: |
43702
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
34 from typing import ( |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
35 Any, |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
36 Dict, |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
37 ) |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
38 |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
39 for t in (Any, Dict): |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
40 assert t |
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
41 |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
42 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
43 class cmdstate(object): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
44 """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
|
45 `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
|
46 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
47 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
|
48 dictionary. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
49 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
50 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
|
51 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
|
52 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
53 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
|
54 disk. |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
55 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
56 |
38145
6f67bfe4b82f
state: removing remaining instances of opts class variable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38133
diff
changeset
|
57 def __init__(self, repo, fname): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
58 """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
|
59 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
|
60 """ |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 self._repo = repo |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
62 self.fname = fname |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
63 |
38104
36a5a1239a15
state: don't have a dict like interface for cmdstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38103
diff
changeset
|
64 def read(self): |
43702
127d46468a45
state: add a pytype annotation
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
65 # type: () -> 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
|
66 """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
|
67 return self._read() |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
68 |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
69 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
|
70 """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
|
71 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
72 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
|
73 """ |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
74 if not isinstance(version, int): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
75 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
|
76 b"version of state file should be an integer" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
77 ) |
38106
a0e4d654bceb
state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38105
diff
changeset
|
78 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 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
|
80 fp.write(b'%d\n' % version) |
39451
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
81 for chunk in cborutil.streamencode(data): |
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
82 fp.write(chunk) |
38103
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
83 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
84 def _read(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
85 """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
|
86 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
|
87 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
|
88 try: |
38127
b7e5c53a779e
state: temporary silence pyflakes warning by removing variable assignment
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38126
diff
changeset
|
89 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
|
90 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
91 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
|
92 b"unknown version of state file found" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
93 ) |
39451
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
94 |
5bfab9400daf
state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38145
diff
changeset
|
95 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
|
96 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
97 def delete(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
98 """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
|
99 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
|
100 |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
101 def exists(self): |
a2f83661f721
state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
102 """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
|
103 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
|
104 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
105 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
106 class _statecheck(object): |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
107 """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
|
108 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
|
109 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
|
110 and hint. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
111 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
|
112 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
|
113 """ |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
114 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
115 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
116 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
117 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
118 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
119 clearable, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
120 allowcommit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
121 reportonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
122 continueflag, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
123 stopflag, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
124 childopnames, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
125 cmdmsg, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
126 cmdhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
127 statushint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
128 abortfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
129 continuefunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
130 ): |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
131 self._opname = opname |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
132 self._fname = fname |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
133 self._clearable = clearable |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
134 self._allowcommit = allowcommit |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
135 self._reportonly = reportonly |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
136 self._continueflag = continueflag |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
137 self._stopflag = stopflag |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
138 self._childopnames = childopnames |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
139 self._delegating = False |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
140 self._cmdmsg = cmdmsg |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
141 self._cmdhint = cmdhint |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
142 self._statushint = statushint |
42581
bb135a784b70
abort: added logic for of hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
42541
diff
changeset
|
143 self.abortfunc = abortfunc |
42612
3c16b9c0b099
continue: added logic for hg continue
Taapas Agrawal <taapas2897@gmail.com>
parents:
42600
diff
changeset
|
144 self.continuefunc = continuefunc |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
145 |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
146 def statusmsg(self): |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
147 """returns the hint message corresponding to the command for |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
148 hg status --verbose |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
149 """ |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
150 if not self._statushint: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
151 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
152 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
|
153 b'To abort: hg %s --abort' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
154 ) % (self._opname, self._opname) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
155 if self._stopflag: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
156 hint = hint + ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 _(b'\nTo stop: hg %s --stop') % (self._opname) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
158 ) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
159 return hint |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
160 return self._statushint |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
161 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
162 def hint(self): |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
163 """returns the hint message corresponding to an interrupted |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
164 operation |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
165 """ |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
166 if not self._cmdhint: |
45215
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
167 if not self._stopflag: |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
168 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
|
169 self._opname, |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
170 self._opname, |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
171 ) |
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
172 else: |
45244
d4a28b76fa54
cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com>
parents:
45215
diff
changeset
|
173 return _( |
d4a28b76fa54
cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com>
parents:
45215
diff
changeset
|
174 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
|
175 b"or 'hg %s --stop'" |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
176 ) % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
177 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
178 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
179 self._opname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45244
diff
changeset
|
180 ) |
45215
a253ded5b03d
morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents:
45171
diff
changeset
|
181 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
182 return self._cmdhint |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
183 |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
184 def msg(self): |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
185 """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
|
186 if not self._cmdmsg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 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
|
188 return self._cmdmsg |
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
189 |
42533
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
190 def continuemsg(self): |
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
191 """ 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
|
192 return _(b'hg %s --continue') % (self._opname) |
42533
0231032729c4
statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
193 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
194 def isunfinished(self, repo): |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
195 """determines whether a multi-step operation is in progress |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
196 or not |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
197 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 if self._opname == b'merge': |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
199 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
|
200 elif self._delegating: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
201 return False |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
202 else: |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
203 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
|
204 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
205 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
206 # 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
|
207 _unfinishedstates = [] |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
208 _unfinishedstatesbyname = {} |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
209 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
210 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
211 def addunfinished( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
212 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
213 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
214 clearable=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
215 allowcommit=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
216 reportonly=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
217 continueflag=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
218 stopflag=False, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
219 childopnames=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 cmdmsg=b"", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 cmdhint=b"", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 statushint=b"", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
223 abortfunc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
224 continuefunc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
225 ): |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
226 """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
|
227 opname is the name the command or operation |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
228 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
|
229 It is None for merge command. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
230 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
|
231 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
|
232 state file. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
233 allowcommit boolean decides whether commit is allowed during interrupted |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
234 state or not. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
235 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
|
236 need to detect the operation using 'hg status --verbose' |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
237 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
|
238 `--continue` option or not. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
239 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
|
240 --stop flag |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
241 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
|
242 own execution. They must already be added. |
42534
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
243 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
|
244 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
|
245 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
|
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. |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
248 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
|
249 message of the format ('To continue: hg cmdname --continue' |
faec09d89435
statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
250 '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
|
251 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
|
252 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
|
253 operation. |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
254 """ |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
255 childopnames = childopnames or [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
256 statecheckobj = _statecheck( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
257 opname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
258 fname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
259 clearable, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
260 allowcommit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
261 reportonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
262 continueflag, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
263 stopflag, |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
264 childopnames, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
265 cmdmsg, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
266 cmdhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
267 statushint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
268 abortfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
269 continuefunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
270 ) |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
271 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 if opname == b'merge': |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
273 _unfinishedstates.append(statecheckobj) |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
274 else: |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
275 # 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
|
276 # '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
|
277 # 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
|
278 for childopname in childopnames: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
279 if childopname not in _unfinishedstatesbyname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
280 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
281 _(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
|
282 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
283 |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
284 _unfinishedstates.insert(0, statecheckobj) |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
285 |
45171
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
286 if opname in _unfinishedstatesbyname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
287 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
|
288 _unfinishedstatesbyname[opname] = statecheckobj |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
289 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
290 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
291 def _getparentandchild(opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
292 p = _unfinishedstatesbyname.get(opname, None) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
293 if not p: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
294 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
|
295 if childopname not in p._childopnames: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
296 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
297 _(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
|
298 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
299 c = _unfinishedstatesbyname[childopname] |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
300 return p, c |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
301 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
302 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
303 @contextlib.contextmanager |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
304 def delegating(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
305 """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
|
306 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
307 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
|
308 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
309 Usage: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
310 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
|
311 ... |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
312 with state.delegating(repo, 'foo', 'rebase'): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
313 _run_rebase(...) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
314 ... |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
315 """ |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
316 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
317 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
318 if p._delegating: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
319 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
320 _(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
|
321 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
322 p._delegating = True |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
323 try: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
324 yield |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
325 except error.ConflictResolutionRequired as e: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
326 # 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
|
327 if e.opname == childopname: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
328 raise error.ConflictResolutionRequired(opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
329 raise e |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
330 finally: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
331 p._delegating = False |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
332 |
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 def ischildunfinished(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
335 """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
|
336 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
337 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
338 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
|
339 |
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 def continuechild(ui, repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
342 """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
|
343 |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
344 p, c = _getparentandchild(opname, childopname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
345 if not ischildunfinished(repo, opname, childopname): |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
346 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
347 _(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
|
348 % (childopname, opname) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
349 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
350 if not c.continuefunc: |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
351 raise error.ProgrammingError( |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
352 _(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
|
353 ) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
354 return c.continuefunc(ui, repo) |
5322e738be0f
state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com>
parents:
43773
diff
changeset
|
355 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
356 |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
357 addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 b'update', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
359 fname=b'updatestate', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
360 clearable=True, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
361 cmdmsg=_(b'last update was interrupted'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
362 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
|
363 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
|
364 ) |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
365 addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 b'bisect', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
367 fname=b'bisect.state', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
368 allowcommit=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
369 reportonly=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
370 statushint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 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
|
372 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
|
373 b'To abort: hg bisect --reset\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
374 ), |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
375 ) |
42531
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
376 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43045
diff
changeset
|
377 |
42531
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
378 def getrepostate(repo): |
5bddd2244814
state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
379 # experimental config: commands.status.skipstates |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 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
|
381 for state in _unfinishedstates: |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
382 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
|
383 continue |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
384 if state.isunfinished(repo): |
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42531
diff
changeset
|
385 return (state._opname, state.statusmsg()) |