module FsCache::Attributes::Crc::Helpers
Add helpers to the cache
Public Instance Methods
diff_dirs(dir1, dir2)
click to toggle source
Provide info on the differences between 2 directories.
- Parameters
-
dir1 (String): First directory
-
dir2 (String): Second directory
- Result
-
Hash<Symbol,Object>: Difference between the 2 directories (dir2 - dir1):
-
same (Array<String>): Same files
-
renamed (Array<>): Renamed files (from dir1 to dir2: [file_base1, file_base2])
-
added (Array<String>): Added files
-
deleted (Array<String>): Deleted files
-
different (Array<String>): Different files
-
# File lib/fs_cache/attributes/crc.rb, line 55 def diff_dirs(dir1, dir2) files1 = Hash[files_in(dir1).map { |file| [file, "#{dir1}/#{file}"] }] files2 = Hash[files_in(dir2).map { |file| [file, "#{dir2}/#{file}"] }] same = [] different = [] renamed = [] # First process files having the same names files1.delete_if do |file_base1, file1| if files2.key?(file_base1) # A file with same name exists in dir2 if crc_for(files2[file_base1]) == crc_for(file1) same << file_base1 else different << file_base1 end files2.delete(file_base1) true else false end end # Then process files having the same CRC among the remaining ones files1.delete_if do |file_base1, file1| crc1 = crc_for(file1) found_file_base2, _found_file2 = files2.find { |_file_base2, file2| crc_for(file2) == crc1 } if found_file_base2.nil? false else renamed << [file_base1, found_file_base2] files2.delete(found_file_base2) true end end remaining_files1 = files1.keys remaining_files2 = files2.keys { same: same, renamed: renamed, added: remaining_files2 - remaining_files1, deleted: remaining_files1 - remaining_files2, different: different } end