diff options
author | Eric Wong <e@80x24.org> | 2023-05-03 03:11:13 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-05-03 06:48:26 +0000 |
commit | af358066af69ad92d5ae634b9af63ac301eec287 (patch) | |
tree | 3593781543977d296d02edfb6a583573bf79ae26 | |
parent | 9f2dfa6dbec4b5e162a9f4812351f567bbc331ee (diff) | |
download | public-inbox-af358066af69ad92d5ae634b9af63ac301eec287.tar.gz |
This bit of common code will be handy for the upcoming resolve_cidxdir, too.
-rw-r--r-- | lib/PublicInbox/Admin.pm | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index da34a3bd..96c6652c 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; } |