##// END OF EJS Templates
lfs: update the HTTP status codes in error cases...
lfs: update the HTTP status codes in error cases I'm not bothering with validating PUT requests (for now), because the spec doesn't explicitly call out a Content-Type (though the example transcript does use the sensible 'application/octet-stream').

File last commit:

r37593:230eb959 default
r37711:31a0d47d default
Show More
diffhelpers.py
77 lines | 2.2 KiB | text/x-python | PythonLexer
Yuya Nishihara
diffhelpers: move out of pure package
r37589 # diffhelpers.py - helper routines for patch
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
Yuya Nishihara
patch: error out if reached to EOF while reading hunk...
r37591 from .i18n import _
from . import (
error,
)
Yuya Nishihara
diffhelpers: move out of pure package
r37589 def addlines(fp, hunk, lena, lenb, a, b):
"""Read lines from fp into the hunk
The hunk is parsed into two arrays, a and b. a gets the old state of
the text, b gets the new state. The control char from the hunk is saved
when inserting into a, but not b (for performance while deleting files.)
"""
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()
Yuya Nishihara
patch: error out if reached to EOF while reading hunk...
r37591 if not s:
raise error.ParseError(_('incomplete hunk'))
Yuya Nishihara
diffhelpers: move out of pure package
r37589 if s == "\\ No newline at end of file\n":
fixnewline(hunk, a, b)
continue
Yuya Nishihara
diffhelpers: be more tolerant for stripped empty lines of CRLF ending...
r37593 if s == '\n' or s == '\r\n':
Yuya Nishihara
diffhelpers: move out of pure package
r37589 # Some patches may be missing the control char
# on empty lines. Supply a leading space.
Yuya Nishihara
diffhelpers: be more tolerant for stripped empty lines of CRLF ending...
r37593 s = ' ' + s
Yuya Nishihara
diffhelpers: move out of pure package
r37589 hunk.append(s)
if s.startswith('+'):
b.append(s[1:])
elif s.startswith('-'):
a.append(s)
else:
b.append(s[1:])
a.append(s)
def fixnewline(hunk, a, b):
"""Fix up the last lines of a and b when the patch has no newline at EOF"""
l = hunk[-1]
# tolerate CRLF in last line
if l.endswith('\r\n'):
hline = l[:-2]
else:
hline = l[:-1]
if hline.startswith((' ', '+')):
b[-1] = hline[1:]
if hline.startswith((' ', '-')):
a[-1] = hline
hunk[-1] = hline
def testhunk(a, b, bstart):
"""Compare the lines in a with the lines in b
a is assumed to have a control char at the start of each line, this char
is ignored in the compare.
"""
alen = len(a)
blen = len(b)
if alen > blen - bstart:
Yuya Nishihara
diffhelpers: make return value of testhunk() more Pythonic...
r37592 return False
Yuya Nishihara
diffhelpers: move out of pure package
r37589 for i in xrange(alen):
if a[i][1:] != b[i + bstart]:
Yuya Nishihara
diffhelpers: make return value of testhunk() more Pythonic...
r37592 return False
return True