mirror of https://github.com/fspc/dswim
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.1 KiB
144 lines
4.1 KiB
# Debian System Wide Information Manager
|
|
# Copyright (C) 1998-2005 Jonathan Rosenbaum
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
|
package SWIM::Library;
|
|
use strict;
|
|
use SWIM::Conf;
|
|
use SWIM::Global;
|
|
use vars qw(@ISA @EXPORT);
|
|
|
|
use Exporter;
|
|
@ISA = qw(Exporter);
|
|
@EXPORT = qw(which_archdist finddb root compress_contents);
|
|
|
|
|
|
# functions which do not use DB_File which_archdist() finddb() root()
|
|
|
|
# which archictecture and distribution does this database involve
|
|
sub which_archdist {
|
|
|
|
my ($commands) = @_;
|
|
|
|
my ($arch,$dist);
|
|
#if ($commands->{"initndb"} || $commands->{"rebuildndb"}) {
|
|
if ($commands->{"arch"}) {
|
|
$arch = "-" . $commands->{"arch"};
|
|
}
|
|
else {
|
|
$arch = "-$architecture";
|
|
}
|
|
|
|
if ($commands->{"dists"}) {
|
|
$dist = "-" . $commands->{"dists"};
|
|
}
|
|
else {
|
|
$dist = "-$distribution";
|
|
}
|
|
return ($arch,$dist);
|
|
# }
|
|
|
|
} # end sub which_archdist
|
|
|
|
|
|
# finding any database
|
|
sub finddb {
|
|
|
|
my ($commands) = @_;
|
|
|
|
my $fileplace;
|
|
|
|
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
|
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
|
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
|
$fileplace = "$main::home$parent$library";
|
|
return $fileplace;
|
|
}
|
|
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
|
$fileplace = "$main::home$parent$base";
|
|
return $fileplace;
|
|
}
|
|
|
|
} # end sub finddb
|
|
|
|
# This gives the option to be able to used -d & -l, but not -f, by only
|
|
# copying Contents over to contentsindex*.deb.gz. This the fast way.
|
|
sub compress_contents {
|
|
|
|
my ($Contents,$commands) = @_;
|
|
my %commands = %$commands;
|
|
my $contentsdb = finddb(\%commands);
|
|
my($arch,$dist) = which_archdist(\%commands);
|
|
my $contentsindex = "$contentsdb/ncontentsindex$arch$dist.deb";
|
|
my ($contentsindexgz, $mtime);
|
|
if (-e "$contentsdb/ncontentsindex$arch$dist.deb.gz") {
|
|
$contentsindexgz = "$contentsdb/ncontentsindex$arch$dist.deb.gz";
|
|
$mtime = (stat("$contentsindexgz"))[9];
|
|
}
|
|
else {
|
|
$contentsindexgz = "$contentsdb/ncontentsindex$arch$dist.deb.gz";
|
|
}
|
|
|
|
my $ex;
|
|
my $Contents_mtime = (stat("$Contents"))[9];
|
|
my $BContents = $Contents;
|
|
$Contents = -B $Contents || $Contents =~ m,\.(gz|Z)$, ?
|
|
"$gzip -dc $Contents|" : "cat $Contents|";
|
|
if (defined $mtime) {
|
|
if ($mtime == $Contents_mtime) {
|
|
print "Same Contents files, won't compress\n";
|
|
exit if !$commands->{"ndb"};
|
|
$ex = "stop";
|
|
}
|
|
else {
|
|
unlink($contentsindexgz);
|
|
}
|
|
}
|
|
if (!defined $ex) {
|
|
print "Copying new Contents\n";
|
|
#system $copy, $BContents, $contentsindexgz;
|
|
|
|
# changed for >= 0.2.9
|
|
# changed again >= 0.3.4
|
|
open(CONTENTS, "$Contents") or die "where is it?\n";
|
|
open(CONTENTSDB,">$contentsindex");
|
|
while (<CONTENTS>) {
|
|
##if (/^FILE\s*LOCATION$/) {
|
|
##while (<CONTENTS>) {
|
|
s,^(\./)+,,; # filter for Debians altered dir structure
|
|
print CONTENTSDB $_;
|
|
##}
|
|
##}
|
|
}
|
|
print "Compressing Contents\n";
|
|
# added -f just in case
|
|
system "$gzip", "-f", "-9", "$contentsindex";
|
|
utime(time,$Contents_mtime,$contentsindexgz);
|
|
}
|
|
|
|
} # end sub compress_contents
|
|
|
|
# for / files
|
|
sub root {
|
|
|
|
if ($argument eq "/") {
|
|
$argument = "/.";
|
|
}
|
|
} # end sub root
|
|
|
|
|
|
1;
|
|
|