contrib/churn.py
changeset 4937 9bbc0217209b
parent 3963 ba45041827a2
child 5419 041bd297f01e
equal deleted inserted replaced
4936:90be978c9d3d 4937:9bbc0217209b
     9 # Aliases map file format is simple one alias per line in the following
     9 # Aliases map file format is simple one alias per line in the following
    10 # format:
    10 # format:
    11 #
    11 #
    12 # <alias email> <actual email>
    12 # <alias email> <actual email>
    13 
    13 
    14 import sys
       
    15 from mercurial.i18n import gettext as _
    14 from mercurial.i18n import gettext as _
    16 from mercurial import hg, mdiff, cmdutil, ui, util, templater, node
    15 from mercurial import hg, mdiff, cmdutil, ui, util, templater, node
       
    16 import os, sys
       
    17 
       
    18 def get_tty_width():
       
    19     if 'COLUMNS' in os.environ:
       
    20         try:
       
    21             return int(os.environ['COLUMNS'])
       
    22         except ValueError:
       
    23             pass
       
    24     try:
       
    25         import termios, fcntl, struct
       
    26         buf = 'abcd'
       
    27         for dev in (sys.stdout, sys.stdin):
       
    28             try:
       
    29                 if buf != 'abcd':
       
    30                     break
       
    31                 fd = dev.fileno()
       
    32                 if not os.isatty(fd):
       
    33                     continue
       
    34                 buf = fcntl.ioctl(fd, termios.TIOCGWINSZ, buf)
       
    35             except ValueError:
       
    36                 pass
       
    37         if buf != 'abcd':
       
    38            return struct.unpack('hh', buf)[1]
       
    39     except ImportError:
       
    40         pass
       
    41     return 80
    17 
    42 
    18 def __gather(ui, repo, node1, node2):
    43 def __gather(ui, repo, node1, node2):
    19     def dirtywork(f, mmap1, mmap2):
    44     def dirtywork(f, mmap1, mmap2):
    20         lines = 0
    45         lines = 0
    21 
    46 
   157     ordered = stats.items()
   182     ordered = stats.items()
   158     ordered.sort(lambda x, y: cmp(y[1], x[1]))
   183     ordered.sort(lambda x, y: cmp(y[1], x[1]))
   159 
   184 
   160     maximum = ordered[0][1]
   185     maximum = ordered[0][1]
   161 
   186 
   162     ui.note("Assuming 80 character terminal\n")
   187     width = get_tty_width()
   163     width = 80 - 1
   188     ui.note(_("assuming %i character terminal\n") % width)
       
   189     width -= 1
   164 
   190 
   165     for i in ordered:
   191     for i in ordered:
   166         person = i[0]
   192         person = i[0]
   167         lines = i[1]
   193         lines = i[1]
   168         print "%s %6d %s" % (pad(person, 20), lines,
   194         print "%s %6d %s" % (pad(person, 20), lines,