# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1346075482 -7200 # Node ID 8c2cc26d45fc32747182fd754c578941e4a7f537 # Parent 136d6b9b5a679fd533d27dbdc74c23f1b508fa7c perltidy, fixed debug output diff -r 136d6b9b5a67 -r 8c2cc26d45fc bin/imager.fuse --- a/bin/imager.fuse Mon Jun 18 16:55:10 2012 +0200 +++ b/bin/imager.fuse Mon Aug 27 15:51:22 2012 +0200 @@ -14,6 +14,7 @@ use DB_File; use File::Basename; use Imager; +use Smart::Comments; my %o = ( debug => undef, @@ -38,8 +39,11 @@ sub max { (sort { $a <=> $b } @_)[-1]; } -my $debug = sub { print STDERR @_ }; -$debug = sub { }; + +sub nop_debug { } +sub yes_debug { print STDERR @_ } + +*{main::debug} = \&nop_debug; #$SIG{INT} = sub { warn "Got ^C or INT signal\n"; exit 1; }; @@ -47,7 +51,7 @@ GetOptions( "d|debug!" => \$o{debug}, - "detach!" => \$o{detach}, + "detach!" => \$o{detach}, "tmp:s" => sub { $o{tmp} = length $_[1] ? $_[1] : $ENV{TMP} // "/tmp" }, "h|help" => sub { pod2usage(-verbose => 1, -exit => 0) }, "p|pass=s" => \$o{pass}, @@ -62,6 +66,11 @@ and @ARGV == 2 or pod2usage; + if ($o{debug}) { + undef &{main::debug}; + *{main::debug} = \&yes_debug; + } + my ($src, $mp) = @ARGV; $DATA = "$src/data"; @@ -82,13 +91,14 @@ Fuse::main( mountpoint => $mp, - debug => $o{debug} // 0, - getattr => \&getattr, - getdir => \&getdir, - open => \&openfile, - read => \&readbuffer, - write => \&writebuffer, - release => \&release, + + # debug => $o{debug} // 0, + getattr => \&getattr, + getdir => \&getdir, + open => \&openfile, + read => \&readbuffer, + write => \&writebuffer, + release => \&release, ); exit; @@ -154,7 +164,7 @@ sub release { my $path = $IDX . shift; return 0 if not exists $IMAGE{$path}; - $debug->("Currently we have " . keys(%DIRTY) . " dirty blocks\n"); + debug("Currently we have " . keys(%DIRTY) . " dirty blocks\n"); return 0; } @@ -164,11 +174,16 @@ my $finfo = $IMAGE{$path} or die "File $path is not opened!"; return "" if $offset >= $finfo->{meta}{devsize}; + debug("<<< REQUESTED: offset:$offset size:$size\n"); + my $buffer = ""; for (my $need = $size ; $need > 0 ; $need = $size - length($buffer)) { + debug("<<< offset:@{[$offset + length($buffer)]} size:$need\n"); $buffer .= _readblock($finfo, $need, $offset + length($buffer)); + debug("<<< missing: ", $size - length($buffer), "\n") if $size - length($buffer); } + debug("<<< SENDING " . length($buffer) . "\n\n"); return $buffer; } @@ -176,8 +191,9 @@ my ($finfo, $size, $offset) = @_; my ($block, $blockoffset, $length); - $debug->("<<< block offset:$offset size:$size\n"); - $debug->(" block @{[int($offset/BS)]} + @{[$offset % BS]}\n"); + debug("<<< requested: offset:$offset size:$size" + . "\tfrom $finfo->{meta}{filesystem}\n"); + debug(" mapped to: block:@{[int($offset/BS)]}+@{[$offset % BS]}\n"); # first check if it's an dirty block $block = int($offset / BS); @@ -185,7 +201,7 @@ $blockoffset = $offset % BS; $length = min(BS - $blockoffset, $size); - $debug->( + debug( "+++ dirty offset:$block*@{[BS]} + $blockoffset size:$length\n" ); return substr $DIRTY{ $finfo . $block }, $blockoffset, $length; @@ -207,18 +223,19 @@ } } - $debug->("=== $length\n"); - $debug->( -"+++ disk offset:$block*$finfo->{meta}{blocksize} + $blockoffset size:$length\n" - ); + debug("+++ disk offset:$block*$finfo->{meta}{blocksize}" + . " + $blockoffset size:$length\n"); + +# die if $blockoffset == 417792; my $fn = "$DATA/" . $finfo->{blocklist}{$block}; + debug(" fn:$fn\n"); state %cache; if (not defined $cache{fn} or ($cache{fn} ne $fn)) { - Imager::get_block("$fn*" => \$cache{data}); + Imager::get_block("$fn*" => \$cache{data}); $cache{fn} = $fn; } @@ -253,11 +270,11 @@ $blockoffset = $offset % BS; $length = min(BS - $blockoffset, $size); - $debug->(">>> offset:$offset size:$length of $size\n"); - $debug->(" block @{[int($offset/BS)]} + @{[$offset % BS]}\n"); + debug(">>> offset:$offset size:$length of $size\n"); + debug(" block @{[int($offset/BS)]} + @{[$offset % BS]}\n"); if (not exists $DIRTY{ $finfo . $block }) { - $debug->("+++ missing $block+$blockoffset\n"); + debug("+++ missing $block+$blockoffset\n"); $DIRTY{ $finfo . $block } = _readblock($finfo, BS, $block * BS); } @@ -274,11 +291,12 @@ while (<$fh>) { last if /^$/; /^(?\S+):\s+(?:(?\d+)|(?.*?))\s*$/ - and do { - # na sowas, die Zeitstempel dürfen nicht als Zeichenkette reinkommen! - $meta{ $+{k} } = defined $+{n} ? (0+$+{n}) : $+{v}; - next; - }; + and do { + + # na sowas, die Zeitstempel dürfen nicht als Zeichenkette reinkommen! + $meta{ $+{k} } = defined $+{n} ? (0 + $+{n}) : $+{v}; + next; + }; } return %meta; } diff -r 136d6b9b5a67 -r 8c2cc26d45fc bin/imager.save --- a/bin/imager.save Mon Jun 18 16:55:10 2012 +0200 +++ b/bin/imager.save Mon Aug 27 15:51:22 2012 +0200 @@ -16,18 +16,17 @@ use Pod::Usage; use Imager 0.1; -use constant KiB => 1024; -use constant MiB => 1024 * KiB; -use constant GiB => 1024 * MiB; -use constant BS => 4 * MiB; -use constant DATEFMT => "%Y-%m-%dT%H:%M:%SZ"; -use constant CIPHER => "aes-128-cbc"; +use constant KiB => 1024; +use constant MiB => 1024 * KiB; +use constant GiB => 1024 * MiB; +use constant BS => 4 * MiB; +use constant DATEFMT => "%Y-%m-%dT%H:%M:%SZ"; +use constant CIPHER => "aes-128-cbc"; sub get_devsize; sub get_devname; sub save; - $SIG{INT} = sub { die "Got INT\n" }; my %o = ( @@ -53,7 +52,7 @@ "c|comment=s" => \$o{comment}, "z|compress:i" => sub { $o{compress} = $_[1] ? $_[1] : Z_BEST_SPEED }, "p|pass=s" => \$o{pass}, - "now=i" => \$o{now}, + "now=i" => \$o{now}, "b|blocksize=s" => sub { given ($_[1]) { when (/(\d+)G/i) { $o{blocksize} = $1 * GiB }; @@ -83,7 +82,7 @@ my $rc = 0; while (wait != -1) { - $rc = ($? >> 8) if ($? >> 8) > $rc; + $rc = ($? >> 8) if ($? >> 8) > $rc; } exit $rc; @@ -178,29 +177,28 @@ } binmode($out); - - my $bufref = \$buffer; - if ($o{compress}) { - my $zbuffer; - gzip( - \$buffer => \$zbuffer, - -Minimal => 1, - -Level => Z_BEST_SPEED, - -Strategy => Z_FILTERED - ) or die $GzipError; - if (length($zbuffer) / length($buffer) < 0.9) { - $bufref = \$zbuffer; - $ext = ".gz$ext"; - } + my $bufref = \$buffer; + if ($o{compress}) { + my $zbuffer; + gzip( + \$buffer => \$zbuffer, + -Minimal => 1, + -Level => Z_BEST_SPEED, + -Strategy => Z_FILTERED + ) or die $GzipError; + if (length($zbuffer) / length($buffer) < 0.9) { + $bufref = \$zbuffer; + $ext = ".gz$ext"; } + } - #for(my $todo = length $$bufref; - # $todo -= syswrite $out => $$bufref, $todo, -$todo; 1) - #{ - #} - syswrite $out => $$bufref; - - close($out) or die $!; + #for(my $todo = length $$bufref; + # $todo -= syswrite $out => $$bufref, $todo, -$todo; 1) + #{ + #} + syswrite $out => $$bufref or die "$0: write: $!\n"; + close($out) or die "$0: close output file: $!"; + rename($out => "$data/$file$ext"); $index{BLOCKS}[$blknr] .= " *"; $stats{written}++;