tests/test-lfs-pointer.py
author Yuya Nishihara <yuya@tcha.org>
Sat, 12 Oct 2019 23:34:05 +0900
changeset 44203 2a24ead003f0
parent 43076 2372284d9457
child 48875 6000f5b25c9b
permissions -rw-r--r--
rust-cpython: add panicking version of borrow_mut() and use it The original borrow_mut() is renamed to try_borrow_mut(). Since leak_immutable() no longer incref the borrow count, the caller should know if the underlying value is borrowed or not. No Python world is involved. That's why we can simply use the panicking borrow_mut().

from __future__ import absolute_import, print_function

# Import something from Mercurial, so the module loader gets initialized.
from mercurial import pycompat

del pycompat  # unused for now

from hgext.lfs import pointer


def tryparse(text):
    r = {}
    try:
        r = pointer.deserialize(text)
        print('ok')
    except Exception as ex:
        print((b'%s' % ex).decode('ascii'))
    if r:
        text2 = r.serialize()
        if text2 != text:
            print('reconstructed text differs')
    return r


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'
)

tryparse(b'')
tryparse(t)
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'))