D3572: state: don't have a dict like interface for cmdstate class
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Thu May 17 12:06:34 UTC 2018
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
This patch changes the cmdstate class to stop having a dict like interface and
delete the __nonzero__ function. After this patch, the save fuction takes a dict
to store the data and read function returns a dict of the data stored.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D3572
AFFECTED FILES
mercurial/state.py
CHANGE DETAILS
diff --git a/mercurial/state.py b/mercurial/state.py
--- a/mercurial/state.py
+++ b/mercurial/state.py
@@ -46,42 +46,35 @@
"""
self._repo = repo
self.fname = fname
- if not opts:
- self.opts = {}
- else:
- self.opts = opts
-
- def __nonzero__(self):
- return self.exists()
-
- def __getitem__(self, key):
- return self.opts[key]
- def __setitem__(self, key, value):
- updates = {key: value}
- self.opts.update(updates)
+ def read(self):
+ """read the existing state file and return a dict of data stored"""
+ return self._read()
- def load(self):
- """load the existing state file into the class object"""
- op = self._read()
- self.opts.update(op)
-
- def addopts(self, opts):
- """add more key-value pairs to the data stored by the object"""
- self.opts.update(opts)
-
- def save(self):
+ def save(self, version, data):
"""write all the state data stored to .hg/<filename> file
we use third-party library cbor to serialize data to write in the file.
"""
+ try:
+ iv = int(version)
+ except ValueError:
+ raise error.ProgrammingError("version of state file should be"
+ " an integer")
+
with self._repo.vfs(self.fname, 'wb', atomictemp=True) as fp:
+ fp.write('%d\n' % iv)
cbor.dump(self.opts, fp)
def _read(self):
"""reads the state file and returns a dictionary which contain
data in the same format as it was before storing"""
with self._repo.vfs(self.fname, 'rb') as fp:
+ try:
+ version = int(fp.readline())
+ except ValueError:
+ raise error.ProgrammingError("unknown version of state file"
+ " found")
return cbor.load(fp)
def delete(self):
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list