… | |
… | |
8 | open $basis, "<", $ARGV[1] |
8 | open $basis, "<", $ARGV[1] |
9 | or die "$ARGV[1]: $!"; |
9 | or die "$ARGV[1]: $!"; |
10 | open $sig, ">", $ARGV[2] |
10 | open $sig, ">", $ARGV[2] |
11 | or die "$ARGV[2]: $!"; |
11 | or die "$ARGV[2]: $!"; |
12 | |
12 | |
13 | my $job = new_sig File::Rdiff::Job; |
13 | my $job = new_sig File::Rdiff::Job 128; |
14 | my $buf = new File::Rdiff::Buffers 4096; |
14 | my $buf = new File::Rdiff::Buffers 4096; |
15 | |
15 | |
16 | while ($job->iter($buf) == BLOCKED) { |
16 | while ($job->iter($buf) == BLOCKED) { |
17 | # fetch more input data |
17 | # fetch more input data |
18 | $buf->avail_in or do { |
18 | $buf->avail_in or do { |
19 | my $in; |
19 | my $in; |
20 | 65536 == sysread $basis, $in, 65536 |
20 | 65536 == sysread $basis, $in, 65536 or $buf->eof; |
21 | or $buf->eof; |
|
|
22 | $buf->in($in); |
21 | $buf->in($in); |
23 | }; |
22 | }; |
24 | print $sig $buf->out; |
23 | print $sig $buf->out; |
25 | } |
24 | } |
|
|
25 | print $sig $buf->out; |
26 | |
26 | |
27 | # the last time |
|
|
28 | print $sig $buf->out; |
|
|
29 | } elsif ($ARGV[0] eq "delta") { |
27 | } elsif ($ARGV[0] eq "delta") { |
30 | open $sig, "<$ARGV[1]" or die "$ARGV[1]: $!"; |
28 | open $sig, "<$ARGV[1]" or die "$ARGV[1]: $!"; |
31 | open $new, "<$ARGV[2]" or die "$ARGV[2]: $!"; |
29 | open $new, "<$ARGV[2]" or die "$ARGV[2]: $!"; |
32 | open $delta, ">$ARGV[3]" or die "$ARGV[3]: $!"; |
30 | open $delta, ">$ARGV[3]" or die "$ARGV[3]: $!"; |
33 | |
31 | |
34 | # first load the signature into memory |
32 | # first load the signature into memory |
35 | $sig = loadsig_file $sig; |
33 | my $job = new_loadsig File::Rdiff::Job; |
|
|
34 | my $buf = new File::Rdiff::Buffers 0; |
36 | |
35 | |
37 | ref $sig or exit 1; |
36 | do { |
|
|
37 | $buf->avail_in or do { |
|
|
38 | my $in; |
|
|
39 | 65536 == sysread $sig, $in, 65536 or $buf->eof; |
|
|
40 | $buf->in($in); |
|
|
41 | }; |
|
|
42 | } while $job->iter($buf) == BLOCKED; |
|
|
43 | |
|
|
44 | $sig = $job->signature; |
38 | |
45 | |
39 | $sig->build_hash_table; |
46 | $sig->build_hash_table; |
40 | |
47 | |
41 | File::Rdiff::delta_file $sig, $new, $delta; |
48 | # now create the delta file |
|
|
49 | my $job = new_delta File::Rdiff::Job $sig; |
|
|
50 | my $buf = new File::Rdiff::Buffers 65536; |
|
|
51 | |
|
|
52 | do { |
|
|
53 | $buf->avail_in or do { |
|
|
54 | my $in; |
|
|
55 | 65536 == sysread $new, $in, 65536 or $buf->eof; |
|
|
56 | $buf->in($in); |
|
|
57 | }; |
|
|
58 | print $delta $buf->out; |
|
|
59 | } while $job->iter($buf) == BLOCKED; |
|
|
60 | print $delta $buf->out; |
|
|
61 | |
42 | } elsif ($ARGV[0] eq "patch") { |
62 | } elsif ($ARGV[0] eq "patch") { |
43 | open $base, "<$ARGV[1]" or die "$ARGV[1]: $!"; |
63 | open $base, "<$ARGV[1]" or die "$ARGV[1]: $!"; |
44 | open $delta, "<$ARGV[2]" or die "$ARGV[2]: $!"; |
64 | open $delta, "<$ARGV[2]" or die "$ARGV[2]: $!"; |
45 | open $new, ">$ARGV[3]" or die "$ARGV[3]: $!"; |
65 | open $new, ">$ARGV[3]" or die "$ARGV[3]: $!"; |
46 | |
66 | |
|
|
67 | # NYI |
47 | File::Rdiff::patch_file $base, $delta, $new; |
68 | File::Rdiff::patch_file $base, $delta, $new; |
48 | } else { |
69 | } else { |
49 | print <<EOF; |
70 | print <<EOF; |
50 | $0 signature BASIS SIGNATURE |
71 | $0 signature BASIS SIGNATURE |
51 | $0 delta SIGNATURE NEW DELTA |
72 | $0 delta SIGNATURE NEW DELTA |