##// END OF EJS Templates
largefiles: check hash of files in the store before copying to working dir...
largefiles: check hash of files in the store before copying to working dir If the store somehow got corrupted, users could end up in weird situations that were very hard to recover from or lead to propagation of the corruption. Instead, spend the extra time checking the hash when copying to the working directory. If it doesn't match, emit a warning, and don't put wrong content in the working directory.

File last commit:

r12387:4f8067c9 default
r26823:45e8bd2f stable
Show More
diffhelpers.py
60 lines | 1.5 KiB | text/x-python | PythonLexer
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 # diffhelpers.py - pure Python implementation of diffhelpers.c
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
Martin Geisler
updated license to be explicit about GPL version 2
r8225 # This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
def addlines(fp, hunk, lena, lenb, a, b):
while True:
todoa = lena - len(a)
todob = lenb - len(b)
num = max(todoa, todob)
if num == 0:
break
for i in xrange(num):
s = fp.readline()
c = s[0]
if s == "\\ No newline at end of file\n":
fix_newline(hunk, a, b)
continue
if c == "\n":
# Some patches may be missing the control char
# on empty lines. Supply a leading space.
s = " \n"
hunk.append(s)
if c == "+":
b.append(s[1:])
elif c == "-":
a.append(s)
else:
b.append(s[1:])
a.append(s)
return 0
def fix_newline(hunk, a, b):
l = hunk[-1]
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 # tolerate CRLF in last line
if l.endswith('\r\n'):
hline = l[:-2]
else:
hline = l[:-1]
c = hline[0]
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
Brodie Rao
cleanup: use x in (a, b) instead of x == a or x == b
r12387 if c in " +":
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 b[-1] = hline[1:]
Brodie Rao
cleanup: use x in (a, b) instead of x == a or x == b
r12387 if c in " -":
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 a[-1] = hline
hunk[-1] = hline
return 0
def testhunk(a, b, bstart):
alen = len(a)
blen = len(b)
if alen > blen - bstart:
return -1
for i in xrange(alen):
if a[i][1:] != b[i + bstart]:
return -1
return 0