Skip to content

Instantly share code, notes, and snippets.

@zyocum
Created February 20, 2020 15:36
Show Gist options
  • Save zyocum/d942f997b32de3e5d9fc9aa8beaf95ce to your computer and use it in GitHub Desktop.
Save zyocum/d942f997b32de3e5d9fc9aa8beaf95ce to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
"""Produce visual, HTML diffs of two files"""
from argparse import ArgumentError, FileType
from difflib import HtmlDiff
def load(filename):
with open(filename, mode='r') as f:
for line in f:
yield line
def junk(junk_chars):
try:
return lambda c: c in set(junk_chars)
except:
raise ArgumentError('invalid argument: {}'.format(junk_chars))
def main(filename1, filename2, **kwargs):
differ = HtmlDiff(**kwargs)
print(
differ.make_file(
filename1,
filename2,
fromdesc=filename1,
todesc=filename2
)
)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description=__doc__
)
parser.add_argument(
'file1',
type=FileType('r'),
help='A file to diff against file2'
)
parser.add_argument(
'file2',
type=FileType('r'),
help='A file to diff against file1'
)
parser.add_argument(
'-w', '--wrapcolumn',
type=int,
default=None,
help='Column number where lines are broken and wrapped'
)
parser.add_argument(
'-j', '--junk',
type=junk,
default='',
help=(
'Characters to be considered junk; '
'i.e., not considered part of the diff'
)
)
args = parser.parse_args()
main(
args.file1,
args.file2,
wrapcolumn=args.wrapcolumn,
charjunk=args.junk
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment