annotate mercurial/state.py @ 42541:faec09d89435

statecheck: shifted defaults to addunfinished() This shifts the definitions and defaults of `_statecheck()` class to `addunfinished()` registration method. Differential Revision: https://phab.mercurial-scm.org/D6583
author Taapas Agrawal <taapas2897@gmail.com>
date Fri, 28 Jun 2019 03:15:39 +0530
parents 0231032729c4
children 3de4f17f4824
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
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
42536
5f2f6912c9e6 states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 41136
diff changeset
22 from .i18n import _
5f2f6912c9e6 states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 41136
diff changeset
23
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
24 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
25 error,
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
26 util,
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
27 )
39470
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
28 from .utils import (
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
29 cborutil,
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
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
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
32 class cmdstate(object):
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
33 """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
34 `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
35
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
36 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
37 dictionary.
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
38
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
39 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
40 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
41
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
42 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
43 disk.
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
44 """
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
45
38178
6f67bfe4b82f state: removing remaining instances of opts class variable
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38166
diff changeset
46 def __init__(self, repo, fname):
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
47 """ repo is the repo object
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
48 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
49 """
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
50 self._repo = repo
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
51 self.fname = fname
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
52
38137
36a5a1239a15 state: don't have a dict like interface for cmdstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38136
diff changeset
53 def read(self):
36a5a1239a15 state: don't have a dict like interface for cmdstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38136
diff changeset
54 """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
55 return self._read()
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
56
38139
a0e4d654bceb state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38138
diff changeset
57 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
58 """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
59
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
60 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
61 """
38139
a0e4d654bceb state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38138
diff changeset
62 if not isinstance(version, int):
a0e4d654bceb state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38138
diff changeset
63 raise error.ProgrammingError("version of state file should be"
a0e4d654bceb state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38138
diff changeset
64 " an integer")
a0e4d654bceb state: write the version number in plain text on top of state files
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38138
diff changeset
65
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
66 with self._repo.vfs(self.fname, 'wb', atomictemp=True) as fp:
38159
bdc4079ceb16 state: fix usage of an unassigned variable
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38139
diff changeset
67 fp.write('%d\n' % version)
39470
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
68 for chunk in cborutil.streamencode(data):
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
69 fp.write(chunk)
38136
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
70
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
71 def _read(self):
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
72 """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
73 data in the same format as it was before storing"""
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
74 with self._repo.vfs(self.fname, '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
75 try:
38160
b7e5c53a779e state: temporary silence pyflakes warning by removing variable assignment
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38159
diff changeset
76 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
77 except ValueError:
38166
dce718404ce6 state: raise CorruptedState error isntead of ProgrammingError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38160
diff changeset
78 raise error.CorruptedState("unknown version of state file"
dce718404ce6 state: raise CorruptedState error isntead of ProgrammingError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38160
diff changeset
79 " found")
39470
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
80
5bfab9400daf state: use our CBOR module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38178
diff changeset
81 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
82
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
83 def delete(self):
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
84 """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
85 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
86
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
87 def exists(self):
a2f83661f721 state: import the file to write state files from evolve extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
88 """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
89 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
90
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
91 class _statecheck(object):
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
92 """a utility class that deals with multistep operations like graft,
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
93 histedit, bisect, update etc and check whether such commands
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
94 are in an unfinished conditition or not and return appropriate message
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
95 and hint.
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
96 It also has the ability to register and determine the states of any new
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
97 multistep operation or multistep command extension.
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
98 """
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
99
42541
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
100 def __init__(self, opname, fname, clearable, allowcommit, reportonly,
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
101 continueflag, stopflag, cmdmsg, cmdhint, statushint):
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
102 self._opname = opname
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
103 self._fname = fname
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
104 self._clearable = clearable
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
105 self._allowcommit = allowcommit
42541
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
106 self._reportonly = reportonly
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
107 self._continueflag = continueflag
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
108 self._stopflag = stopflag
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
109 self._cmdmsg = cmdmsg
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
110 self._cmdhint = cmdhint
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
111 self._statushint = statushint
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
112
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
113 def statusmsg(self):
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
114 """returns the hint message corresponding to the command for
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
115 hg status --verbose
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
116 """
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
117 if not self._statushint:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
118 hint = (_('To continue: hg %s --continue\n'
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
119 'To abort: hg %s --abort') % (self._opname,
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
120 self._opname))
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
121 if self._stopflag:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
122 hint = hint + (_('\nTo stop: hg %s --stop') %
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
123 (self._opname))
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
124 return hint
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
125 return self._statushint
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
126
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
127 def hint(self):
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
128 """returns the hint message corresponding to an interrupted
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
129 operation
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
130 """
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
131 if not self._cmdhint:
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
132 return (_("use 'hg %s --continue' or 'hg %s --abort'") %
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
133 (self._opname, self._opname))
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
134 return self._cmdhint
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
135
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
136 def msg(self):
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
137 """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
138 if not self._cmdmsg:
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
139 return _('%s in progress') % (self._opname)
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
140 return self._cmdmsg
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
141
42540
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
142 def continuemsg(self):
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
143 """ returns appropriate continue message corresponding to command"""
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
144 return _('hg %s --continue') % (self._opname)
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
145
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
146 def isunfinished(self, repo):
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
147 """determines whether a multi-step operation is in progress
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
148 or not
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
149 """
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
150 if self._opname == 'merge':
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
151 return len(repo[None].parents()) > 1
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
152 else:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
153 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
154
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
155 # 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
156 _unfinishedstates = []
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
157
42541
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
158 def addunfinished(opname, fname, clearable=False, allowcommit=False,
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
159 reportonly=False, continueflag=False, stopflag=False,
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
160 cmdmsg="", cmdhint="", statushint=""):
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
161 """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
162 opname is the name the command or operation
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
163 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
164 It is None for merge command.
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
165 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
166 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
167 state file.
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
168 allowcommit boolean decides whether commit is allowed during interrupted
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
169 state or not.
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
170 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
171 need to detect the operation using 'hg status --verbose'
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
172 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
173 `--continue` option or not.
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
174 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
175 --stop flag
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
176 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
177 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
178 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
179 message of the format "To continue: hg cmdname --continue
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
180 To abort: hg cmdname --abort" is not desired.
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
181 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
182 message of the format ('To continue: hg cmdname --continue'
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
183 'To abort: hg cmdname --abort') is not desired
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
184 """
42541
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
185 statecheckobj = _statecheck(opname, fname, clearable, allowcommit,
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
186 reportonly, continueflag, stopflag, cmdmsg,
faec09d89435 statecheck: shifted defaults to addunfinished()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42540
diff changeset
187 cmdhint, statushint)
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
188 if opname == 'merge':
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
189 _unfinishedstates.append(statecheckobj)
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
190 else:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
191 _unfinishedstates.insert(0, statecheckobj)
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
192
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
193 addunfinished(
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
194 'graft', fname='graftstate', clearable=True, stopflag=True,
42540
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
195 continueflag=True,
0231032729c4 statecheck: added support for cmdutil.afterresolvedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42539
diff changeset
196 cmdhint=_("use 'hg graft --continue' or 'hg graft --stop' to stop")
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
197 )
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
198 addunfinished(
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
199 'update', fname='updatestate', clearable=True,
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
200 cmdmsg=_('last update was interrupted'),
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
201 cmdhint=_("use 'hg update' to get a consistent checkout"),
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
202 statushint=_("To continue: hg update")
42537
dc3fdd1b5af4 state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents: 42536
diff changeset
203 )
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
204 addunfinished(
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
205 'bisect', fname='bisect.state', allowcommit=True, reportonly=True,
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
206 statushint=_('To mark the changeset good: hg bisect --good\n'
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
207 'To mark the changeset bad: hg bisect --bad\n'
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
208 'To abort: hg bisect --reset\n')
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
209 )
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
210 addunfinished(
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
211 'merge', fname=None, clearable=True, allowcommit=True,
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
212 cmdmsg=_('outstanding uncommitted merge'),
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
213 statushint=_('To continue: hg commit\n'
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
214 'To abort: hg merge --abort'),
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
215 cmdhint=_("use 'hg commit' or 'hg merge --abort'")
42538
5bddd2244814 state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42537
diff changeset
216 )
5bddd2244814 state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42537
diff changeset
217
5bddd2244814 state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42537
diff changeset
218 def getrepostate(repo):
5bddd2244814 state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42537
diff changeset
219 # experimental config: commands.status.skipstates
5bddd2244814 state: moved cmdutil.STATES and utilities to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents: 42537
diff changeset
220 skip = set(repo.ui.configlist('commands', 'status.skipstates'))
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
221 for state in _unfinishedstates:
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
222 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
223 continue
42539
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
224 if state.isunfinished(repo):
12243f15d53e statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents: 42538
diff changeset
225 return (state._opname, state.statusmsg())