Forward compatibility: use dencli, because it will be used in future versions. prevents cli-changes in future. Errnos load only ones. version 0.0.2

master
Denis Knauf 2021-09-06 18:31:54 +02:00
parent 01b3ebe04f
commit e8273e2aae
5 changed files with 67 additions and 41 deletions

51
bin/deduperemoverb Executable file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env ruby
# vim: set noet sw=2 ts=2 sts=2:
require 'dencli'
require 'deduperemoverb'
require 'ostruct'
require 'logger'
$logger = Logger.new STDERR
$logger.formatter =
proc do |severity, datetime, progname, message|
sprintf "%s %s %s\n", datetime.strftime( '%H:%M:%S.%6N'), severity[0], message
end
begin
cli = DenCli.new File.basename($0), <<EOF
Deduplicates extents, which were already registered by `duperemove`.
This tool does not provide scanning, yet.
If PATHx given, only extents of files which matches this pattern and equal extents will be deduplicated. So, non-equal extents of not listed paths will be ignored.
EOF
cli.cmd :help, '(Help)', aliases: [nil, '-h', '--help'], &lambda {|cmd=nil|
STDERR.puts cli.help(cmd)
exit 1
}
cli.cmd( :dedupe, 'deduplicates files', &lambda {|db, *dirs, tempdb: nil|
dbfile = Pathname.new db
raise DenCli::UsageError, "Argument 0: Database missing: #{dbfile}" unless dbfile.exist?
tempdb ||= Pathname.new("/run/user/#{Process.uid}").join dbfile.basename
dr = Duperemove.new dbfile, tempdb
dr.run dirs
dr.finish
}).opt( :tempdb, '--tempdb=FILE', '-t', "Use given [empty] database as temporary database. (default in /run/user/...)")
cli.call *ARGV
rescue DenCli::UsageError
$logger.fatal "#$!"
rescue SystemExit
raise
rescue Interrupt
$logger.info "was interrupted"
exit 1
rescue
$logger.fatal "#$! (#{$!.class})\n#{$!.backtrace.join "\n\t"}"
end

View File

@ -1,33 +0,0 @@
#!/usr/bin/env ruby
# vim: set noet sw=2 ts=2 sts=2:
require 'deduperemoverb'
require 'ostruct'
require 'logger'
$logger = Logger.new STDERR
$logger.formatter =
proc do |severity, datetime, progname, message|
sprintf "%s %s %s\n", datetime.strftime( '%H:%M:%S.%6N'), severity[0], message
end
begin
raise "Argument 0: Database expected" if ARGV.empty?
dbfile = Pathname.new ARGV[0]
raise "Argument 0: Database missing: #{dbfile}" unless dbfile.exist?
tempfile = Pathname.new("/run/user/#{Process.uid}").join dbfile.basename
dr = Duperemove.new dbfile, tempfile
dr.run ARGV[1..-1]
dr.finish
rescue SystemExit
raise
rescue Interrupt
$logger.info "was interrupted"
exit 1
rescue
$logger.fatal "#$! (#{$!.class})\n#{$!.backtrace.join "\n\t"}"
end

View File

@ -1,9 +1,10 @@
# vim: set noet sw=2 ts=2 sts=2:
require 'rake'
require_relative 'lib/deduperemoverb/version'
Gem::Specification.new do |s|
s.name = 'deduperemoverb'
s.version = '0.0.1'
s.version = Duperemove::VERSION
s.licenses = %w[LGPLv3]
s.authors = 'Denis Knauf'
s.homepage = 'https://git.denkn.at/deac/deduperemoverb'
@ -16,12 +17,14 @@ Gem::Specification.new do |s|
ext/*/*.c ext/*/extconf.rb
]]
s.bindir = %w[bin]
s.executables << 'deduperemoverb'
s.require_paths = %w[lib]
s.extensions = %w[ext/deduperemoverb/extconf.rb]
s.add_development_dependency "rake", "~> 13"
s.add_dependency "ffi", '~> 1.15'
s.add_dependency "sqlite3", '~> 1.4'
s.add_dependency 'dencli', '~> 0.3.1'
s.requirements << 'cc'
s.requirements << 'ruby-dev'

View File

@ -3,17 +3,19 @@
require 'ffi'
require 'pathname'
Errno::Errnos = []
Errno.constants.
map {|c| Errno.const_get c }.
select {|c| c.is_a?( Class) and c.superclass == SystemCallError and c.const_defined?( :Errno) }.
each {|c| Errno::Errnos[c::Errno] = c }
unless Errno.const_defined? :Errnos
Errno::Errnos ||= []
Errno.constants.
map {|c| Errno.const_get c }.
select {|c| c.is_a?( Class) and c.superclass == SystemCallError and c.const_defined?( :Errno) }.
each {|c| Errno::Errnos[c::Errno] = c }
end
module FileDedupeRange
extend FFI::Library
ffi_lib Pathname.new( __FILE__).
dirname.
join( *w[ext deduperemoverb deduperemoverb.so]).
dirname.dirname.dirname.
join( *%w[ext deduperemoverb deduperemoverb.so]).
expand_path.
to_s

View File

@ -0,0 +1,3 @@
class Duperemove
VERSION = '0.0.2'
end