From: Eric Wong Date: Wed, 3 May 2023 03:11:13 +0000 (+0000) Subject: admin: hoist out resolve_any_idxdir from resolve_{inboxdir,eidxdir} X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af358066af69ad92d5ae634b9af63ac301eec287;p=thirdparty%2Fpublic-inbox.git admin: hoist out resolve_any_idxdir from resolve_{inboxdir,eidxdir} This bit of common code will be handy for the upcoming resolve_cidxdir, too. --- diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index da34a3bd1..96c6652cc 100644 --- a/lib/PublicInbox/Admin.pm +++ b/lib/PublicInbox/Admin.pm @@ -28,12 +28,12 @@ sub setup_signals { }; } -sub resolve_eidxdir { - my ($cd) = @_; +sub resolve_any_idxdir ($$) { + my ($cd, $lock_bn) = @_; my $try = $cd // '.'; my $root_dev_ino; - while (1) { # favor v2, first - if (-f "$try/ei.lock") { + while (1) { + if (-f "$try/$lock_bn") { # inbox.lock, ei.lock, cidx.lock return rel2abs_collapsed($try); } elsif (-d $try) { my @try = stat _; @@ -49,28 +49,16 @@ sub resolve_eidxdir { } } +sub resolve_eidxdir ($) { resolve_any_idxdir($_[0], 'ei.lock') } + sub resolve_inboxdir { my ($cd, $ver) = @_; - my $try = $cd // '.'; - my $root_dev_ino; - while (1) { # favor v2, first - if (-f "$try/inbox.lock") { - $$ver = 2 if $ver; - return rel2abs_collapsed($try); - } elsif (-d $try) { - my @try = stat _; - $root_dev_ino //= do { - my @root = stat('/') or die "stat /: $!\n"; - "$root[0]\0$root[1]"; - }; - last if "$try[0]\0$try[1]" eq $root_dev_ino; - $try .= '/..'; # continue, cd up - } else { - die "`$try' is not a directory\n"; - } - } - my $dir = resolve_git_dir($cd); - $$ver = 1 if $ver; + my $dir; + if (defined($dir = resolve_any_idxdir($cd, 'inbox.lock'))) { # try v2 + $$ver = 2 if $ver; + } elsif (defined($dir = resolve_git_dir($cd))) { # try v1 + $$ver = 1 if $ver; + } # else: not an inbox at all $dir; }