From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 3B8D51F524 for ; Tue, 4 Oct 2022 19:12:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1664910761; bh=SMAeUMY/KClVVPJ5/alS9W7fTzIR5RuaOZVPWB240aE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=HomgZKr75rGM5n3WQMtnaJGXTGz4f/i99q3xcFPZsDw620W8rrrD8LeyAVDFwkdy3 XVWsVOvy8E6Ky+Pr3jpbCiQoxfl+IxoAQS8lJHUKlPU86XCUHU6INSpHEZg2rW2L0H TDvJzsyhsMd/P6d2ojV8bB5OuYGdfnUBSMABgmFs= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 04/10] git: move cloneurl + description reading here Date: Tue, 4 Oct 2022 19:12:34 +0000 Message-Id: <20221004191240.1056304-5-e@80x24.org> In-Reply-To: <20221004191240.1056304-1-e@80x24.org> References: <20221004191240.1056304-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We'll be using these functions for serving coderepos natively without cgit. --- lib/PublicInbox/ExtSearch.pm | 2 +- lib/PublicInbox/Git.pm | 30 ++++++++++++++++++++++++------ lib/PublicInbox/Inbox.pm | 23 ++++------------------- t/init.t | 2 +- t/lei-mirror.t | 10 +++++----- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/lib/PublicInbox/ExtSearch.pm b/lib/PublicInbox/ExtSearch.pm index a69c0e76..fa49a1d0 100644 --- a/lib/PublicInbox/ExtSearch.pm +++ b/lib/PublicInbox/ExtSearch.pm @@ -108,7 +108,7 @@ sub altid_map { {} } sub description { my ($self) = @_; ($self->{description} //= - PublicInbox::Inbox::cat_desc("$self->{topdir}/description")) // + PublicInbox::Git::cat_desc("$self->{topdir}/description")) // '$EXTINDEX_DIR/description missing'; } diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 78b47096..2f0bb6a0 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -498,13 +498,31 @@ sub modified ($) { (split(/ /, <$fh> // time))[0] + 0; # integerize for JSON } +sub try_cat { + my ($path) = @_; + open(my $fh, '<', $path) or return ''; + local $/; + <$fh> // ''; +} + +sub cat_desc ($) { + my $desc = try_cat($_[0]); + chomp $desc; + utf8::decode($desc); + $desc =~ s/\s+/ /smg; + $desc eq '' ? undef : $desc; +} + sub description { - my $desc = ''; - if (open(my $fh, '<:utf8', "$_[0]->{git_dir}/description")) { - local $/ = "\n"; - chomp($desc = <$fh> // ''); - } - $desc eq '' ? 'Unnamed repository' : $desc; + cat_desc("$_[0]->{git_dir}/description") // 'Unnamed repository'; +} + +sub cloneurl { + my ($self) = @_; + $self->{cloneurl} // do { + my @urls = split(/\s+/s, try_cat("$self->{git_dir}/cloneurl")); + scalar(@urls) ? ($self->{cloneurl} = \@urls) : undef; + } // []; } # for grokmirror, which doesn't read gitweb.description diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index 8ac7eb30..3532bb58 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -181,33 +181,18 @@ sub over { } // ($req ? croak("E: $@") : undef); } -sub try_cat { - my ($path) = @_; - open(my $fh, '<', $path) or return ''; - local $/; - <$fh> // ''; -} - -sub cat_desc ($) { - my $desc = try_cat($_[0]); - local $/ = "\n"; - chomp $desc; - utf8::decode($desc); - $desc =~ s/\s+/ /smg; - $desc eq '' ? undef : $desc; -} - sub description { my ($self) = @_; - ($self->{description} //= cat_desc("$self->{inboxdir}/description")) // + ($self->{description} //= + PublicInbox::Git::cat_desc("$self->{inboxdir}/description")) // '($INBOX_DIR/description missing)'; } sub cloneurl { my ($self) = @_; $self->{cloneurl} // do { - my $s = try_cat("$self->{inboxdir}/cloneurl"); - my @urls = split(/\s+/s, $s); + my @urls = split(/\s+/s, + PublicInbox::Git::try_cat("$self->{inboxdir}/cloneurl")); scalar(@urls) ? ($self->{cloneurl} = \@urls) : undef; } // []; } diff --git a/t/init.t b/t/init.t index 6f4c9dce..460c83f3 100644 --- a/t/init.t +++ b/t/init.t @@ -102,7 +102,7 @@ sub quiet_fail { umask($umask) // xbail "umask: $!"; ok(-d "$tmpdir/a/b/c/d", 'directory created'); my $desc = "$tmpdir/a/b/c/d/description"; - is(PublicInbox::Inbox::try_cat($desc), + is(PublicInbox::Git::try_cat($desc), "public inbox for abcd\@example.com\n", 'description set'); my $mode = (stat($desc))[2]; is(sprintf('0%03o', $mode & 0777), '0644', diff --git a/t/lei-mirror.t b/t/lei-mirror.t index 32a5b039..c172483b 100644 --- a/t/lei-mirror.t +++ b/t/lei-mirror.t @@ -22,7 +22,7 @@ test_lei({ tmpdir => $tmpdir }, sub { lei_ok('add-external', $t1, '--mirror', "$http/t1/", \'--mirror v1'); my $mm_dup = "$t1/public-inbox/msgmap.sqlite3"; ok(-f $mm_dup, 't1-mirror indexed'); - is(PublicInbox::Inbox::try_cat("$t1/description"), + is(PublicInbox::Git::try_cat("$t1/description"), "mirror of $http/t1/\n", 'description set'); ok(-f "$t1/Makefile", 'convenience Makefile added (v1)'); ok(-f "$t1/inbox.config.example", 'inbox.config.example downloaded'); @@ -43,7 +43,7 @@ test_lei({ tmpdir => $tmpdir }, sub { ok(-f $mm_dup, 't2-mirror indexed'); ok(-f "$t2/description", 't2 description'); ok(-f "$t2/Makefile", 'convenience Makefile added (v2)'); - is(PublicInbox::Inbox::try_cat("$t2/description"), + is(PublicInbox::Git::try_cat("$t2/description"), "mirror of $http/t2/\n", 'description set'); $tb = PublicInbox::Msgmap->new_file($mm_dup)->created_at; is($tb, $created{v2}, 'created_at matched in v2 mirror'); @@ -199,14 +199,14 @@ $td->join; my $exp = "mirror of https://example.com/src/\n"; my $f = "$tmpdir/description"; PublicInbox::LeiMirror::set_description($mrr); - is(PublicInbox::Inbox::try_cat($f), $exp, 'description set on ENOENT'); + is(PublicInbox::Git::try_cat($f), $exp, 'description set on ENOENT'); my $fh; (open($fh, '>', $f) and close($fh)) or xbail $!; PublicInbox::LeiMirror::set_description($mrr); - is(PublicInbox::Inbox::try_cat($f), $exp, 'description set on empty'); + is(PublicInbox::Git::try_cat($f), $exp, 'description set on empty'); (open($fh, '>', $f) and print $fh "x\n" and close($fh)) or xbail $!; - is(PublicInbox::Inbox::try_cat($f), "x\n", + is(PublicInbox::Git::try_cat($f), "x\n", 'description preserved if non-default'); }