ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/File-Rdiff/rdiff2
(Generate patch)

Comparing File-Rdiff/rdiff2 (file contents):
Revision 1.1 by root, Thu Mar 21 23:49:01 2002 UTC vs.
Revision 1.2 by root, Fri Mar 22 15:53:12 2002 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines