about summary refs log tree commit homepage
path: root/script/public-inbox-index
diff options
context:
space:
mode:
Diffstat (limited to 'script/public-inbox-index')
-rwxr-xr-xscript/public-inbox-index21
1 files changed, 18 insertions, 3 deletions
diff --git a/script/public-inbox-index b/script/public-inbox-index
index 61f21d70..1431b99e 100755
--- a/script/public-inbox-index
+++ b/script/public-inbox-index
@@ -9,8 +9,10 @@
 use strict;
 use warnings;
 use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
+use Cwd 'abs_path';
 my $usage = "public-inbox-index GIT_DIR";
 use PublicInbox::Config;
+my $config = PublicInbox::Config->new;
 eval { require PublicInbox::SearchIdx };
 if ($@) {
         print STDERR "Search::Xapian required for $0\n";
@@ -42,8 +44,8 @@ sub resolve_git_dir {
                 };
                 close $fh or die "error in $cmd: $!\n";
                 chomp $dir;
-                return $cd if ($dir eq '.' && defined $cd);
-                $dir;
+                return abs_path($cd) if ($dir eq '.' && defined $cd);
+                abs_path($dir);
         }
 }
 
@@ -56,13 +58,26 @@ if (@ARGV) {
 sub usage { print STDERR "Usage: $usage\n"; exit 1 }
 usage() unless @dirs;
 
+foreach my $k (keys %$config) {
+        $k =~ /\Apublicinbox\.([^\.]+)\.mainrepo\z/ or next;
+        my $name = $1;
+        my $v = $config->{$k};
+        for my $i (0..$#dirs) {
+                next if $dirs[$i] ne $v;
+                my $ibx = $config->lookup_name($name);
+                $dirs[$i] = $ibx if $ibx;
+        }
+}
+
 foreach my $dir (@dirs) {
         index_dir($dir);
 }
 
 sub index_dir {
         my ($git_dir) = @_;
-        -d $git_dir or die "$git_dir does not appear to be a git repository\n";
+        if (!ref $git_dir && ! -d $git_dir) {
+                die "$git_dir does not appear to be a git repository\n";
+        }
         my $s = PublicInbox::SearchIdx->new($git_dir, 1);
         $s->index_sync({ reindex => $reindex });
 }