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
parent
01b3ebe04f
commit
e8273e2aae
|
@ -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
|
|
@ -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
|
|
|
@ -1,9 +1,10 @@
|
||||||
# vim: set noet sw=2 ts=2 sts=2:
|
# vim: set noet sw=2 ts=2 sts=2:
|
||||||
require 'rake'
|
require 'rake'
|
||||||
|
require_relative 'lib/deduperemoverb/version'
|
||||||
|
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = 'deduperemoverb'
|
s.name = 'deduperemoverb'
|
||||||
s.version = '0.0.1'
|
s.version = Duperemove::VERSION
|
||||||
s.licenses = %w[LGPLv3]
|
s.licenses = %w[LGPLv3]
|
||||||
s.authors = 'Denis Knauf'
|
s.authors = 'Denis Knauf'
|
||||||
s.homepage = 'https://git.denkn.at/deac/deduperemoverb'
|
s.homepage = 'https://git.denkn.at/deac/deduperemoverb'
|
||||||
|
@ -16,12 +17,14 @@ Gem::Specification.new do |s|
|
||||||
ext/*/*.c ext/*/extconf.rb
|
ext/*/*.c ext/*/extconf.rb
|
||||||
]]
|
]]
|
||||||
s.bindir = %w[bin]
|
s.bindir = %w[bin]
|
||||||
|
s.executables << 'deduperemoverb'
|
||||||
s.require_paths = %w[lib]
|
s.require_paths = %w[lib]
|
||||||
s.extensions = %w[ext/deduperemoverb/extconf.rb]
|
s.extensions = %w[ext/deduperemoverb/extconf.rb]
|
||||||
|
|
||||||
s.add_development_dependency "rake", "~> 13"
|
s.add_development_dependency "rake", "~> 13"
|
||||||
s.add_dependency "ffi", '~> 1.15'
|
s.add_dependency "ffi", '~> 1.15'
|
||||||
s.add_dependency "sqlite3", '~> 1.4'
|
s.add_dependency "sqlite3", '~> 1.4'
|
||||||
|
s.add_dependency 'dencli', '~> 0.3.1'
|
||||||
|
|
||||||
s.requirements << 'cc'
|
s.requirements << 'cc'
|
||||||
s.requirements << 'ruby-dev'
|
s.requirements << 'ruby-dev'
|
||||||
|
|
|
@ -3,17 +3,19 @@
|
||||||
require 'ffi'
|
require 'ffi'
|
||||||
require 'pathname'
|
require 'pathname'
|
||||||
|
|
||||||
Errno::Errnos = []
|
unless Errno.const_defined? :Errnos
|
||||||
Errno.constants.
|
Errno::Errnos ||= []
|
||||||
|
Errno.constants.
|
||||||
map {|c| Errno.const_get c }.
|
map {|c| Errno.const_get c }.
|
||||||
select {|c| c.is_a?( Class) and c.superclass == SystemCallError and c.const_defined?( :Errno) }.
|
select {|c| c.is_a?( Class) and c.superclass == SystemCallError and c.const_defined?( :Errno) }.
|
||||||
each {|c| Errno::Errnos[c::Errno] = c }
|
each {|c| Errno::Errnos[c::Errno] = c }
|
||||||
|
end
|
||||||
|
|
||||||
module FileDedupeRange
|
module FileDedupeRange
|
||||||
extend FFI::Library
|
extend FFI::Library
|
||||||
ffi_lib Pathname.new( __FILE__).
|
ffi_lib Pathname.new( __FILE__).
|
||||||
dirname.
|
dirname.dirname.dirname.
|
||||||
join( *w[ext deduperemoverb deduperemoverb.so]).
|
join( *%w[ext deduperemoverb deduperemoverb.so]).
|
||||||
expand_path.
|
expand_path.
|
||||||
to_s
|
to_s
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
class Duperemove
|
||||||
|
VERSION = '0.0.2'
|
||||||
|
end
|
Loading…
Reference in New Issue