зеркало из https://github.com/microsoft/git.git
gitweb: add project_filter to limit project list to a subdirectory
This commit changes the project listing views (project_list, project_index and opml) to limit the output to only projects in a subdirectory if the new optional parameter ?pf=directory name is used. The implementation of the filter reuses the implementation used for the 'forks' action (i.e. listing all projects within that directory from the projects list file (GITWEB_LIST) or only projects in the given subdirectory of the project root directory without a projects list file). Reusing $project instead of adding a new parameter would have been nicer from a UI point-of-view (including PATH_INFO support) but would complicate the $project validating code that is currently being used to ensure nothing is exported that should not be viewable. Signed-off-by: Bernhard R. Link <brlink@debian.org> Acked-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
348a6589e0
Коммит
19d2d23998
|
@ -760,6 +760,7 @@ our @cgi_param_mapping = (
|
||||||
search_use_regexp => "sr",
|
search_use_regexp => "sr",
|
||||||
ctag => "by_tag",
|
ctag => "by_tag",
|
||||||
diff_style => "ds",
|
diff_style => "ds",
|
||||||
|
project_filter => "pf",
|
||||||
# this must be last entry (for manipulation from JavaScript)
|
# this must be last entry (for manipulation from JavaScript)
|
||||||
javascript => "js"
|
javascript => "js"
|
||||||
);
|
);
|
||||||
|
@ -976,7 +977,7 @@ sub evaluate_path_info {
|
||||||
|
|
||||||
our ($action, $project, $file_name, $file_parent, $hash, $hash_parent, $hash_base,
|
our ($action, $project, $file_name, $file_parent, $hash, $hash_parent, $hash_base,
|
||||||
$hash_parent_base, @extra_options, $page, $searchtype, $search_use_regexp,
|
$hash_parent_base, @extra_options, $page, $searchtype, $search_use_regexp,
|
||||||
$searchtext, $search_regexp);
|
$searchtext, $search_regexp, $project_filter);
|
||||||
sub evaluate_and_validate_params {
|
sub evaluate_and_validate_params {
|
||||||
our $action = $input_params{'action'};
|
our $action = $input_params{'action'};
|
||||||
if (defined $action) {
|
if (defined $action) {
|
||||||
|
@ -994,6 +995,13 @@ sub evaluate_and_validate_params {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
our $project_filter = $input_params{'project_filter'};
|
||||||
|
if (defined $project_filter) {
|
||||||
|
if (!validate_pathname($project_filter)) {
|
||||||
|
die_error(404, "Invalid project_filter parameter");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
our $file_name = $input_params{'file_name'};
|
our $file_name = $input_params{'file_name'};
|
||||||
if (defined $file_name) {
|
if (defined $file_name) {
|
||||||
if (!validate_pathname($file_name)) {
|
if (!validate_pathname($file_name)) {
|
||||||
|
@ -3732,7 +3740,12 @@ sub run_highlighter {
|
||||||
sub get_page_title {
|
sub get_page_title {
|
||||||
my $title = to_utf8($site_name);
|
my $title = to_utf8($site_name);
|
||||||
|
|
||||||
return $title unless (defined $project);
|
unless (defined $project) {
|
||||||
|
if (defined $project_filter) {
|
||||||
|
$title .= " - " . to_utf8($project_filter);
|
||||||
|
}
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
$title .= " - " . to_utf8($project);
|
$title .= " - " . to_utf8($project);
|
||||||
|
|
||||||
return $title unless (defined $action);
|
return $title unless (defined $action);
|
||||||
|
@ -5982,7 +5995,7 @@ sub git_project_list {
|
||||||
die_error(400, "Unknown order parameter");
|
die_error(400, "Unknown order parameter");
|
||||||
}
|
}
|
||||||
|
|
||||||
my @list = git_get_projects_list();
|
my @list = git_get_projects_list($project_filter, $strict_export);
|
||||||
if (!@list) {
|
if (!@list) {
|
||||||
die_error(404, "No projects found");
|
die_error(404, "No projects found");
|
||||||
}
|
}
|
||||||
|
@ -6023,7 +6036,7 @@ sub git_forks {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub git_project_index {
|
sub git_project_index {
|
||||||
my @projects = git_get_projects_list();
|
my @projects = git_get_projects_list($project_filter, $strict_export);
|
||||||
if (!@projects) {
|
if (!@projects) {
|
||||||
die_error(404, "No projects found");
|
die_error(404, "No projects found");
|
||||||
}
|
}
|
||||||
|
@ -7862,7 +7875,7 @@ sub git_atom {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub git_opml {
|
sub git_opml {
|
||||||
my @list = git_get_projects_list();
|
my @list = git_get_projects_list($project_filter, $strict_export);
|
||||||
if (!@list) {
|
if (!@list) {
|
||||||
die_error(404, "No projects found");
|
die_error(404, "No projects found");
|
||||||
}
|
}
|
||||||
|
@ -7873,11 +7886,17 @@ sub git_opml {
|
||||||
-content_disposition => 'inline; filename="opml.xml"');
|
-content_disposition => 'inline; filename="opml.xml"');
|
||||||
|
|
||||||
my $title = esc_html($site_name);
|
my $title = esc_html($site_name);
|
||||||
|
my $filter = " within subdirectory ";
|
||||||
|
if (defined $project_filter) {
|
||||||
|
$filter .= esc_html($project_filter);
|
||||||
|
} else {
|
||||||
|
$filter = "";
|
||||||
|
}
|
||||||
print <<XML;
|
print <<XML;
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<opml version="1.0">
|
<opml version="1.0">
|
||||||
<head>
|
<head>
|
||||||
<title>$title OPML Export</title>
|
<title>$title OPML Export$filter</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<outline text="git RSS feeds">
|
<outline text="git RSS feeds">
|
||||||
|
|
Загрузка…
Ссылка в новой задаче