X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=apps%2Fpatchwork%2Fparser.py;h=24631b739822fde096f3f748343410be8ec2be3d;hb=7fd7d0bbe4e3fce405e02e9e630ef70023fdd43e;hp=8ed36ccb59bcf3d392dc98602e8d525838ae0b98;hpb=0521d8b2e26242fa3a161df50b3f61b9a05ae0dd;p=patchwork diff --git a/apps/patchwork/parser.py b/apps/patchwork/parser.py index 8ed36cc..24631b7 100644 --- a/apps/patchwork/parser.py +++ b/apps/patchwork/parser.py @@ -63,8 +63,7 @@ def parse_patch(text): lc = (0, 0) hunk = 0 - - for line in text.split('\n'): + for line in text.decode('utf-8').split('\n'): line += '\n' if state == 0: @@ -133,6 +132,9 @@ def parse_patch(text): lc[0] -= 1 elif line.startswith('+'): lc[1] -= 1 + elif line.startswith('\ No newline at end of file'): + # Special case: Not included as part of the hunk's line count + pass else: lc[0] -= 1 lc[1] -= 1 @@ -205,11 +207,34 @@ def hash_patch(str): return hash -if __name__ == '__main__': - import sys - (patch, comment) = parse_patch(sys.stdin.read()) - if patch: + +def main(args): + from optparse import OptionParser + + parser = OptionParser() + parser.add_option('-p', '--patch', action = 'store_true', + dest = 'print_patch', help = 'print parsed patch') + parser.add_option('-c', '--comment', action = 'store_true', + dest = 'print_comment', help = 'print parsed comment') + parser.add_option('-#', '--hash', action = 'store_true', + dest = 'print_hash', help = 'print patch hash') + + (options, args) = parser.parse_args() + + # decode from (assumed) UTF-8 + content = sys.stdin.read().decode('utf-8') + + (patch, comment) = parse_patch(content) + + if options.print_hash and patch: + print hash_patch(patch).hexdigest() + + if options.print_patch and patch: print "Patch: ------\n" + patch - print "hash: %s" % hash_patch(patch).hexdigest() - if comment: + + if options.print_comment and comment: print "Comment: ----\n" + comment + +if __name__ == '__main__': + import sys + sys.exit(main(sys.argv))