From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id E71201F677 for ; Wed, 3 May 2023 03:11:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1683083475; bh=5UHpA2bVrsjCuJuvSTZ/JUwjyiaeZ/Q4JL7dEF1mcAE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=KAv/sIO2JEtrvwFKM5AE6UbSs9OzPBQUc+R2USdASLOYgc9iT04LIF3VBx/flXEVG QcOxnDpIf+ObQzM9V80C/QYwG2QeQURQgSMuOY4/mWdlW7DP4AISGo9Hq2YuzEoTZv OoHEXkTRKcZwoptTySmsSQ/uKERBwjx3vdG4myOI= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/2] admin: hoist out resolve_any_idxdir from resolve_{inboxdir,eidxdir} Date: Wed, 3 May 2023 03:11:13 +0000 Message-Id: <20230503031114.3315491-2-e@80x24.org> In-Reply-To: <20230503031114.3315491-1-e@80x24.org> References: <20230503031114.3315491-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: This bit of common code will be handy for the upcoming resolve_cidxdir, too. --- lib/PublicInbox/Admin.pm | 36 ++++++++++++------------------------ 1 file 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; }