symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/dutree.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 # Format du output in a tree shape
       
     3 
       
     4 import os, sys, errno
       
     5 
       
     6 def main():
       
     7     p = os.popen('du ' + ' '.join(sys.argv[1:]), 'r')
       
     8     total, d = None, {}
       
     9     for line in p.readlines():
       
    10         i = 0
       
    11         while line[i] in '0123456789': i = i+1
       
    12         size = eval(line[:i])
       
    13         while line[i] in ' \t': i = i+1
       
    14         filename = line[i:-1]
       
    15         comps = filename.split('/')
       
    16         if comps[0] == '': comps[0] = '/'
       
    17         if comps[len(comps)-1] == '': del comps[len(comps)-1]
       
    18         total, d = store(size, comps, total, d)
       
    19     try:
       
    20         display(total, d)
       
    21     except IOError, e:
       
    22         if e.errno != errno.EPIPE:
       
    23             raise
       
    24 
       
    25 def store(size, comps, total, d):
       
    26     if comps == []:
       
    27         return size, d
       
    28     if not d.has_key(comps[0]):
       
    29         d[comps[0]] = None, {}
       
    30     t1, d1 = d[comps[0]]
       
    31     d[comps[0]] = store(size, comps[1:], t1, d1)
       
    32     return total, d
       
    33 
       
    34 def display(total, d):
       
    35     show(total, d, '')
       
    36 
       
    37 def show(total, d, prefix):
       
    38     if not d: return
       
    39     list = []
       
    40     sum = 0
       
    41     for key in d.keys():
       
    42         tsub, dsub = d[key]
       
    43         list.append((tsub, key))
       
    44         if tsub is not None: sum = sum + tsub
       
    45 ##  if sum < total:
       
    46 ##      list.append((total - sum, os.curdir))
       
    47     list.sort()
       
    48     list.reverse()
       
    49     width = len(repr(list[0][0]))
       
    50     for tsub, key in list:
       
    51         if tsub is None:
       
    52             psub = prefix
       
    53         else:
       
    54             print prefix + repr(tsub).rjust(width) + ' ' + key
       
    55             psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
       
    56         if d.has_key(key):
       
    57             show(tsub, d[key][1], psub)
       
    58 
       
    59 if __name__ == '__main__':
       
    60     main()