comparison mercurial/patch.py @ 7860:162fd31bbd93

diffstat: use width 80 by default and avoid division by zero
author Matt Mackall <mpm@selenic.com>
date Fri, 20 Mar 2009 14:38:50 -0500
parents 2c5b2abfb8be
children 4a4c7f6a5912 6ea0318daf75
comparison
equal deleted inserted replaced
7857:6af7c0e5908c 7860:162fd31bbd93
1357 elif line.startswith('-') and not line.startswith('---'): 1357 elif line.startswith('-') and not line.startswith('---'):
1358 removes += 1 1358 removes += 1
1359 if filename: 1359 if filename:
1360 yield (filename, adds, removes) 1360 yield (filename, adds, removes)
1361 1361
1362 def diffstat(lines): 1362 def diffstat(lines, width=80):
1363 output = [] 1363 output = []
1364 stats = list(diffstatdata(lines)) 1364 stats = list(diffstatdata(lines))
1365 width = util.termwidth() - 2
1366 1365
1367 maxtotal, maxname = 0, 0 1366 maxtotal, maxname = 0, 0
1368 totaladds, totalremoves = 0, 0 1367 totaladds, totalremoves = 0, 0
1369 for filename, adds, removes in stats: 1368 for filename, adds, removes in stats:
1370 totaladds += adds 1369 totaladds += adds
1375 countwidth = len(str(maxtotal)) 1374 countwidth = len(str(maxtotal))
1376 graphwidth = width - countwidth - maxname 1375 graphwidth = width - countwidth - maxname
1377 if graphwidth < 10: 1376 if graphwidth < 10:
1378 graphwidth = 10 1377 graphwidth = 10
1379 1378
1380 factor = int(math.ceil(float(maxtotal) / graphwidth)) 1379 factor = max(int(math.ceil(float(maxtotal) / graphwidth)), 1)
1381 1380
1382 for filename, adds, removes in stats: 1381 for filename, adds, removes in stats:
1383 # If diffstat runs out of room it doesn't print anything, which 1382 # If diffstat runs out of room it doesn't print anything, which
1384 # isn't very useful, so always print at least one + or - if there 1383 # isn't very useful, so always print at least one + or - if there
1385 # were at least some changes 1384 # were at least some changes
1387 minuses = '-' * max(removes/factor, int(bool(removes))) 1386 minuses = '-' * max(removes/factor, int(bool(removes)))
1388 output.append(' %-*s | %*.d %s%s\n' % (maxname, filename, countwidth, 1387 output.append(' %-*s | %*.d %s%s\n' % (maxname, filename, countwidth,
1389 adds+removes, pluses, minuses)) 1388 adds+removes, pluses, minuses))
1390 1389
1391 if stats: 1390 if stats:
1392 output.append(' %d files changed, %d insertions(+), %d deletions(-)\n' % 1391 output.append(' %d files changed, %d insertions(+), %d deletions(-)\n'
1393 (len(stats), totaladds, totalremoves)) 1392 % (len(stats), totaladds, totalremoves))
1394 1393
1395 return ''.join(output) 1394 return ''.join(output)