about summary refs log tree commit homepage
path: root/bin/mog
diff options
context:
space:
mode:
Diffstat (limited to 'bin/mog')
-rwxr-xr-xbin/mog41
1 files changed, 20 insertions, 21 deletions
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, '<key1> [<key2>]'
     ARGV.each { |key| mg.delete(key) }