Mass Deface
Email Grabber
;
close(IN);
$part = 1;
my %written = ();
sub process {
print "Lines $_[0] to $_[1]\n" if ($opts{v});
if ($opts{d}) {
$out = $_[2];
$out =~ s,/,_,g;
} else {
$out = sprintf ("%s.part%03d", $ARGV[0], $part);
}
unless ($opts{E}) {
$out = sprintf("%s.patch", $out);
}
if ($written{$_[2]}) { $mode = '>>' } else { $mode = '>' }
$written{$_[2]} = $_[2];
open(OUT, $mode, $out) or die "Can't open output file\n";
for $i ($_[0] .. $_[1]) {
unless (($i == $_[1]) && ($input[$i - 1] =~ /^diff\s+\S+/)) {
print OUT $input[$i - 1];
}
}
close(OUT);
print "Wrote ".$mode.$out."\n";
$part++;
}
if($#ARGV != 0) {
die "usage: splitdiff DIFF\n";
}
$getlist = 'lsdiff -n ';
$getlist .= '--strip='.$opts{p}.' ' if ($opts{p});
$getlist .= $ARGV[0]; # Yuck. How do you do this properly in perl?
open(LIST, '-|', $getlist) or die "Can't run lsdiff";
@list = ;
close LIST;
my %seen = ();
my @this = ();
my $ready = 0;
my $linenum;
my $file;
for (@list) {
/\s*(\d+)\s*(.*)$/;
($linenum, $file) = ($1, $2);
if ($ready == 1) {
process ($firstline, $linenum - 1, $prevfile);
$ready = 0;
}
$prevfile = $file;
push @this, [ $linenum, $file ];
if ($opts{'a'} || $seen{$file}) {
$firstline = $this[0]->[0];
$ready = 1;
if ($opts{v}) {
for (@this) {
print $_->[0].": ".$_->[1]."\n";
}
print "\n";
}
@this = ();
}
$seen{$file} = $file;
}
if ($ready == 1) {
process ($firstline, $linenum - 1, $file) if $linenum > $firstline;
process ($linenum, $#input + 1, $file);
}
if ($part == 1) {
print "Input contained no duplicate files; nothing to do\n";
}