/[Sack]/trunk/bin/sack.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/sack.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 46 by dpavlin, Thu Sep 24 13:46:16 2009 UTC revision 55 by dpavlin, Fri Sep 25 09:38:48 2009 UTC
# Line 3  Line 3 
3  use warnings;  use warnings;
4  use strict;  use strict;
5    
6  our $VERSION = '0.03';  our $VERSION = '0.04';
7    
8  use Time::HiRes qw(time);  use Time::HiRes qw(time);
9  use Data::Dump qw(dump);  use Data::Dump qw(dump);
# Line 44  sub BEGIN { Line 44  sub BEGIN {
44                  chomp( my $pwd = `pwd` );                  chomp( my $pwd = `pwd` );
45                  $prefix = "$pwd/$prefix";                  $prefix = "$pwd/$prefix";
46          }          }
47          $prefix =~ s{^(.*)/srv/Sack/[\./]+bin.+$}{$1};          $prefix =~ s{^(.*)/srv/Sack/.+$}{$1};
48          warn "# prefix $prefix";          warn "# prefix $prefix";
49    
50          $SIG{INT} = sub {          $SIG{INT} = sub {
# Line 139  sub send_sock { Line 139  sub send_sock {
139  }  }
140    
141  sub merge_out {  sub merge_out {
142          my $new = shift;          my ( $from_node, $new ) = @_;
143    
144            warn "### merge $from_node";
145    
146            my $from_port = $from_node;
147            $from_port =~ s{.+:(\d+)$}{$1};
148    
149            my $remote_digest = Sack::Digest->new( port => $from_port );
150            my ( $local, $remote ) = ( 0, 0 );
151    
152          foreach my $k1 ( keys %$new ) {          foreach my $k1 ( keys %$new ) {
153    
154                  foreach my $k2 ( keys %{ $new->{$k1} } ) {                  foreach my $k2 ( keys %{ $new->{$k1} } ) {
155    
156                          my $n   = delete $new->{$k1}->{$k2};                          my $n   = delete $new->{$k1}->{$k2};
                         my $ref = ref    $out->{$k1}->{$k2};  
157    
158                            if ( $k1 =~ m{#} ) {
159                                    die "ASSERT $k1 $k2" unless $k2 =~ m{^\d+$};
160    #warn "XXX $k1 $k2";
161                                    my $md5 = $remote_digest->{nr_md5}->[$k2] || warn "[$port] no2md5 $n not found in $from_port\n";
162                                    if ( my $local_k2 = $digest->{md5_nr}->{$md5} ) {
163                                            $k2 = $local_k2;
164                                            $local++;
165                                    } else {
166                                            $k2 = $digest->to_int( $remote_digest->{md5}->{$md5} );
167                                            $remote++;
168                                    }
169                            }
170    
171                            my $ref = ref    $out->{$k1}->{$k2};
172    #warn "XXXX $k1 $k2 $ref";
173                          if ( ! defined $out->{$k1}->{$k2} ) {                          if ( ! defined $out->{$k1}->{$k2} ) {
174                                  $out->{$k1}->{$k2} = $n;                                  $out->{$k1}->{$k2} = $n;
175                          } elsif ( $k1 =~ m{\+} ) {                          } elsif ( $k1 =~ m{\+} ) {
# Line 167  sub merge_out { Line 189  sub merge_out {
189                  }                  }
190          }          }
191    
192            warn "[$port] merge local $local remote $remote from $from_port\n";
193          warn "## merge out ", dump $out if $debug;          warn "## merge out ", dump $out if $debug;
194  }  }
195    
# Line 214  sub run_code { Line 237  sub run_code {
237                          my $s = length $o;                          my $s = length $o;
238                          $o = thaw $o;                          $o = thaw $o;
239                          warn "[$port] merge $node $s bytes\n";                          warn "[$port] merge $node $s bytes\n";
240                          merge_out $o;                          merge_out $node => $o;
241                  }                  }
242          }          }
243  }  }
# Line 343  Sacks Lorry v$VERSION - path: $path offs Line 366  Sacks Lorry v$VERSION - path: $path offs
366  __HELP__  __HELP__
367          } elsif ( $cmd =~ m{^(vi|\\e|o)}i ) {          } elsif ( $cmd =~ m{^(vi|\\e|o)}i ) {
368                  #system "vi out/*";                  #system "vi out/*";
369                    $digest->sync;
370                  system "bin/storableedit.pl", (glob('out/*.storable'))[0];                  system "bin/storableedit.pl", (glob('out/*.storable'))[0];
371          } elsif ( $cmd =~ m{^i(?:nfo)?\s?(.+)?$}i ) {          } elsif ( $cmd =~ m{^i(?:nfo)?\s?(.+)?$}i ) {
372                  info;                  info;
# Line 352  __HELP__ Line 376  __HELP__
376                  exit;                  exit;
377          } elsif ( $cmd =~ m{^(v|r)}i ) {          } elsif ( $cmd =~ m{^(v|r)}i ) {
378                  run_views;                  run_views;
379            } elsif ( $cmd =~ m{^n(ode)?\s*(\d+)}i ) {
380                    push @nodes, $1;
381                    info;
382          } elsif ( $cmd ) {          } elsif ( $cmd ) {
383                  warn "UNKNOWN ", dump $cmd;                  warn "UNKNOWN ", dump $cmd;
384          }          }

Legend:
Removed from v.46  
changed lines
  Added in v.55

  ViewVC Help
Powered by ViewVC 1.1.26