Commit 345ed93b authored by Vladislav Yarmak's avatar Vladislav Yarmak

implement missing limit function

parent 375972f1
...@@ -22,6 +22,11 @@ class LengthMismatchException(ByteDiffException): ...@@ -22,6 +22,11 @@ class LengthMismatchException(ByteDiffException):
pass pass
class DiffLimitException(ByteDiffException):
""" Throwed when difference limit hit """
pass
def check_positive_int(value): def check_positive_int(value):
value = int(value) value = int(value)
if value <= 0: if value <= 0:
...@@ -81,19 +86,23 @@ def zip_files_bytes(left, right): ...@@ -81,19 +86,23 @@ def zip_files_bytes(left, right):
yield a, b yield a, b
def diff(left, right): def diff(left, right, limit=None):
offset = 0 offset = 0
diff_count = 0
for a, b in zip_files_bytes(left, right): for a, b in zip_files_bytes(left, right):
if a != b: if a != b:
diff_count += 1
if limit is not None and diff_count > limit:
raise DiffLimitException()
yield offset, a, b yield offset, a, b
offset += 1 offset += 1
def compose_diff_file(orig, patched, output, header, offset_adjustment=True): def compose_diff_file(orig, patched, output, header, limit=None, offset_adjustment=True):
output.write(HEADER_FORMAT % (header.encode('latin-1'),)) output.write(HEADER_FORMAT % (header.encode('latin-1'),))
for offset, a, b in diff(orig, patched): adj = OFFSET_ADJUSTMENT if offset_adjustment else 0
o = offset + OFFSET_ADJUSTMENT if offset_adjustment else offset for offset, a, b in diff(orig, patched, limit):
output.write(LINE_FORMAT % (o, a, b)) output.write(LINE_FORMAT % (offset + adj, a, b))
def main(): def main():
...@@ -114,10 +123,13 @@ def main(): ...@@ -114,10 +123,13 @@ def main():
open(args.patched_file, 'rb') as patched,\ open(args.patched_file, 'rb') as patched,\
open(output_filename, 'wb') as output: open(output_filename, 'wb') as output:
try: try:
compose_diff_file(orig, patched, output, header_filename) compose_diff_file(orig, patched, output, header_filename, args.limit)
except LengthMismatchException: except LengthMismatchException:
print("Input files have inequal length. Aborting...", print("Input files have inequal length. Aborting...",
file=sys.stderr) file=sys.stderr)
except DiffLimitException:
print("Differences limit hit. Aborting...",
file=sys.stderr)
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment