20 from __future__ import absolute_import |
20 from __future__ import absolute_import |
21 |
21 |
22 from .thirdparty import cbor |
22 from .thirdparty import cbor |
23 |
23 |
24 from . import ( |
24 from . import ( |
|
25 error, |
25 util, |
26 util, |
26 ) |
27 ) |
27 |
28 |
28 class cmdstate(object): |
29 class cmdstate(object): |
29 """a wrapper class to store the state of commands like `rebase`, `graft`, |
30 """a wrapper class to store the state of commands like `rebase`, `graft`, |
49 |
50 |
50 def read(self): |
51 def read(self): |
51 """read the existing state file and return a dict of data stored""" |
52 """read the existing state file and return a dict of data stored""" |
52 return self._read() |
53 return self._read() |
53 |
54 |
54 def save(self, data): |
55 def save(self, version, data): |
55 """write all the state data stored to .hg/<filename> file |
56 """write all the state data stored to .hg/<filename> file |
56 |
57 |
57 we use third-party library cbor to serialize data to write in the file. |
58 we use third-party library cbor to serialize data to write in the file. |
58 """ |
59 """ |
|
60 if not isinstance(version, int): |
|
61 raise error.ProgrammingError("version of state file should be" |
|
62 " an integer") |
|
63 |
59 with self._repo.vfs(self.fname, 'wb', atomictemp=True) as fp: |
64 with self._repo.vfs(self.fname, 'wb', atomictemp=True) as fp: |
|
65 fp.write('%d\n' % iv) |
60 cbor.dump(self.opts, fp, canonical=True) |
66 cbor.dump(self.opts, fp, canonical=True) |
61 |
67 |
62 def _read(self): |
68 def _read(self): |
63 """reads the state file and returns a dictionary which contain |
69 """reads the state file and returns a dictionary which contain |
64 data in the same format as it was before storing""" |
70 data in the same format as it was before storing""" |
65 with self._repo.vfs(self.fname, 'rb') as fp: |
71 with self._repo.vfs(self.fname, 'rb') as fp: |
|
72 try: |
|
73 version = int(fp.readline()) |
|
74 except ValueError: |
|
75 raise error.ProgrammingError("unknown version of state file" |
|
76 " found") |
66 return cbor.load(fp) |
77 return cbor.load(fp) |
67 |
78 |
68 def delete(self): |
79 def delete(self): |
69 """drop the state file if exists""" |
80 """drop the state file if exists""" |
70 util.unlinkpath(self._repo.vfs.join(self.fname), ignoremissing=True) |
81 util.unlinkpath(self._repo.vfs.join(self.fname), ignoremissing=True) |