class Fingerprint::Command::Duplicates

Attributes

duplicates_recordset[R]

Public Instance Methods

call() click to toggle source
# File lib/fingerprint/command/duplicates.rb, line 44
def call
        @options[:output] = @parent.output
        
        @duplicates_recordset = RecordSet.new
        results = RecordSetPrinter.new(duplicates_recordset, @options[:output])
        
        master_file_path = @master
        File.open(master_file_path) do |master_file|
                master_recordset = RecordSet.new
                master_recordset.parse(master_file)
                
                ignore_similar = false
                
                copy_file_paths = @copies
                
                if copy_file_paths.size == 0
                        copy_file_paths = [master_file_path]
                        ignore_similar = true
                end
                
                copy_file_paths.each do |copy_file_path|
                        File.open(copy_file_path) do |copy_file|
                                copy_recordset = RecordSet.new
                                copy_recordset.parse(copy_file)
                                
                                copy_recordset.records.each do |record|
                                        record.metadata['fingerprint'] = copy_file_path
                                        # We need to see if the record exists in the master
                                        
                                        if @options[:verbose]
                                                $stderr.puts "Checking #{record.inspect}"
                                        end
                                        
                                        main_record = master_recordset.find_by_key(record)
                                        
                                        # If we are scanning the same index, don't print out every file, just those that are duplicates within the single file.
                                        if ignore_similar && main_record && (main_record.path == record.path)
                                                main_record = nil
                                        end
                                        
                                        if main_record
                                                record.metadata['original.path'] = main_record.path
                                                record.metadata['original.fingerprint'] = master_file_path
                                                results << record if !@options[:inverse]
                                        else
                                                results << record if @options[:inverse]
                                        end
                                end
                        end
                end
        end
end