diff options
author | Eric Wong <e@80x24.org> | 2024-01-16 11:52:55 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2024-01-17 09:37:55 +0000 |
commit | 65690a33c5a527d5f3fef9320899eb9f4e1d25c8 (patch) | |
tree | e3094c2915f1de6fcfed78f650b526fb326292ce | |
parent | d99942aa64d7da35847999808f99a068ad25213c (diff) | |
download | public-inbox-65690a33c5a527d5f3fef9320899eb9f4e1d25c8.tar.gz |
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.
-rw-r--r-- | lib/PublicInbox/RepoList.pm | 4 | ||||
-rw-r--r-- | lib/PublicInbox/WwwCoderepo.pm | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/PublicInbox/RepoList.pm b/lib/PublicInbox/RepoList.pm index 4b313ed6..39dc9c0b 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 "<pre>matching coderepos\n"; diff --git a/lib/PublicInbox/WwwCoderepo.pm b/lib/PublicInbox/WwwCoderepo.pm index 4ab9a77c..61aa7862 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}; |