D3579: state: write the version number in plain text on top of state files

Yuya Nishihara yuya at tcha.org
Tue May 22 07:12:50 EDT 2018


> -    def save(self, data):
> +    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.
>          """
> +        if not isinstance(version, int):
> +            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, canonical=True)
>  
>      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())

mercurial/state.py:65: undefined name 'iv'
mercurial/state.py:73: local variable 'version' is assigned to but never used

> +            except ValueError:
> +                raise error.ProgrammingError("unknown version of state file"
> +                                             " found")

Perhaps this should be a CorruptedState error. We don't know whether the
state file is good until reading it.


More information about the Mercurial-devel mailing list