##// END OF EJS Templates
repository: define manifest interfaces...
repository: define manifest interfaces The long march towards declaring interfaces for repository primitives continues. This commit essentially defines interfaces based on the following types: * manifest.manifestdict -> imanifestdict * manifest.manifestlog -> imanifestlog * manifest.memmanifestctx -> imanifestrevisionwritable * manifest.manifestctx -> imanifestrevisionstored * manifest.memtreemanifestctx -> imanifestrevisionwritable * manifest.treemanifestctx -> imanifestrevisionstored * util.dirs -> idirs The interfaces are thoroughly documented. Their documentation is now better than the documentation in manifest.py in many cases. With the exception of util.dirs, classes have been annotated with their interfaces. (I didn't feel like util.dirs needed the proper interface treatment.) Tests have been added demonstrating that all classes and instances conform to their interfaces. This work was much easier than filelogs. That's because Durham did an excellent job formalizing the manifest API a while back. There are still some minor kludges with the interfaces that should probably be addressed. But the primary goal with interface declarations is getting something established. Once we have an interface, we can modify it later easily enough. Differential Revision: https://phab.mercurial-scm.org/D3869

File last commit:

r37947:7cd1e1ad default
r38549:c82ea938 default
Show More
test-lfs-pointer.py
45 lines | 1.4 KiB | text/x-python | PythonLexer
/ tests / test-lfs-pointer.py
Matt Harbison
lfs: import the Facebook git-lfs client extension...
r35097 from __future__ import absolute_import, print_function
import os
import sys
# make it runnable using python directly without run-tests.py
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..')]
Augie Fackler
tests: port test-lfs-pointer.py to Python 3...
r37947 # Import something from Mercurial, so the module loader gets initialized.
from mercurial import pycompat
del pycompat # unused for now
Matt Harbison
lfs: import the Facebook git-lfs client extension...
r35097 from hgext.lfs import pointer
def tryparse(text):
r = {}
try:
r = pointer.deserialize(text)
print('ok')
except Exception as ex:
Augie Fackler
tests: port test-lfs-pointer.py to Python 3...
r37947 print((b'%s' % ex).decode('ascii'))
Matt Harbison
lfs: import the Facebook git-lfs client extension...
r35097 if r:
text2 = r.serialize()
if text2 != text:
print('reconstructed text differs')
return r
Augie Fackler
tests: port test-lfs-pointer.py to Python 3...
r37947 t = (b'version https://git-lfs.github.com/spec/v1\n'
b'oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1'
b'258daaa5e2ca24d17e2393\n'
b'size 12345\n'
b'x-foo extra-information\n')
Matt Harbison
lfs: import the Facebook git-lfs client extension...
r35097
Augie Fackler
tests: port test-lfs-pointer.py to Python 3...
r37947 tryparse(b'')
Matt Harbison
lfs: import the Facebook git-lfs client extension...
r35097 tryparse(t)
Augie Fackler
tests: port test-lfs-pointer.py to Python 3...
r37947 tryparse(t.replace(b'git-lfs', b'unknown'))
tryparse(t.replace(b'v1\n', b'v1\n\n'))
tryparse(t.replace(b'sha256', b'ahs256'))
tryparse(t.replace(b'sha256:', b''))
tryparse(t.replace(b'12345', b'0x12345'))
tryparse(t.replace(b'extra-information', b'extra\0information'))
tryparse(t.replace(b'extra-information', b'extra\ninformation'))
tryparse(t.replace(b'x-foo', b'x_foo'))
tryparse(t.replace(b'oid', b'blobid'))
tryparse(t.replace(b'size', b'size-bytes').replace(b'oid', b'object-id'))