Current File : //bin/python3-unidiff
#!/usr/bin/python3

from __future__ import print_function, unicode_literals

import argparse
import codecs
import sys

from unidiff import DEFAULT_ENCODING, PatchSet


PY2 = sys.version_info[0] == 2
DESCRIPTION = """Unified diff metadata.

Examples:
    $ git diff | unidiff
    $ hg diff | unidiff --show-diff
    $ unidiff -f patch.diff

"""

def get_parser():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description=DESCRIPTION)
    parser.add_argument('--show-diff', action="store_true", default=False,
                        dest='show_diff', help='output diff to stdout')
    parser.add_argument('-f', '--file', dest='diff_file',
                        type=argparse.FileType('r'),
                        help='if not specified, read diff data from stdin')
    return parser


if __name__ == '__main__':
    parser = get_parser()
    args = parser.parse_args()

    encoding = DEFAULT_ENCODING
    if args.diff_file:
        diff_file = args.diff_file
    else:
        encoding = sys.stdin.encoding or encoding
        diff_file = sys.stdin

    if PY2:
        diff_file = codecs.getreader(encoding)(diff_file)

    patch = PatchSet(diff_file)

    if args.show_diff:
        print(patch)
        print()

    print('Summary')
    print('-------')
    additions = 0
    deletions = 0
    for f in patch:
        additions += f.added
        deletions += f.removed
        print('%s:' % f.path, '+%d additions,' % f.added,
              '-%d deletions' % f.removed)

    print()
    print('%d modified file(s), %d added file(s), %d removed file(s)' % (
        len(patch.modified_files), len(patch.added_files),
        len(patch.removed_files)))
    print('Total: %d addition(s), %d deletion(s)' % (additions, deletions))