We'll also support the $base arg of File::Spec->rel2abs
since it should make codesearch indexing easier.
---
 lib/PublicInbox/Admin.pm    | 4 +++-
 lib/PublicInbox/Config.pm   | 2 +-
 script/public-inbox-convert | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm
index b34f2256..abfcbb9c 100644
--- a/lib/PublicInbox/Admin.pm
+++ b/lib/PublicInbox/Admin.pm
@@ -82,7 +82,9 @@ sub resolve_git_dir {
        my $dir = do { local $/; <$fh> };
        close $fh or die "error in @$cmd (cwd:${\($cd // '.')}): $?\n";
        chomp $dir;
-       rel2abs_collapsed($dir eq '.' ? ($cd // $dir) : $dir);
+       # --absolute-git-dir requires git v2.13.0+
+       $dir = rel2abs_collapsed($dir, $cd) if $dir !~ m!\A/!;
+       $dir;
 }
 
 # for unconfigured inboxes
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 4065b256..e095ecd1 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -371,7 +371,7 @@ sub git_bool {
 # is sufficient and doesn't leave "/.." or "/../"
 sub rel2abs_collapsed {
        require File::Spec;
-       my $p = File::Spec->rel2abs($_[-1]);
+       my $p = File::Spec->rel2abs(@_);
        return $p if substr($p, -3, 3) ne '/..' && index($p, '/../') < 0;
        require Cwd;
        Cwd::abs_path($p);
diff --git a/script/public-inbox-convert b/script/public-inbox-convert
index 42955a48..5f4f2020 100755
--- a/script/public-inbox-convert
+++ b/script/public-inbox-convert
@@ -75,7 +75,7 @@ if ($opt->{'index'}) {
 }
 local %ENV = (%$env, %ENV) if $env;
 my $new = { %$old };
-$new->{inboxdir} = $cfg->rel2abs_collapsed($new_dir);
+$new->{inboxdir} = PublicInbox::Config::rel2abs_collapsed($new_dir);
 $new->{version} = 2;
 $new = PublicInbox::InboxWritable->new($new, { nproc => $opt->{jobs} });
 $new->{-no_fsync} = 1 if !$opt->{fsync};

Reply via email to