sub prune
{
my $dir=shift;
+ $dir=Cwd::abs_path($dir);
return unless(opendir(DIR, $dir));
+ my $base=Cwd::abs_path($db->base_dir());
+ $dir=~s/^$base\/?//;
my @oldfiles=$db->files_in($dir);
my @newfiles=grep { !/^\.\.?$/; } readdir(DIR);
closedir(DIR);
{
unless(exists($hash{$file}))
{
- # FIXME: add path, rebasify
$files_pruned=1;
- $db->unindex($file);
+ $db->unindex($dir, $file);
}
}
}
$base=$fallbackdir;
}
}
+ else
+ {
+ print "$self->{me}: $fallbackdir: not a directory\n";
+ return undef;
+ }
if(!-f $file && !$init)
{
print "$self->{me}: db not found at $file\n";
sub add
{
my($self,$path)=@_;
- my $relpath=$path;
+ my $relpath=Cwd::abs_path($path);
$relpath =~ s/^\Q$self->{base}\E\/?//;
my($filepart,$pathpart);
if($relpath !~ /\//)
sub files_in
{
my ($self, $dir)=@_;
- $dir=~s/^$self->{base}\/?//;
my $sql=("SELECT files.name FROM files\n" .
"INNER JOIN paths ON files.paths_id=paths.id\n" .
"WHERE paths.name=?\n");
- my $files=$self->cmd_rows($sql, $dir);
- return(map { $_->[0]; } @$files);
+# print "files_in: SQL: $sql\n";
+ return($self->cmd_firstcol($sql, $dir));
}
+sub unindex
+{
+ my($self, $path, $file)=@_;
+ my $sql=("DELETE FROM files WHERE id IN (" .
+ "\tSELECT files.id FROM files\n" .
+ "\tINNER JOIN paths ON paths.id=files.paths_id\n" .
+ "\tWHERE paths.name=? and files.name=? )\n");
+ $self->cmd_rows($sql, $path, $file);
+}
+
+
sub prune_directories
{
my($self)=@_;
return unless(@ids);
my $sql=("DELETE FROM files WHERE paths_id IN (\n\t" .
join(', ', map { "\"$_\""; } @ids). "\n\t)");
- print "SQL: \n", $sql, "\n";
+# print "SQL: \n", $sql, "\n";
$self->cmd($sql);
}
VACUUM
EOT
- print "SQL: $sql\n";
+# print "SQL: $sql\n";
my @sql=split(/\n\n/, $sql);
$self->cmd($_) for (@sql);
}