Skip to content

Commit 26d240e

Browse files
committed
gufi_du --separate-dirs
1 parent c8080ee commit 26d240e

File tree

3 files changed

+235
-38
lines changed

3 files changed

+235
-38
lines changed

scripts/gufi_du

Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ def build_expression_parser():
126126
action='store_true',
127127
help='list inode usage information instead of block usage')
128128

129+
parser.add_argument('-S', '--separate-dirs',
130+
action='store_true',
131+
help='for directories do not include size of subdirectories')
132+
129133
parser.add_argument('-s', '--summarize',
130134
action='store_true',
131135
help='display only a total for each argument')
@@ -141,35 +145,80 @@ def build_expression_parser():
141145
return parser
142146

143147
# process files/links
144-
def nondir(E_col, name):
148+
def nondir(args, name):
149+
if args.inodes:
150+
E_col = '1'
151+
elif args.apparent_size:
152+
E_col = 'size'
153+
else:
154+
E_col = 'blocks'
155+
145156
# isroot is set to 1 since the size should be used for --total
146157
return [
147158
'-y', '0',
148159
'-z', '0',
149160
'-E', 'SELECT level(), 1, {0}, rpath(sname, sroll) || \'/\' || name FROM {1} WHERE name == \'{2}\';'.format(E_col,
150-
gufi_common.VRPENTRIES,
151-
name),
161+
gufi_common.VRPENTRIES,
162+
name),
152163
]
153164

154165
# no flags
155166
# print self and all subdirectories
156-
def none(T_col):
167+
def none(args):
168+
if args.inodes:
169+
T_col = '{0}.totfiles + {0}.totlinks'
170+
elif args.apparent_size:
171+
T_col = '{0}.totsize'
172+
else:
173+
T_col = '{0}.totblocks'
174+
157175
return [
158176
'-a', '2', # run -T on all directories
159-
'-T', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1} LEFT JOIN {2} ON {1}.inode == {2}.inode;'.format(T_col,
177+
'-T', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1} LEFT JOIN {2} ON {1}.inode == {2}.inode;'.format(T_col.format(gufi_common.TREESUMMARY),
160178
gufi_common.TREESUMMARY,
161179
gufi_common.VRSUMMARY),
162180
]
163181

182+
# --separate-dirs
183+
def separate_dirs(args):
184+
if args.inodes:
185+
S_col = 'totfiles + totlinks'
186+
elif args.apparent_size:
187+
S_col = 'totsize'
188+
else:
189+
S_col = 'totblocks'
190+
191+
# summarize is turned on -> get only input path
192+
if args.summarize:
193+
return [
194+
'-y', '0',
195+
'-z', '0',
196+
'-S', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1} WHERE isroot == 1;'.format(S_col,
197+
gufi_common.VRSUMMARY),
198+
]
199+
200+
# get entire subtree
201+
return [
202+
'-S', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1};'.format(S_col,
203+
gufi_common.VRSUMMARY),
204+
]
205+
164206
# --summarize
165207
# print single size for each input path
166-
def summarize(T_col):
208+
def summarize(args):
209+
if args.inodes:
210+
T_col = '{0}.totfiles + {0}.totlinks'
211+
elif args.apparent_size:
212+
T_col = '{0}.totsize'
213+
else:
214+
T_col = '{0}.totblocks'
215+
167216
return [
168217
'-y', '0',
169218
'-z', '0',
170-
'-T', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1} LEFT JOIN {2} ON {1}.inode == {2}.inode WHERE {2}.isroot == 1;'.format(T_col,
171-
gufi_common.TREESUMMARY,
172-
gufi_common.VRSUMMARY),
219+
'-T', 'SELECT level(), isroot, {0}, rpath(sname, sroll) FROM {1} LEFT JOIN {2} ON {1}.inode == {2}.inode WHERE {2}.isroot == 1;'.format(T_col.format(gufi_common.TREESUMMARY),
220+
gufi_common.TREESUMMARY,
221+
gufi_common.VRSUMMARY),
173222
]
174223

175224
# argv[0] should be the command name
@@ -238,26 +287,14 @@ def run(argv, config_path):
238287

239288
# append the queries to run
240289
if basename:
241-
if args.inodes:
242-
E_col = '1'
243-
elif args.apparent_size:
244-
E_col = 'size'
245-
else:
246-
E_col = 'blocks'
247-
248-
query_cmd += nondir(E_col, basename)
290+
query_cmd += nondir(args, basename)
249291
else:
250-
if args.inodes:
251-
T_col = '{0}.totfiles + {0}.totlinks'
252-
elif args.apparent_size:
253-
T_col = '{0}.totsize'
254-
else:
255-
T_col = '{0}.totblocks'
256-
257-
if args.summarize:
258-
query_cmd += summarize(T_col.format(gufi_common.TREESUMMARY))
292+
if args.separate_dirs:
293+
query_cmd += separate_dirs(args)
294+
elif args.summarize:
295+
query_cmd += summarize(args)
259296
else:
260-
query_cmd += none(T_col.format(gufi_common.TREESUMMARY))
297+
query_cmd += none(args)
261298

