mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
a024f96812
Summary: Read the Git-LFS specification [1] and implement most checks to prevent programming error and detect data corruption. The new code should be stronger than what was before the refactoring, since the old code only checks keys but not values. [1]: https://github.com/git-lfs/git-lfs/blob/master/docs/spec.md Test Plan: Added a new test Reviewers: #mercurial, davidsp, rmcelroy Reviewed By: rmcelroy Subscribers: mjpieters Differential Revision: https://phabricator.intern.facebook.com/D5046740 Signature: t1:5046740:1494543072:2f0dbfc07cd52a10572550a277d850bdf3f78d27
42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
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__), '..')]
|
|
|
|
from hgext3rd.lfs import pointer
|
|
|
|
def tryparse(text):
|
|
r = {}
|
|
try:
|
|
r = pointer.deserialize(text)
|
|
print('ok')
|
|
except Exception as ex:
|
|
print(ex)
|
|
if r:
|
|
text2 = r.serialize()
|
|
if text2 != text:
|
|
print('reconstructed text differs')
|
|
return r
|
|
|
|
t = ('version https://git-lfs.github.com/spec/v1\n'
|
|
'oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1'
|
|
'258daaa5e2ca24d17e2393\n'
|
|
'size 12345\n'
|
|
'x-foo extra-information\n')
|
|
|
|
tryparse('')
|
|
tryparse(t)
|
|
tryparse(t.replace('git-lfs', 'unknown'))
|
|
tryparse(t.replace('v1\n', 'v1\n\n'))
|
|
tryparse(t.replace('sha256', 'ahs256'))
|
|
tryparse(t.replace('sha256:', ''))
|
|
tryparse(t.replace('12345', '0x12345'))
|
|
tryparse(t.replace('extra-information', 'extra\0information'))
|
|
tryparse(t.replace('extra-information', 'extra\ninformation'))
|
|
tryparse(t.replace('x-foo', 'x_foo'))
|
|
tryparse(t.replace('oid', 'blobid'))
|
|
tryparse(t.replace('size', 'size-bytes').replace('oid', 'object-id'))
|