[DRE-commits] [SCM] gem2deb.git branch, master, updated. 0.2.9-10-gcb83a3d

Antonio Terceiro terceiro at debian.org
Mon Nov 7 00:38:18 UTC 2011


The following commit has been merged in the master branch:
commit 846b7c97d628ecb690dc4e8e56d566e20228db95
Author: Antonio Terceiro <terceiro at debian.org>
Date:   Sat Nov 5 22:53:52 2011 -0200

    Fix crash when removing duplicate files in subdirs
    
    Took the chance to refactor Gem2Deb::DhRuby#remove_duplicate_files as
    recursive method, what makes it a lot simpler to understand.

diff --git a/lib/gem2deb/dh_ruby.rb b/lib/gem2deb/dh_ruby.rb
index fb78ed1..3a475b0 100644
--- a/lib/gem2deb/dh_ruby.rb
+++ b/lib/gem2deb/dh_ruby.rb
@@ -158,7 +158,7 @@ module Gem2Deb
           rb = File.basename(so).gsub(/\.so$/, '.rb')
           if File.exists?(File.join(vendordir, rb))
             Dir.chdir(vendorlibdir) do
-              FileUtils.ln_s "../#{rb}", rb
+              file_handler.ln_s "../#{rb}", rb
             end
           end
         end
@@ -166,27 +166,25 @@ module Gem2Deb
     end
 
     def remove_duplicate_files(src, dst)
-      candidates = (Dir::entries(src) & Dir::entries(dst)) - ['.', '..']
+      candidates = Dir::entries(src) - ['.', '..']
       candidates.each do |cand|
-        if File::file?(File.join(src, cand)) and File::file?(File.join(dst, cand)) and IO::read(File.join(src, cand)) == IO::read(File.join(dst, cand))
-          FileUtils::Verbose.rm(File.join(dst, cand))
-        elsif File::directory?(File.join(src, cand)) and File::directory?(File.join(dst, cand))
-          files_src = files_dst = nil
-          Dir::chdir(File.join(src, cand)) do
-            files_src = Dir::glob('**/*', File::FNM_DOTMATCH).sort
-          end
-          Dir::chdir(File.join(dst, cand)) do
-            files_dst = Dir::glob('**/*', File::FNM_DOTMATCH).sort
-          end
-          if files_src == files_dst
-            if files_src.all? { |f| File.ftype(File.join(src, f)) == File.ftype(File.join(dst, f)) and (not File.file?(File.join(src, f)) or IO::read(File.join(src, cand)) == IO::read(File.join(dst, cand))) }
-              FileUtils::Verbose.rm_rf(File.join(dst, cand))
-            end
+        file1 = File.join(src, cand)
+        file2 = File.join(dst, cand)
+        if File.file?(file1) and File.file?(file2) and (File.read(file1) == File.read(file2))
+          file_handler.rm(file2)
+        elsif File.directory?(file1) and File.directory?(file2)
+          remove_duplicate_files(file1, file2)
+          if (Dir.entries(file2) - ['.', '..']).empty?
+            file_handler.rmdir(file2)
           end
         end
       end
     end
 
+    def file_handler
+      @verbose ? FileUtils::Verbose : FileUtils
+    end
+
     def check_rubygems
       if skip_checks?
         return
diff --git a/test/unit/dh_ruby_test.rb b/test/unit/dh_ruby_test.rb
index 99ad3ff..067e883 100644
--- a/test/unit/dh_ruby_test.rb
+++ b/test/unit/dh_ruby_test.rb
@@ -231,6 +231,24 @@ class DhRubyTest < Gem2DebTestCase
     end
   end
 
+  context 'finding duplicate files' do
+    setup do
+      @dh_ruby = Gem2Deb::DhRuby.new
+      @dh_ruby.verbose = false
+    end
+    should 'not crash with duplicates in subdirectories' do
+      Dir.mktmpdir do |dir|
+        Dir.chdir(dir) do
+          FileUtils.mkdir_p('dir1/subdir')
+          FileUtils.touch('dir1/subdir/test.rb')
+          FileUtils.mkdir_p('dir2/subdir')
+          FileUtils.touch('dir2/subdir/test.rb')
+          @dh_ruby.send(:remove_duplicate_files, 'dir1', 'dir2')
+        end
+      end
+    end
+  end
+
   protected
 
   def read_installed_file(gem_dirname, package, path)

-- 
gem2deb.git



More information about the Pkg-ruby-extras-commits mailing list