From f8f6630c0f86e6b79339eef7d5bc04a5563cb0e9 Mon Sep 17 00:00:00 2001 From: freesource Date: Wed, 5 Jan 2005 21:55:31 +0000 Subject: [PATCH] Non-existent files where causing this to fail, and the db, there was also a die, now there is a check to avoid this. --- bin/fastswim | 184 ++++++++++++++++++++++++++------------------------- 1 file changed, 95 insertions(+), 89 deletions(-) diff --git a/bin/fastswim b/bin/fastswim index 1253e5f..c439e59 100755 --- a/bin/fastswim +++ b/bin/fastswim @@ -52,12 +52,13 @@ my %version; #$#name = 2000; #$#ppackage = 2000; - # This way has been de-pre-c-whatever-ated because it lacks version - # rememberance, and is just kept for testing purposes - if ($#ARGV == -1) { - print STDERR "swim: fastswim requires option/arguments, see program for instructions\n"; - exit; - chdir("$ARGV[1]"); + +# This way has been de-pre-c-whatever-ated because it lacks version +# rememberance, and is just kept for testing purposes +if ($#ARGV == -1) { + print STDERR "swim: fastswim requires option/arguments, see program for instructions\n"; + exit; + chdir("$ARGV[1]"); #consider readdir @ppackage = <*.list>; } @@ -76,100 +77,105 @@ my %version; } close(TRANSFER); } + - # Make a nice md. I decided on a Hash of Lists, giving all - # files/dirs unique name, and then a list of packages which - # correspond..because this should be faster than a Hash of Hash - # where you'd have to loop through all packages names..find the - # files/dir in all packages names which are the same..I'd assume a HL - # would be a quicker query, even though the Hash would be enormous. - # Possible things: a tree for faster query. +# Make a nice md. I decided on a Hash of Lists, giving all +# files/dirs unique name, and then a list of packages which +# correspond..because this should be faster than a Hash of Hash +# where you'd have to loop through all packages names..find the +# files/dir in all packages names which are the same..I'd assume a HL +# would be a quicker query, even though the Hash would be enormous. +# Possible things: a tree for faster query. - # Put everything into an array..every other is package name - # Better check for packages which don't have /. in their *.list... - # which is rare, but does happen. Sometimes *.list(s) don't have - # all the parent directories, but we won't worry about that. - print STDERR " Making the massive hash\n"; - $| = 1; my $x = 1; - foreach $thingy (sort @ppackage) { - open(LIST, "$ARGV[1]/$thingy") or die "Humm, strange"; +# Put everything into an array..every other is package name +# Better check for packages which don't have /. in their *.list... +# which is rare, but does happen. Sometimes *.list(s) don't have +# all the parent directories, but we won't worry about that. +print STDERR " Making the massive hash\n"; +$| = 1; my $x = 1; +foreach $thingy (sort @ppackage) { + + if (-e "$ARGV[1]/$thingy") { + open(LIST, "$ARGV[1]/$thingy"); # Because of the version..there are sometimes dots $thingy =~ m,(.*)\.list,; my $count = 0; my @count = ; close(LIST); - foreach (@count) { - $x = 1 if $x == 6; - print STDERR "|\r" if $x == 1 || $x == 4; print STDERR "/\r" if $x == 2; - print STDERR "-\r" if $x == 3 || $x == 6; print STDERR "\\\r" if $x == 5; - $x++; - chomp $_; - # does /. exist? it should be first. - if ($count == 0) { - if ($_ !~ m,\/\.,) { - my $shifter = $_; - my @redolist = @count; - push(@count,$shifter); - # humm let's rebuild the offending backup list, this - # is important for --db. - unshift(@redolist,"/."); - open(REDOLIST, ">$ARGV[3]/$ARGV[1]/backup/$thingy.bk.bk") - or warn "needed to edit $thingy because it lacked /., + + foreach (@count) { + $x = 1 if $x == 6; + print STDERR "|\r" if $x == 1 || $x == 4; print STDERR "/\r" if $x == 2; + print STDERR "-\r" if $x == 3 || $x == 6; print STDERR "\\\r" if $x == 5; + $x++; + chomp $_; + # does /. exist? it should be first. + if ($count == 0) { + if ($_ !~ m,\/\.,) { + my $shifter = $_; + my @redolist = @count; + push(@count,$shifter); + # humm let's rebuild the offending backup list, this + # is important for --db. + unshift(@redolist,"/."); + open(REDOLIST, ">$ARGV[3]/$ARGV[1]/backup/$thingy.bk.bk") + or warn "needed to edit $thingy because it lacked /., but could not open up a backup file $ARGV[3]/$ARGV[1]/backup/$thingy.bk.bk\n"; - my $rd; - foreach $rd (@redolist) { - chomp $rd; - print REDOLIST "$rd\n"; - } - close(REDOLIST); - rename - ("$ARGV[3]/$ARGV[1]/backup/$thingy.bk.bk","$ARGV[3]/$ARGV[1]/backup/$thingy.bk"); - $_ = "/."; - } - } - $count = 1; - $repeaters{$_}++; - if ($repeaters{$_} == 1) { - $temp = 0; - } - else { - $temp = $repeaters{$_} - 1; - } - if (defined $version{$1}) { - $HL{$_}[$temp] = "$1_$version{$1}"; - } + my $rd; + foreach $rd (@redolist) { + chomp $rd; + print REDOLIST "$rd\n"; + } + close(REDOLIST); + rename + ("$ARGV[3]/$ARGV[1]/backup/$thingy.bk.bk","$ARGV[3]/$ARGV[1]/backup/$thingy.bk"); + $_ = "/."; + } + } + $count = 1; + $repeaters{$_}++; + if ($repeaters{$_} == 1) { + $temp = 0; + } + else { + $temp = $repeaters{$_} - 1; + } + if (defined $version{$1}) { + $HL{$_}[$temp] = "$1_$version{$1}"; + } } - } - undef @ppackage; + } +} +undef @ppackage; - # We will create one file with the 1..and another with >1.. - # than split..reverse..and order.accordingly..this makes - # things much faster. Remember clean-up routines for kill. - print STDERR " Starting ... writing to $ARGV[2]!\n"; - # Create the database - open(BIG, ">$ARGV[2]/big.debian") or die; - open(LONG, ">$ARGV[2]/long.debian") or die; - foreach $thingy (sort keys %HL ) { - $x = 1 if $x == 6; - print STDERR "|\r" if $x == 1 || $x == 4; print STDERR "/\r" if $x == 2; - print STDERR "-\r" if $x == 3 || $x == 6; print STDERR "\\\r" if $x == 5; - $x++; - # Humm, will split or grep be faster? - #my $tingy = "@{ $HL{$thingy} }" . " " . @{ $HL{$thingy} }; - my $tingy = "@{ $HL{$thingy} }"; - if (@{ $HL{$thingy} } > 1 || @{ $HL{$thingy} } eq "") { - print LONG "$thingy -> $tingy\n"; - } - elsif (@{ $HL{$thingy} } == 1) { - print BIG "$thingy -> $tingy\n"; - } - } - #print "Finished\n"; - close(BIG); - close(LONG); - #undef %HL; - print STDERR " Cleaning up\n"; +# We will create one file with the 1..and another with >1.. +# than split..reverse..and order.accordingly..this makes +# things much faster. Remember clean-up routines for kill. +print STDERR " Starting ... writing to $ARGV[2]!\n"; +# Create the database +open(BIG, ">$ARGV[2]/big.debian") or die "Couldn't find big.debian\n"; +open(LONG, ">$ARGV[2]/long.debian") or die "Couldn't find long.debian\n"; +foreach $thingy (sort keys %HL ) { + $x = 1 if $x == 6; + print STDERR "|\r" if $x == 1 || $x == 4; print STDERR "/\r" if $x == 2; + print STDERR "-\r" if $x == 3 || $x == 6; print STDERR "\\\r" if $x == 5; + $x++; + # Humm, will split or grep be faster? + #my $tingy = "@{ $HL{$thingy} }" . " " . @{ $HL{$thingy} }; + my $tingy = "@{ $HL{$thingy} }"; + if (@{ $HL{$thingy} } > 1 || @{ $HL{$thingy} } eq "") { + print LONG "$thingy -> $tingy\n"; + } + elsif (@{ $HL{$thingy} } == 1) { + print BIG "$thingy -> $tingy\n"; + } +} +#print "Finished\n"; +close(BIG); +close(LONG); +#undef %HL; +print STDERR " Cleaning up\n"; __END__