From beed7ecfbcb062283cd8842e03f7ccd57f477f49 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 11 Nov 2011 23:26:23 +0000 Subject: list_keys/each_key: better handling of verbose listings This allows us to implement "mog ls -l" much more efficiently --- bin/mog | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'bin/mog') diff --git a/bin/mog b/bin/mog index 93434bc..aa20f08 100755 --- a/bin/mog +++ b/bin/mog @@ -115,6 +115,18 @@ def store_file_retry(mg, key, storage_class, filepath) end end +def human_size(size) + suff = '' + %w(K M G).each do |s| + size /= 1024.0 + if size <= 1024 + suff = s + break + end + end + sprintf("%.1f%s", size, suff) +end + begin case cmd when 'cp' @@ -133,29 +145,16 @@ begin end when 'ls' prefixes = ARGV.empty? ? [ nil ] : ARGV - prefixes.each do |prefix| - mg.each_key(prefix) do |key| - if ls_l - path_nr = "% 2d" % mg.get_paths(key).size - size = mg.size(key) - if ls_h && size > 1024 - suff = '' - %w(K M G).each do |s| - size /= 1024.0 - suff = s - break if size <= 1024 - end - size = sprintf("%.1f%s", size, suff) - else - size = size.to_s - end - size = (' ' * (12 - size.length)) << size # right justify - puts [ path_nr, size, key ].pack("A4 A16 A*") - else - puts key - end + if ls_l + each_key = lambda do |key, size, devcount| + size = ls_h && size > 1024 ? human_size(size) : size.to_s + size = (' ' * (12 - size.length)) << size # right justify + puts [ sprintf("% 2d", devcount), size, key ].pack("A4 A16 A*") end + else + each_key = lambda { |key| puts key } end + prefixes.each { |prefix| mg.each_key(prefix, &each_key) } when 'rm' ARGV.empty? and raise ArgumentError, ' []' ARGV.each { |key| mg.delete(key) } -- cgit v1.2.3-24-ge0c7