diff --git a/Gemfile b/Gemfile index 161595d..c241da4 100644 --- a/Gemfile +++ b/Gemfile @@ -2,3 +2,4 @@ source 'https://rubygems.org' gem 'ffi' gem 'sqlite3' gem 'rake-compiler' +gem 'rake-extensions' diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..43d1494 --- /dev/null +++ b/README.adoc @@ -0,0 +1,19 @@ +duperemove(rb) +============== + +Replaces `duperemove`s dedupe-functionality. +It is an own program, which uses the database like `duperemove`. +While `duperemove` scans directories and builds database, this program only dedupes files extents. + +The advantage is, duperemoverb allowes incremental/partial deduplications. +While duperemove deduplicates any files registered in database, you can give a path, which files to deduplicate. +Files outside this path will be ignored, but will be deduplicated, if it shares same digests like extends of file inside this path. + +Partial deduplication +--------------------- + +* /a/1 has two extents: 0x12, 0x54 +* /b/1 has two extents: 0x54, 0xa8 +* /b/2 has two extents: 0x90, 0xa8 + +If you call `duperemoverb dedupe /a`, `/b/1` and `/b/2` will be ignored, but the first extent of `/b/1` will be deduplicated with `/a/1` second extent. diff --git a/Rakefile b/Rakefile index 489e109..afc57ac 100644 --- a/Rakefile +++ b/Rakefile @@ -4,18 +4,26 @@ require 'rake' require 'rake/extensiontask' require 'bundler' -Rake::ExtensionTask.new( "deduperemoverb") do |extension| - extension.lib_dir = "ext" +extensions = %w[fideduperange].map {|n| [n, Pathname.new( 'ext') + n + "#{n}.so"] }.to_h + +extensions.each do |name, path| + Rake::ExtensionTask.new name do |extension| + extension.lib_dir = path.dirname + end end task :chmod do - File.chmod 0775, 'ext/deduperemoverb.so' + extensions.each do |_,path| + path.chmod 0755 + end end task :clean do - File.unlink 'ext/deduperemoverb.so' if File.exists? 'ext/deduperemoverb.so' + extensions.each do |_,path| + path.unlink if path.exist? + end end task :build => [:clean, :compile, :chmod] -Bundler::GemHelper.install_tasks name: 'deduperemoverb' +Bundler::GemHelper.install_tasks name: 'duperemoverb' diff --git a/bin/deduperemoverb b/bin/duperemoverb similarity index 98% rename from bin/deduperemoverb rename to bin/duperemoverb index ab4fdde..0c5ef11 100755 --- a/bin/deduperemoverb +++ b/bin/duperemoverb @@ -2,7 +2,7 @@ # vim: set noet sw=2 ts=2 sts=2: require 'dencli' -require 'deduperemoverb' +require 'duperemoverb' require 'ostruct' require 'logger' diff --git a/deduperemoverb.gemspec b/duperemoverb.gemspec similarity index 65% rename from deduperemoverb.gemspec rename to duperemoverb.gemspec index 81c671e..4b397ad 100644 --- a/deduperemoverb.gemspec +++ b/duperemoverb.gemspec @@ -1,14 +1,14 @@ # vim: set noet sw=2 ts=2 sts=2: require 'rake' -require_relative 'lib/deduperemoverb/version' +require_relative 'lib/duperemoverb/version' Gem::Specification.new do |s| - s.name = 'deduperemoverb' + s.name = 'duperemoverb' s.version = Duperemove::VERSION s.licenses = %w[LGPLv3] s.authors = 'Denis Knauf' - s.homepage = 'https://git.denkn.at/deac/deduperemoverb' - s.summary = 'Deduplication of file junks of found files by deduperemove.' + s.homepage = 'https://git.denkn.at/deac/duperemoverb' + s.summary = 'Deduplication of file junks of found files by duperemove.' s.files = FileList[ %w[ lib/**/*.rb @@ -17,9 +17,9 @@ Gem::Specification.new do |s| ext/*/*.c ext/*/extconf.rb ]] s.bindir = %w[bin] - s.executables << 'deduperemoverb' + s.executables << 'duperemoverb' s.require_paths = %w[lib] - s.extensions = %w[ext/deduperemoverb/extconf.rb] + s.extensions = %w[ext/fideduperange/extconf.rb] s.add_development_dependency "rake", "~> 13" s.add_dependency "ffi", '~> 1.15' diff --git a/ext/deduperemoverb/extconf.rb b/ext/deduperemoverb/extconf.rb deleted file mode 100644 index 6901457..0000000 --- a/ext/deduperemoverb/extconf.rb +++ /dev/null @@ -1,3 +0,0 @@ -require "mkmf" - -create_makefile "deduperemoverb" diff --git a/ext/fideduperange/extconf.rb b/ext/fideduperange/extconf.rb new file mode 100644 index 0000000..89c1ccd --- /dev/null +++ b/ext/fideduperange/extconf.rb @@ -0,0 +1,3 @@ +require "mkmf" + +create_makefile "fideduperange" diff --git a/ext/deduperemoverb/deduperemoverb.c b/ext/fideduperange/fideduperange.c similarity index 100% rename from ext/deduperemoverb/deduperemoverb.c rename to ext/fideduperange/fideduperange.c diff --git a/lib/deduperemoverb.rb b/lib/duperemoverb.rb similarity index 99% rename from lib/deduperemoverb.rb rename to lib/duperemoverb.rb index 247ab35..4b09a78 100755 --- a/lib/deduperemoverb.rb +++ b/lib/duperemoverb.rb @@ -4,7 +4,7 @@ require 'sqlite3' require 'pathname' require 'ostruct' -require 'deduperemoverb/file_dedupe_range' +require 'duperemoverb/file_dedupe_range' class SQLite3::ResultSet def each_enum diff --git a/lib/deduperemoverb/file_dedupe_range.rb b/lib/duperemoverb/file_dedupe_range.rb similarity index 98% rename from lib/deduperemoverb/file_dedupe_range.rb rename to lib/duperemoverb/file_dedupe_range.rb index c026ae5..4814b94 100644 --- a/lib/deduperemoverb/file_dedupe_range.rb +++ b/lib/duperemoverb/file_dedupe_range.rb @@ -15,7 +15,7 @@ module FileDedupeRange extend FFI::Library ffi_lib Pathname.new( __FILE__). dirname.dirname.dirname. - join( *%w[ext deduperemoverb deduperemoverb.so]). + join( *%w[ext fideduperange fideduperange.so]). expand_path. to_s diff --git a/lib/deduperemoverb/version.rb b/lib/duperemoverb/version.rb similarity index 52% rename from lib/deduperemoverb/version.rb rename to lib/duperemoverb/version.rb index 39bfe4c..2029198 100644 --- a/lib/deduperemoverb/version.rb +++ b/lib/duperemoverb/version.rb @@ -1,3 +1,3 @@ class Duperemove - VERSION = '0.0.2' + VERSION = '0.0.3' end