Previously gitweb would ignore partial PATH_INFO. For example,
it would produce a project list for the top URL
https://www.example.org/projects/
and a project summary for
https://www.example.org/projects/git/git.git
but if you tried to list just the git-related projects with
https://www.example.org/projects/git/
you would get a list of all projects, same as the top URL.
As well as fixing that omission, this change also makes gitweb
generate PATH_INFO-style URLs for project filter links, such
as in the breadcrumbs.
Signed-off-by: Tony Finch <[email protected]>
---
gitweb/gitweb.perl | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 7a5b23a..073f324 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -895,7 +895,17 @@ sub evaluate_path_info {
while ($project && !check_head_link("$projectroot/$project")) {
$project =~ s,/*[^/]*$,,;
}
- return unless $project;
+ # If there is no project, use the PATH_INFO as a project filter if it
+ # is a directory in the projectroot. (It can't be a subdirectory of a
+ # repo because we just verified that isn't the case.)
+ unless ($project) {
+ if (-d "$projectroot/$path_info") {
+ $path_info =~ s,/+$,,;
+ $input_params{'project_filter'} = $path_info;
+ $path_info = "";
+ }
+ return;
+ }
$input_params{'project'} = $project;
# do not change any parameters if an action is given using the query
string
@@ -1360,6 +1370,18 @@ sub href {
}
my $use_pathinfo = gitweb_check_feature('pathinfo');
+
+ # we have to check for a project_filter first because handling the full
+ # project-plus-parameters deletes some of the paramaters we check here
+ if (!defined $params{'project'} && $params{'project_filter'} &&
+ $params{'action'} eq "project_list" &&
+ (exists $params{-path_info} ? $params{-path_info} : $use_pathinfo))
{
+ $href =~ s,/$,,;
+ $href .= "/".esc_path_info($params{'project_filter'})."/";
+ delete $params{'project_filter'};
+ delete $params{'action'};
+ }
+
if (defined $params{'project'} &&
(exists $params{-path_info} ? $params{-path_info} : $use_pathinfo))
{
# try to put as many parameters as possible in PATH_INFO:
--
2.2.1.68.g56d9796
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html