X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=bin%2Fid3fs-index;h=7f0c17ca67464afd28edd3f359334c8553b20a52;hb=198047fe7da462f486e7da3a751ecdea8d285750;hp=cff09900274cda460f8c75135d6f8a6258250fda;hpb=f1d1250227aff1034009824ec5ce723d45397ec2;p=id3fs.git diff --git a/bin/id3fs-index b/bin/id3fs-index index cff0990..7f0c17c 100755 --- a/bin/id3fs-index +++ b/bin/id3fs-index @@ -1,6 +1,20 @@ #!/usr/bin/perl -w -# Ian Beckwith # +# id3fs - a FUSE-based filesystem for browsing audio metadata +# Copyright (C) 2010 Ian Beckwith +# +# 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 3 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, see . use lib '/home/ianb/projects/id3fs/id3fs/lib'; # FIXME: remove use strict; @@ -30,15 +44,27 @@ my $optret=GetOptions( "list|l" => \$list, ); +if($list && !@ARGV) +{ + push(@ARGV, "."); +} usage() if(!@ARGV || !$optret || $help); $init=1 unless($list); -if(@ARGV > 1 && !defined($basedir)) +unless(defined($basedir) && defined($dbpath)) { - die("$me: --basedir must be specified if multiple paths are supplied\n"); + $basedir=ID3FS::DB::find_db($me, $init, @ARGV); + exit unless($basedir); + my $absbase=Cwd::abs_path($basedir); + for my $dir (@ARGV) + { + if(Cwd::abs_path($dir) !~ /^\Q$absbase\E/) + { + die("$me: $dir: must be under basedir $absbase - use --basedir to specify\n"); + } + } } - -my $db=ID3FS::DB->new($me, $verbose, $init, $dbpath, $basedir, $ARGV[0]); +my $db=ID3FS::DB->new($me, $verbose, $init, $basedir, $dbpath); exit unless($db); if($list) @@ -64,6 +90,8 @@ else print "$me: removing data from pruned files\n" if $verbose; $db->remove_unused(); } + print "$me: analyzing db\n" if $verbose; + $db->analyze(); } sub wanted @@ -86,7 +114,10 @@ sub wanted 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); @@ -98,9 +129,8 @@ sub prune { unless(exists($hash{$file})) { - # FIXME: add path, rebasify $files_pruned=1; - $db->unindex($file); + $db->unindex($dir, $file); } } }