14482: Fix Manifest::files_count()
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Mon, 7 Jan 2019 15:39:12 +0000 (12:39 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Mon, 7 Jan 2019 15:39:12 +0000 (12:39 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

sdk/ruby/lib/arvados/keep.rb
sdk/ruby/test/test_keep_manifest.rb

index 2d444d074d82f29cc216fb74b1ef2a3b656d5269..d271610339f98aef135b996b6512e13579473a77 100644 (file)
@@ -205,10 +205,13 @@ module Keep
       # files.  This can help you avoid parsing the entire manifest if you
       # just want to check if a small number of files are specified.
       if stop_after.nil? or not @files.nil?
-        return files.size
+        # Avoid counting empty dir placeholders
+        return files.reject{|_, name, size| name == '.' and size == 0}.size
       end
       seen_files = {}
-      each_file_spec do |streamname, _, _, filename|
+      each_file_spec do |streamname, _, filesize, filename|
+        # Avoid counting empty dir placeholders
+        next if filename == "." and filesize == 0
         seen_files[[streamname, filename]] = true
         return stop_after if (seen_files.size >= stop_after)
       end
index bd13127018c05a8ae171e04159d0d16f4f5db539..5fd1c31e329c737f44e47be110d79f9b24f7953e 100644 (file)
@@ -62,6 +62,11 @@ class ManifestTest < Minitest::Test
     assert_equal(0, Keep::Manifest.new("").files_count)
   end
 
+  def test_empty_dir_files_count
+    assert_equal(0,
+      Keep::Manifest.new("./empty_dir d41d8cd98f00b204e9800998ecf8427e+0 0:0:\\056\n").files_count)
+  end
+
   def test_empty_files_size
     assert_equal(0, Keep::Manifest.new("").files_size)
   end