From: Eric Wong Date: Tue, 21 Mar 2023 23:07:19 +0000 (+0000) Subject: admin: ensure resolved GIT_DIR is absolute X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f7ee209e1e840d8ae3af24eab886d42edb55d91;p=thirdparty%2Fpublic-inbox.git admin: ensure resolved GIT_DIR is absolute We'll also support the $base arg of File::Spec->rel2abs since it should make codesearch indexing easier. --- diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index b34f22566..abfcbb9cf 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 4065b2565..e095ecd10 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 42955a482..5f4f2020c 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};