Mercurial > hg > mercurial-source
view mercurial/pure/diffhelpers.py @ 32252:ffed3bf5cd4c stable
exchange: reject new compression engines for v1 bundles (issue5506)
Version 1 bundles only support a fixed set of compression engines.
Before this change, we would accept any compression engine for v1
bundles, even those that may not work on v1. This could lead to
an error.
We define a fixed set of compression engines known to work with v1
bundles and we add checking to ensure a newer engine (like zstd)
won't work with v1 bundles.
I also took the liberty of adding test coverage for unknown compression
names because I noticed we didn't have coverage of it before.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 16 Mar 2017 12:23:56 -0700 (2017-03-16) |
parents | 80214358ac88 |
children | f53b55b162f4 |
line wrap: on
line source
# diffhelpers.py - pure Python implementation of diffhelpers.c # # 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 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] # tolerate CRLF in last line if l.endswith('\r\n'): hline = l[:-2] else: hline = l[:-1] c = hline[0] if c in " +": b[-1] = hline[1:] if c in " -": 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