threads / patch / 8060

patchgitweb: choose appropriate view for file type if a= parameter missing.

Subject: [PATCH] gitweb: choose appropriate view for file type if a= parameter missing.

## tl;dr

5 messages between May 9, 2007 and May 13, 2007. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Gerrit Pape· May 9, 2007, 22:19 UTC · lore
See http://bugs.debian.org/410465

gitweb URLs use the a= parameter for the view to use on the given path, such as "blob" or "tree". Currently, if a gitweb URL omits the a= parameter, gitweb just shows the top-level repository summary, regardless of the path given. gitweb could instead choose an appropriate view based on the file type: blob for blobs (files), tree for trees (directories), and summary if no path given (the URL included no f= parameter, or an empty f= parameter).

Apart from making gitweb more robust and supporting URL editing more easily, this change would aid the creation of shortcuts to git repositories using simple substitution, such as: http://example.org/git/?p=path/to/repo.git;hb=HEAD;f=%s

- Josh Triplett
Signed-off-by: Gerrit Pape <pape@smarden.org>
---
 gitweb/gitweb.perl |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
Show changes to gitweb/gitweb.perl +10 −4
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 90243fd..21864c6 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -458,10 +458,16 @@ my %actions = (
 	"project_index" => \&git_project_index,
 );
 
-if (defined $project) {
-	$action ||= 'summary';
-} else {
-	$action ||= 'project_list';
+if (!defined $action) {
+	if (defined $hash) {
+		$action = git_get_type($hash);
+	} elsif (defined $hash_base && defined $file_name) {
+		$action = git_get_type("$hash_base:$file_name");
+	} elsif (defined $project) {
+		$action = 'summary';
+	} else {
+		$action = 'project_list';
+	}
 }
 if (!defined($actions{$action})) {
 	die_error(undef, "Unknown action");
-- 
1.5.1.3
Junio C Hamano· May 10, 2007, 02:04 UTC · re: Gerrit Pape · lore

Re: [PATCH] gitweb: choose appropriate view for file type if a= parameter missing.

Gerrit Pape <pape@smarden.org> writes:
Show 17 quoted lines
> See http://bugs.debian.org/410465
>
> gitweb URLs use the a= parameter for the view to use on the given path, such
> as "blob" or "tree".  Currently, if a gitweb URL omits the a= parameter,
> gitweb just shows the top-level repository summary, regardless of the path
> given.  gitweb could instead choose an appropriate view based on the file
> type: blob for blobs (files), tree for trees (directories), and summary if no
> path given (the URL included no f= parameter, or an empty f= parameter).
>
> Apart from making gitweb more robust and supporting URL editing more easily,
> this change would aid the creation of shortcuts to git repositories using
> simple substitution, such as:
> http://example.org/git/?p=path/to/repo.git;hb=HEAD;f=%s
>
> - Josh Triplett
>
> Signed-off-by: Gerrit Pape <pape@smarden.org>

I am not sure if this is a "good" feature or just "because we can" feature, but I am slightly in favor. I do not know about others.

I'd however request a few changes to the proposed commit log message:

 * "See http://..." is not the primary information, but "see
   ... for further details"; please have it at the end, not at
   the beginning.
 * Was the patch authored by you, or Josh?  If the former,
   what's his name doing here?  Perhaps you wanted to say
   "Reported by Josh Triplett"?
Gerrit Pape· May 10, 2007, 07:32 UTC · re: Junio C Hamano · lore

[PATCH] gitweb: choose appropriate view for file type if a= parameter missing

gitweb URLs use the a= parameter for the view to use on the given path, such as "blob" or "tree". Currently, if a gitweb URL omits the a= parameter, gitweb just shows the top-level repository summary, regardless of the path given. gitweb could instead choose an appropriate view based on the file type: blob for blobs (files), tree for trees (directories), and summary if no path given (the URL included no f= parameter, or an empty f= parameter).

Apart from making gitweb more robust and supporting URL editing more easily, this change would aid the creation of shortcuts to git repositories using simple substitution, such as: http://example.org/git/?p=path/to/repo.git;hb=HEAD;f=%s

With this patch, if given the hash through the h= parameter, or the hash base (hb=) and a filename (f=), gitweb uses cat-file -t to automatically set the a= parameter.

This feature was requested by Josh Triplett through
 http://bugs.debian.org/410465
Signed-off-by: Gerrit Pape <pape@smarden.org>
---
On Wed, May 09, 2007 at 07:04:01PM -0700, Junio C Hamano wrote:
Show 6 quoted lines
> I'd however request a few changes to the proposed commit log
> message:
>
>  * "See http://..." is not the primary information, but "see
>    ... for further details"; please have it at the end, not at
>    the beginning.
Okay.
>  * Was the patch authored by you, or Josh?  If the former,
>    what's his name doing here?  Perhaps you wanted to say
>    "Reported by Josh Triplett"?

Sometimes I'm lazy, it was just a copy&paste from the Debian bug report submitted by Josh.

Regards, Gerrit.
 gitweb/gitweb.perl |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
Show changes to gitweb/gitweb.perl +10 −4
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 90243fd..21864c6 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -458,10 +458,16 @@ my %actions = (
 	"project_index" => \&git_project_index,
 );
 
-if (defined $project) {
-	$action ||= 'summary';
-} else {
-	$action ||= 'project_list';
+if (!defined $action) {
+	if (defined $hash) {
+		$action = git_get_type($hash);
+	} elsif (defined $hash_base && defined $file_name) {
+		$action = git_get_type("$hash_base:$file_name");
+	} elsif (defined $project) {
+		$action = 'summary';
+	} else {
+		$action = 'project_list';
+	}
 }
 if (!defined($actions{$action})) {
 	die_error(undef, "Unknown action");
-- 
1.5.1.3
Jakub Narebski· May 13, 2007, 00:32 UTC · re: Gerrit Pape · lore

Re: [PATCH] gitweb: choose appropriate view for file type if a= parameter missing

<opublikowany i wysłany>
[Cc: Gerrit Pape <pape@smarden.org>, Junio C Hamano <junkio@cox.net>,
 git@vger.kernel.org]
Gerrit Pape wrote:
Show 7 quoted lines
> this change would aid the creation of shortcuts to git repositories using
> simple substitution, such as:
> http://example.org/git/?p=path/to/repo.git;hb=HEAD;f=%s
> 
> With this patch, if given the hash through the h= parameter, or the hash
> base (hb=) and a filename (f=), gitweb uses cat-file -t to automatically set
> the a= parameter.
Show 14 quoted lines
> -if (defined $project) {
> -     $action ||= 'summary';
> -} else {
> -     $action ||= 'project_list';
> +if (!defined $action) {
> +     if (defined $hash) {
> +             $action = git_get_type($hash);
> +     } elsif (defined $hash_base && defined $file_name) {
> +             $action = git_get_type("$hash_base:$file_name");
> +     } elsif (defined $project) {
> +             $action = 'summary';
> +     } else {
> +             $action = 'project_list';
> +     }
NOTE:

We have something similar for the only committag we support, namely the shortened sha1 of object, which leads to an "object", which chooses appropriate view using git_get_type / git-cat-file -t.

But contrary to the above solution it does it by creating a _redirect_ to a proper view, instead of silently selecting proper view like in a patch above. Creating a redirect allows price for invoking git-cat-file -t to be paid only once. User would bookmark correct view.

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git

← back to recent threads