+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);
+ @oldfiles=sort @oldfiles;
+ @newfiles=sort @newfiles;
+ my %hash;
+ # hash slice!
+ @hash{@newfiles}=();
+ for my $file (@oldfiles)
+ {
+ unless(exists($hash{$file}))
+ {
+ $files_pruned=1;
+ $db->unindex($dir, $file);
+ }
+ }
+}
+
+sub list_tags
+{
+ my($db)=@_;
+ my @baretags=$db->bare_tags();
+ my $valtags=$db->tags_with_values();
+ if(@baretags)
+ {
+ print "BARE TAGS\n";
+ print join(', ', sort @baretags), "\n\n";
+ }
+ if(keys(%$valtags))
+ {
+ print "TAGS WITH VALUES\n";
+ for my $key (sort keys %$valtags)
+ {
+ print "$key: ", join(', ', sort(@{$valtags->{$key}})), "\n";
+ }
+ }
+}
+