Sha256: 236b6fa4791de6be204d34b839931a09185246c12c5e090057c0ef4ee08eb5d1

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

# -*- coding: utf-8 -*-
module TreeRb

  class SqliteDirTreeVisitor < BasicTreeNodeVisitor

    def initialize(filename)
      @db = SQLite3::Database.new(filename)
      @db.execute('create table files(path varchar(1024), name varchar(40), size integer, sha1 varchar(40))')
    end

    def visit_leaf(pathname)
      puts pathname
      stat = File.lstat(pathname)
      digest = SHA1.file(pathname).hexdigest
      sql = 'insert into files (path, name, size, sha1) values ('
      sql << "\"#{File.dirname(pathname)}\","
      sql << "\"#{File.basename(pathname)}\","
      sql << "\"#{stat.size}\","
      sql << "\"#{digest}\")"
      @db.execute(sql)

      # entry = Entry.from_filename(filename)
      # me.add_entry(entry)
      # bytes += entry.size
      # if me.verbose_level > 0
      #   print "#{CR}#{filename}#{CLEAR}"
      # end
      # if me.show_progress
      #   sec = Time.now - start
      #   print "#{CR}bytes: #{bytes.to_human} time: #{sec} bytes/sec #{bytes/sec} #{CLEAR}"
      # end
      # content   = ContentFile.new(pathname, @options)
      # connect the leaf_node created to the last tree_node on the stack
      # nr_files += 1
      # LeafNode.new(content, @stack.last)
    end

    def find_duplicates
      # Loop through digests.
      @db.execute('select sha1,count(1) as count from files group by sha1 order by count desc').each do |row|
        if row[1] > 1 # Skip unique files.
          puts 'Duplicates found:'
          digest = row[0]
          # List the duplicate files.
          db.execute("select digest,path from files where digest='#{digest}'").each do |dup_row|
            puts "[#{digest}] #{dup_row[1]}"
          end
        end
      end
    end

  end
end # end module TreeVisitor

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tree.rb-0.3.13 lib/tree_rb/output_plugins/sqlite/sqlite_dir_tree_visitor.rb
tree.rb-0.3.12 lib/tree_rb/output_plugins/sqlite/sqlite_dir_tree_visitor.rb