py3: use stringutil.pprint() to prevent b'' prefixes in output
This patch uses stringutil.pprint to print a list with bytes in it to prevent
the b'' prefixes in the output.
Differential Revision: https://phab.mercurial-scm.org/D3632
py3: use pycompat.fsencode to convert path to bytes
Differential Revision: https://phab.mercurial-scm.org/D3631
py3: add b'' prefixes in tests/test-ssh.t and tests/test-ssh-bundle1.t
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D3630
py3: add b'' prefixes in contrib/hg-ssh
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D3629
state: write the version number in plain text on top of state files
We will soon be using CBOR format to write the data in state files. But we
should not write the version number of the state files in CBOR format and we
should rather write it in plain text because in future we can change the format
of state files and we should be able to parse the version number of state file
without requiring to understand a certain format.
This will help us in making sure we have a good compatibility story with other
versions of state files.
Differential Revision: https://phab.mercurial-scm.org/D3579
state: set canonical=True to write deterministically
Passing canonical=True to cbor.dump() will help in writing the data
deterministically. This will sort all the sets and dicts before writing to the
file. Thanks indygreg for recommending to use it.
Differential Revision: https://phab.mercurial-scm.org/D3578
state: don't have a dict like interface for cmdstate class
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.
Differential Revision: https://phab.mercurial-scm.org/D3572
state: import the file to write state files from evolve extension
The current way of writing state files is very obscure with each state file
having it's own format to store state files. There is no centralized way to
write state files in a good format. Moreover the current state files are not
extensible, you cannot add more data to store in state files in reliable ways.
To solve the problem, I wrote my own serialization and deserialization format,
looked into existing formats like Protobuf, MessagePack, JSON but CBOR looks
very promising and is suggested by people in the community.
The current interface to store state files is to directly write data in files
when things abort. Using the class imported by this commit, we can create
objects which has a dict like interface and can store data on the object and
store it on the file when things abort.
The evolve extension is using the state file for `evolve`, `grab` commands and
using it for resolution of orphaness, phase-divergence and content-divergence.
The file is moved from changeset
e4ac2e2c2086f977afa35e23a62f849e9305a225 of the
evolve extension which is also tagged as 7.3.0.
The following changes are made to the file while moving to core:
* import util from current directory as this file in mercurial/ now
* make cmdstate class extend object
* removed mutable default value for opts in cmdstate.__init__
* some doc changes to replace out of core things with in-core ones
evolve extension can be found at https://bitbucket.org/marmoute/mutable-history
Differential Revision: https://phab.mercurial-scm.org/D2591