Sha256: 6496467b1fe52757f5bd5e67b09016245055a1d08a3565002dd9c33d66495134

Contents?: true

Size: 1.57 KB

Versions: 3

Compression:

Stored size: 1.57 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), size integer, digest varchar(40))")
    end

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

      # 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 digest,count(1) as count from files group by digest 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

3 entries across 3 versions & 1 rubygems

Version Path
tree.rb-0.3.10 lib/tree_rb/visitors/sqlite_dir_tree_visitor.rb
tree.rb-0.3.9 lib/tree_rb/visitors/sqlite_dir_tree_visitor.rb
tree.rb-0.3.8 lib/tree_rb/visitors/sqlite_dir_tree_visitor.rb