From: Eric Wong Date: Tue, 4 Oct 2022 19:12:34 +0000 (+0000) Subject: git: move cloneurl + description reading here X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=a002384a74382df2649d6a1f8dfba4f291af032e git: move cloneurl + description reading here We'll be using these functions for serving coderepos natively without cgit. --- 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'); }