diff options
author | Daniel Friesel <derf@finalrewind.org> | 2011-05-20 15:50:14 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2011-05-20 15:50:14 +0200 |
commit | c0c056c9e09ecd2f95a561d277dabef8ebb67b9d (patch) | |
tree | d7d1344ff96b2d24eb54e5cd8b37652c70361c4a /bin/hashl | |
parent | 1d78433ff8f8490ec942d6601ef800406355f6ca (diff) |
Code cleanup
Diffstat (limited to 'bin/hashl')
-rwxr-xr-x | bin/hashl | 226 |
1 files changed, 137 insertions, 89 deletions
@@ -14,20 +14,20 @@ use Getopt::Long; use IO::Handle; use Time::Progress; -my $base = getcwd(); -my $rel_paths = 1; -my $db_file = '.hashl.db'; -my $total = 0; -my $cur = 0; +my $base = getcwd(); +my $rel_paths = 1; +my $db_file = '.hashl.db'; +my $total = 0; +my $cur = 0; my $show_progress = 1; my $timer; my $incoming_dir; my $read_size; -my ($find_ref, $find_db_write); +my ( $find_ref, $find_db_write ); my $hashl; -my $VERSION = '0.1'; +our $VERSION = '0.1'; STDERR->autoflush(1); @@ -38,7 +38,7 @@ GetOptions( 'V|version' => sub { say "hashl version ${VERSION}"; exit 0 }, ) or usage(); -if (substr($db_file, 0, 1) ne '/') { +if ( substr( $db_file, 0, 1 ) ne q{/} ) { $db_file = "${base}/${db_file}"; } @@ -49,24 +49,21 @@ sub usage { Usage: $0 [options] <update|list|info|...> [args] See 'perldoc -F $0' (or 'man hashl' if it is properly installed) EOF - } -if (not defined $action) { +if ( not defined $action ) { usage(); } -if (-r $db_file) { +if ( -r $db_file ) { $hashl = App::Hashl->new_from_file($db_file); } else { - $hashl = App::Hashl->new( - read_size => $read_size, - ); + $hashl = App::Hashl->new( read_size => $read_size ); } -$SIG{INT} = \&quit_save_db; -$SIG{TERM} = \&quit_save_db; +local $SIG{INT} = \&quit_save_db; +local $SIG{TERM} = \&quit_save_db; sub quit_save_db { $hashl->save($db_file); @@ -75,83 +72,97 @@ sub quit_save_db { sub get_total { my $file = $File::Find::name; - if (-f $file and not -l $file and $file ne $db_file) { + + if ( -f $file and not -l $file and $file ne $db_file ) { $total++; } + + return; } sub drop_deleted { - for my $file ($hashl->files()) { - if (! -e $file) { + for my $file ( $hashl->files() ) { + if ( not -e $file ) { $hashl->delete_file($file); } } + + return; } sub copy_file { - my ($file, $to) = @_; + my ( $file, $to ) = @_; - my $base = substr($file, length($base) + 1); - if ($base =~ s{ / [^/]+ $}{}x) { - mkdirs($incoming_dir, $base); + my $cp_base = substr( $file, length($base) + 1 ); + if ( $base =~ s{ / [^/]+ $}{}x ) { + mkdirs( $incoming_dir, $cp_base ); } - copy($file, "${to}/${base}") - or die("Cannot copy ${file} to ${to}/${base}: $!\n"); + copy( $file, "${to}/${cp_base}" ) + or die("Cannot copy ${file} to ${to}/${cp_base}: $!\n"); + + return; } sub db_find_new { - my ($file, $path) = @_; + my ( $file, $path ) = @_; - if (not $hashl->file_in_db($path)) { + if ( not $hashl->file_in_db($path) ) { say "\r\e[2K${file}"; } + + return; } sub db_find_known { - my ($file, $path) = @_; + my ( $file, $path ) = @_; - if ($hashl->file_in_db($path)) { + if ( $hashl->file_in_db($path) ) { say "\r\e[2K${file}"; } + + return; } sub db_info { printf( "Read size: %d bytes (%s)\n", - $hashl->read_size(), - $hashl->si_size($hashl->read_size), + $hashl->read_size(), $hashl->si_size( $hashl->read_size ), ); + + return; } sub file_info { my ($file) = @_; + my $entry = $hashl->file($file); - if (not $entry) { + if ( not $entry ) { die("No such file in database\n"); } printf( "File: %s\nSize: %d bytes (%s)\nHash: %s\n", - $file, - $entry->{size}, - $hashl->si_size($entry->{size}), + $file, $entry->{size}, $hashl->si_size( $entry->{size} ), $entry->{hash}, ); + + return; } sub process_file { - my ($code, $write) = ($find_ref, $find_db_write); + my ( $code, $write ) = ( $find_ref, $find_db_write ); + my $file = $File::Find::name; my $path = $file; - if (not -f $file or -l $file or $file eq $db_file) { + if ( not -f $file or -l $file or $file eq $db_file ) { return; } if ($rel_paths) { - $file = substr($file, length($base) + 1); + $file = substr( $file, length($base) + 1 ); } $cur++; @@ -159,86 +170,100 @@ sub process_file { if ($show_progress) { print STDERR $timer->report( "\r\e[2KScanning directory: %p done, %L elapsed, %E remaining", - $cur, - ); + $cur, ); } - &{$code}($file, $path); + &{$code}( $file, $path ); - if ($write and (($cur % 5000) == 0)) { + if ( $write and ( ( $cur % 5000 ) == 0 ) ) { $hashl->save($db_file); } + + return; } sub db_update { - my ($file, $path) = @_; + my ( $file, $path ) = @_; $hashl->add_file( file => $file, path => $path, ); + + return; } sub db_ignore { - my ($file, $path) = @_; + my ( $file, $path ) = @_; + + $hashl->ignore( $file, $path ); - $hashl->ignore($file, $path); + return; } sub db_copy { - my ($file, $path) = @_; + my ( $file, $path ) = @_; - if (not $hashl->file_in_db($path)) { - copy_file($path, $incoming_dir); + if ( not $hashl->file_in_db($path) ) { + copy_file( $path, $incoming_dir ); } + + return; } sub mkdirs { - my ($base, $new) = @_; + my ( $dir_base, $new ) = @_; - for my $dir (split(qr{/}, $new)) { - $base .= "/$dir"; - if (! -d $base) { - mkdir($base) - or die("Cannot create ${base}: $!\n"); + for my $dir ( split( qr{/}, $new ) ) { + $dir_base .= "/$dir"; + if ( !-d $dir_base ) { + mkdir($dir_base) + or die("Cannot create ${dir_base}: $!\n"); } } + + return; } sub prepare_db_run { my ($dir) = @_; + $dir //= $base; - if (not $show_progress) { + if ( not $show_progress ) { return; } - find(\&get_total, $dir); + find( \&get_total, $dir ); $timer = Time::Progress->new(); $timer->attr( min => 1, max => $total, ); + return; } sub cmd_copy { - prepare_db_run(); ($incoming_dir) = @_; - if (not $incoming_dir) { + prepare_db_run(); + + if ( not $incoming_dir ) { usage(); } - if (substr($incoming_dir, 0, 1) ne '/') { - $incoming_dir = $base . '/' . $incoming_dir; + if ( substr( $incoming_dir, 0, 1 ) ne q{/} ) { + $incoming_dir = $base . q{/} . $incoming_dir; } - $find_ref = \&db_copy; + $find_ref = \&db_copy; $find_db_write = 0; - find(\&process_file, $base); + find( \&process_file, $base ); print "\n"; + + return; } sub cmd_find_known { @@ -246,16 +271,18 @@ sub cmd_find_known { $dir //= $base; - if (substr($dir, 0, 1) ne '/') { - $dir = $base . '/' . $dir; + if ( substr( $dir, 0, 1 ) ne q{/} ) { + $dir = $base . q{/} . $dir; } prepare_db_run($dir); - $find_ref = \&db_find_known; + $find_ref = \&db_find_known; $find_db_write = 0; - find(\&process_file, $dir); + find( \&process_file, $dir ); print "\n"; + + return; } sub cmd_find_new { @@ -263,16 +290,18 @@ sub cmd_find_new { $new_dir //= $base; - if (substr($new_dir, 0, 1) ne '/') { - $new_dir = $base . '/' . $new_dir; + if ( substr( $new_dir, 0, 1 ) ne q{/} ) { + $new_dir = $base . q{/} . $new_dir; } prepare_db_run($new_dir); - $find_ref = \&db_find_new; + $find_ref = \&db_find_new; $find_db_write = 0; - find(\&process_file, $new_dir); + find( \&process_file, $new_dir ); print "\n"; + + return; } sub cmd_ignore { @@ -282,15 +311,17 @@ sub cmd_ignore { prepare_db_run(); - if (substr($ign_dir, 0, 1) ne '/') { - $ign_dir = $base . '/' . $ign_dir; + if ( substr( $ign_dir, 0, 1 ) ne q{/} ) { + $ign_dir = $base . q{/} . $ign_dir; } - $find_ref = \&db_ignore; + $find_ref = \&db_ignore; $find_db_write = 1; - find(\&process_file, $ign_dir); + find( \&process_file, $ign_dir ); $hashl->save($db_file); print "\n"; + + return; } sub cmd_info { @@ -302,44 +333,53 @@ sub cmd_info { else { db_info(); } + + return; } sub cmd_list { printf( "# hashl v%s Read Size %d bytes (%s)\n", - $VERSION, - $hashl->read_size(), - $hashl->si_size($hashl->read_size()), + $VERSION, $hashl->read_size(), $hashl->si_size( $hashl->read_size() ), ); - for my $name (sort $hashl->files()) { + + for my $name ( sort $hashl->files() ) { my $file = $hashl->file($name); - printf( - "%s %-7s %s\n", - $file->{hash}, - $hashl->si_size($file->{size}), - $name - ); + printf( "%s %-7s %s\n", + $file->{hash}, $hashl->si_size( $file->{size} ), $name ); } + + return; } sub cmd_list_files { - say join("\n", sort $hashl->files()); + say join( "\n", sort $hashl->files() ); + + return; } sub cmd_list_ignored { - for my $hash ($hashl->ignored()) { + for my $hash ( $hashl->ignored() ) { say $hash; } + + return; } sub cmd_update { drop_deleted(); prepare_db_run(); - $find_ref = \&db_update; + + $find_ref = \&db_update; $find_db_write = 1; - find(\&process_file, $base); + + find( \&process_file, $base ); + print "\n"; + $hashl->save($db_file); + + return; } given ($action) { @@ -352,7 +392,7 @@ given ($action) { when ('list-files') { cmd_list_files(@ARGV) } when ('list-ignored') { cmd_list_ignored(@ARGV) } when ('update') { cmd_update(@ARGV) } - default { usage() } + default { usage() } } __END__ @@ -365,6 +405,10 @@ B<hashl> - Create database with partial file hashes, check if other files are in B<hashl> [B<-d> I<dbfile>] [B<-s> I<read-size>] I<action> [I<args>] +=head1 VERSION + +This manual documents hashl version 0.1 + =head1 DESCRIPTION Actions: @@ -439,6 +483,10 @@ Print version information. =back +=head1 EXIT STATUS + +Unless an error occured, B<hashl> will always return zero. + =head1 CONFIGURATION None, so far |