44import sys
55import argparse
66import time
7+ import difflib
78
89from packaging .version import Version
910
2122parser .add_argument ('--no-quiet' , action = 'store_true' , default = False , help = 'do not specify -q' )
2223parser .add_argument ('--perf' , action = 'store_true' , default = False , help = 'output duration of execution in seconds (CSV format)' )
2324parser .add_argument ('--start' , default = None , help = 'specify the start version/commit' )
25+ parser .add_argument ('--diff' , action = 'store_true' , help = 'show differences as unified diff' )
2426package_group = parser .add_mutually_exclusive_group ()
2527package_group .add_argument ('--no-stderr' , action = 'store_true' , default = False , help = 'do not display stdout' )
2628package_group .add_argument ('--no-stdout' , action = 'store_true' , default = False , help = 'do not display stderr' )
@@ -110,8 +112,10 @@ def sort_commit_hashes(commits):
110112if verbose :
111113 print ("analyzing '{}'" .format (input_file ))
112114
115+ last_udiff_version = ''
113116last_ec = None
114117last_out = None
118+ last_udiff = None
115119
116120if args .perf :
117121 print ('version,time' )
@@ -247,6 +251,7 @@ def sort_commit_hashes(commits):
247251 continue
248252
249253 do_print = False
254+ udiff = None
250255
251256 if last_ec != ec :
252257 if verbose :
@@ -257,10 +262,16 @@ def sort_commit_hashes(commits):
257262 if verbose :
258263 print ("{}: output changed" .format (version ))
259264 do_print = True
265+ if args .diff :
266+ udiff = difflib .unified_diff (last_out .splitlines (True ), out .splitlines (True ), fromfile = last_udiff_version , tofile = version )
267+ last_udiff_version = version
260268
261269 if do_print :
262270 print (last_ec )
263271 print (last_out )
272+ if last_udiff :
273+ sys .stdout .writelines (last_udiff )
274+ sys .stdout .write ('\n ' )
264275
265276 # do not print intermediate versions with --compact
266277 if not args .compact or do_print :
@@ -271,10 +282,15 @@ def sort_commit_hashes(commits):
271282
272283 last_ec = ec
273284 last_out = out
285+ if udiff :
286+ last_udiff = udiff
274287
275288if do_compare :
276289 print (last_ec )
277290 print (last_out )
291+ if last_udiff :
292+ sys .stdout .writelines (last_udiff )
293+ sys .stdout .write ('\n ' )
278294
279295if verbose :
280296 print ('done' )
0 commit comments