262299
query_cmd += [fullpath]
263300

@@ -301,7 +338,7 @@ def run(argv, config_path):
301338
dir_size += size
302339

303340
if args.total:
304-
if (level == '0') and (isroot == '1'):
341+
if args.separate_dirs or ((not args.separate_dirs) and (level == '0') and (isroot == '1')):
305342
total_blocks += size
306343

307344
# -s/--summarize prints a combined size at the end of the current input path

test/regression/gufi_du.expected

Lines changed: 159 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#####################################
22
# Run gufi_du without treesummary data
33

4-
# du blocks on sparse files
4+
# blocks (sparse files)
55
$ gufi_du prefix | sort -k 2,2
66
Warning: Did not get any results from gufi_query.
77
Does "prefix" have treesummary data?
@@ -40,7 +40,7 @@ Does "prefix" have treesummary data?
4040
0 prefix
4141
0 total
4242

43-
# du sizes
43+
# apparent sizes
4444
$ gufi_du --apparent-size prefix | sort -k 2
4545
Warning: Did not get any results from gufi_query.
4646
Does "prefix" have treesummary data?
@@ -79,6 +79,43 @@ Does "prefix" have treesummary data?
7979
0 prefix
8080
0 total
8181

82+
# separate dirs
83+
$ gufi_du --separate-dirs --apparent-size --block-size 1 prefix | sort -k 2
84+
1049624 prefix
85+
6 prefix/directory
86+
5 prefix/directory/subdirectory
87+
0 prefix/empty_directory
88+
23 prefix/leaf_directory
89+
15 prefix/unusual#? directory ,
90+
91+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total prefix | sort -k 2
92+
1049624 prefix
93+
6 prefix/directory
94+
5 prefix/directory/subdirectory
95+
0 prefix/empty_directory
96+
23 prefix/leaf_directory
97+
15 prefix/unusual#? directory ,
98+
1049673 total
99+
100+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --summarize prefix
101+
1049624 prefix
102+
103+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize prefix
104+
1049624 prefix
105+
1049624 total
106+
107+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize --verbose prefix
108+
GUFI query is
109+
gufi_query \
110+
-d ' ' \
111+
-n 1 \
112+
-y 0 \
113+
-z 0 \
114+
-S 'SELECT level(), isroot, totsize, rpath(sname, sroll) FROM vrsummary WHERE isroot == 1;' \
115+
prefix
116+
1049624 prefix
117+
1049624 total
118+
82119
# inodes
83120
$ gufi_du --inodes prefix | sort -k 2
84121
Warning: Did not get any results from gufi_query.
@@ -158,7 +195,7 @@ Does "prefix" have treesummary data?
158195

159196
$ gufi_treesummary_all search
160197

161-
# du blocks on sparse files
198+
# blocks (sparse files)
162199
$ gufi_du prefix | sort -k 2,2
163200
8 prefix
164201
0 prefix/directory
@@ -203,7 +240,7 @@ GUFI query is
203240
8192 prefix
204241
8192 total
205242

206-
# du sizes
243+
# apparent sizes
207244
$ gufi_du --apparent-size prefix | sort -k 2
208245
1026 prefix
209246
1 prefix/directory
@@ -248,6 +285,43 @@ GUFI query is
248285
1049673 prefix
249286
1049673 total
250287

288+
# separate dirs
289+
$ gufi_du --separate-dirs --apparent-size --block-size 1 prefix | sort -k 2
290+
1049624 prefix
291+
6 prefix/directory
292+
5 prefix/directory/subdirectory
293+
0 prefix/empty_directory
294+
23 prefix/leaf_directory
295+
15 prefix/unusual#? directory ,
296+
297+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total prefix | sort -k 2
298+
1049624 prefix
299+
6 prefix/directory
300+
5 prefix/directory/subdirectory
301+
0 prefix/empty_directory
302+
23 prefix/leaf_directory
303+
15 prefix/unusual#? directory ,
304+
1049673 total
305+
306+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --summarize prefix
307+
1049624 prefix
308+
309+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize prefix
310+
1049624 prefix
311+
1049624 total
312+
313+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize --verbose prefix
314+
GUFI query is
315+
gufi_query \
316+
-d ' ' \
317+
-n 1 \
318+
-y 0 \
319+
-z 0 \
320+
-S 'SELECT level(), isroot, totsize, rpath(sname, sroll) FROM vrsummary WHERE isroot == 1;' \
321+
prefix
322+
1049624 prefix
323+
1049624 total
324+
251325
# inodes
252326
$ gufi_du --inodes prefix | sort -k 2
253327
14 prefix
@@ -291,7 +365,7 @@ GUFI query is
291365

