summaryrefslogtreecommitdiffstats
path: root/AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py
diff options
context:
space:
mode:
Diffstat (limited to 'AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py')
-rw-r--r--AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py b/AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py
new file mode 100644
index 0000000000..422f3bd65f
--- /dev/null
+++ b/AppPkg/Applications/Python/Python-2.7.2/Tools/scripts/dutree.py
@@ -0,0 +1,60 @@
+#! /usr/bin/env python
+# Format du output in a tree shape
+
+import os, sys, errno
+
+def main():
+ p = os.popen('du ' + ' '.join(sys.argv[1:]), 'r')
+ total, d = None, {}
+ for line in p.readlines():
+ i = 0
+ while line[i] in '0123456789': i = i+1
+ size = eval(line[:i])
+ while line[i] in ' \t': i = i+1
+ filename = line[i:-1]
+ comps = filename.split('/')
+ if comps[0] == '': comps[0] = '/'
+ if comps[len(comps)-1] == '': del comps[len(comps)-1]
+ total, d = store(size, comps, total, d)
+ try:
+ display(total, d)
+ except IOError, e:
+ if e.errno != errno.EPIPE:
+ raise
+
+def store(size, comps, total, d):
+ if comps == []:
+ return size, d
+ if not d.has_key(comps[0]):
+ d[comps[0]] = None, {}
+ t1, d1 = d[comps[0]]
+ d[comps[0]] = store(size, comps[1:], t1, d1)
+ return total, d
+
+def display(total, d):
+ show(total, d, '')
+
+def show(total, d, prefix):
+ if not d: return
+ list = []
+ sum = 0
+ for key in d.keys():
+ tsub, dsub = d[key]
+ list.append((tsub, key))
+ if tsub is not None: sum = sum + tsub
+## if sum < total:
+## list.append((total - sum, os.curdir))
+ list.sort()
+ list.reverse()
+ width = len(repr(list[0][0]))
+ for tsub, key in list:
+ if tsub is None:
+ psub = prefix
+ else:
+ print prefix + repr(tsub).rjust(width) + ' ' + key
+ psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
+ if d.has_key(key):
+ show(tsub, d[key][1], psub)
+
+if __name__ == '__main__':
+ main()