From: Eric Wong Date: Tue, 16 Jan 2024 11:52:55 +0000 (+0000) Subject: www: repolist: support globbing in URL X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=65690a33c5a527d5f3fef9320899eb9f4e1d25c8;p=thirdparty%2Fpublic-inbox.git www: repolist: support globbing in URL This can make it easier to find deeply-nested repositories on my mirror of git.kernel.org. It's not perfect, since projects like Linux use several completely different basenames (e.g. linux.git vs vfs.git vs net.git), but it can still help find significant matches further up a tree. I don't expect glob characters to conflict with actual git repositories used by reasonable people, but direct (non-glob) hits are still tried first. --- diff --git a/lib/PublicInbox/RepoList.pm b/lib/PublicInbox/RepoList.pm index 4b313ed64..39dc9c0bf 100644 --- a/lib/PublicInbox/RepoList.pm +++ b/lib/PublicInbox/RepoList.pm @@ -16,9 +16,9 @@ sub html_top_fallback { # WwwStream->html_repo_top } sub html ($$$) { - my ($wcr, $ctx, $pfx) = @_; + my ($wcr, $ctx, $re) = @_; my $cr = $wcr->{pi_cfg}->{-coderepos}; - my @nicks = grep(m!\A\Q$pfx\E/!, keys %$cr) or return; # 404 + my @nicks = grep(m!$re!, keys %$cr) or return; # 404 __PACKAGE__->html_init($ctx); my $zfh = $ctx->zfh; print $zfh "
matching coderepos\n";
diff --git a/lib/PublicInbox/WwwCoderepo.pm b/lib/PublicInbox/WwwCoderepo.pm
index 4ab9a77c6..61aa78620 100644
--- a/lib/PublicInbox/WwwCoderepo.pm
+++ b/lib/PublicInbox/WwwCoderepo.pm
@@ -356,8 +356,12 @@ sub srv { # endpoint called by PublicInbox::WWW
 	} elsif ($path_info =~ m!\A/(.+?)/(refs/(?:heads|tags))/\z! and
 			($ctx->{git} = $pi_cfg->get_coderepo($1))) {
 		refs_foo($self, $ctx, $2);
+	} elsif ($path_info =~ m!\A/(.*?\*.*?)/*\z!) {
+		my $re = PublicInbox::Config::glob2re($1);
+		PublicInbox::RepoList::html($self, $ctx, qr!$re\z!) // r(404);
 	} elsif ($path_info =~ m!\A/(.+?)/\z!) {
-		PublicInbox::RepoList::html($self, $ctx, $1) // r(404);
+		my $re = qr!\A\Q$1\E/!;
+		PublicInbox::RepoList::html($self, $ctx, $re) // r(404);
 	} elsif ($path_info =~ m!\A/(.+?)\z! and
 			($git = $pi_cfg->get_coderepo($1))) {
 		my $qs = $ctx->{env}->{QUERY_STRING};