292366
$ gufi_rollup "search" > /dev/null 2>&1
293367

294-
# du blocks on sparse files
368+
# blocks (sparse files)
295369
$ gufi_du prefix | sort -k 2,2
296370
8 prefix
297371
0 prefix/directory
@@ -336,7 +410,7 @@ GUFI query is
336410
8192 prefix
337411
8192 total
338412

339-
# du sizes
413+
# apparent sizes
340414
$ gufi_du --apparent-size prefix | sort -k 2
341415
1026 prefix
342416
1 prefix/directory
@@ -381,6 +455,43 @@ GUFI query is
381455
1049673 prefix
382456
1049673 total
383457

458+
# separate dirs
459+
$ gufi_du --separate-dirs --apparent-size --block-size 1 prefix | sort -k 2
460+
1049624 prefix
461+
6 prefix/directory
462+
5 prefix/directory/subdirectory
463+
0 prefix/empty_directory
464+
23 prefix/leaf_directory
465+
15 prefix/unusual#? directory ,
466+
467+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total prefix | sort -k 2
468+
1049624 prefix
469+
6 prefix/directory
470+
5 prefix/directory/subdirectory
471+
0 prefix/empty_directory
472+
23 prefix/leaf_directory
473+
15 prefix/unusual#? directory ,
474+
1049673 total
475+
476+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --summarize prefix
477+
1049624 prefix
478+
479+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize prefix
480+
1049624 prefix
481+
1049624 total
482+
483+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize --verbose prefix
484+
GUFI query is
485+
gufi_query \
486+
-d ' ' \
487+
-n 1 \
488+
-y 0 \
489+
-z 0 \
490+
-S 'SELECT level(), isroot, totsize, rpath(sname, sroll) FROM vrsummary WHERE isroot == 1;' \
491+
prefix
492+
1049624 prefix
493+
1049624 total
494+
384495
# inodes
385496
$ gufi_du --inodes prefix | sort -k 2
386497
14 prefix
@@ -426,7 +537,7 @@ GUFI query is
426537

427538
#####################################
428539
# Run gufi_du on a file path
429-
# du blocks on sparse files
540+
# blocks (sparse files)
430541
$ gufi_du prefix/1MB prefix/1KB | sort -k 2,2
431542
0 prefix/1KB
432543
0 prefix/1MB
@@ -470,7 +581,7 @@ GUFI query is
470581
0 prefix/1KB
471582
0 total
472583

473-
# du sizes
584+
# apparent sizes
474585
$ gufi_du --apparent-size prefix/1MB prefix/1KB | sort -k 2
475586
1 prefix/1KB
476587
1024 prefix/1MB
@@ -514,6 +625,46 @@ GUFI query is
514625
1024 prefix/1KB
515626
1049600 total
516627

628+
# separate dirs
629+
$ gufi_du --separate-dirs --apparent-size --block-size 1 prefix/1MB prefix/1KB | sort -k 2
630+
1024 prefix/1KB
631+
1048576 prefix/1MB
632+
633+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total prefix/1MB prefix/1KB | sort -k 2
634+
1024 prefix/1KB
635+
1048576 prefix/1MB
636+
1049600 total
637+
638+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --summarize prefix/1MB prefix/1KB
639+
1048576 prefix/1MB
640+
1024 prefix/1KB
641+
642+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize prefix/1MB prefix/1KB
643+
1048576 prefix/1MB
644+
1024 prefix/1KB
645+
1049600 total
646+
647+
$ gufi_du --separate-dirs --apparent-size --block-size 1 --total --summarize --verbose prefix/1MB prefix/1KB
648+
GUFI query is
649+
gufi_query \
650+
-d ' ' \
651+
-n 1 \
652+
-y 0 \
653+
-z 0 \
654+
-E 'SELECT level(), 1, size, rpath(sname, sroll) || '"'"'/'"'"' || name FROM vrpentries WHERE name == '"'"'1MB'"'"';' \
655+
prefix
656+
1048576 prefix/1MB
657+
GUFI query is
658+
gufi_query \
659+
-d ' ' \
660+
-n 1 \
661+
-y 0 \
662+
-z 0 \
663+
-E 'SELECT level(), 1, size, rpath(sname, sroll) || '"'"'/'"'"' || name FROM vrpentries WHERE name == '"'"'1KB'"'"';' \
664+
prefix
665+
1024 prefix/1KB
666+
1049600 total
667+
517668
# inodes
518669
$ gufi_du --inodes prefix/1MB prefix/1KB | sort -k 2
519670
1 prefix/1KB

0 commit comments

Comments
 (0)