@matheusbsbs / matheus-bagliano / commits / d0af3734f1
Fork 0

gitweb: Improve behavior for actionless path_info gitweb URLs

Eli Barzilay noticed that http://server/gitweb/project/<commit-sha1> link goes to 'shortlog' view, while 'commit' view would be more useful, but that 'shortlog' action is more apropriate for http://server/gitweb/project/<commit-sha1>..<other-commit-sha1> links. Therefore for the case when we don't have either action, or filename, or parent hash [base] in path_info-based URL, i.e. for http://server/gitweb/project/<object-id> link, instead of using 'shortlog' view we allow dispatch() subroutine to detect type of object and use appropriate action (in most case it would be either 'commit' action, or 'tag', or 'tree' for top directory). Requested-by: Eli Barzilay <eli@barzilay.org> Signed-off-by: Jakub Narebski <jnareb@gmail.com> Tested-by: Eli Barzilay <eli@barzilay.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jakub Narebski committed Oct 13, 2010 at 13:35 UTC d0af3734f14410e9c297aa08bf46fdb153a25ccb
1 file changed +9 -2
gitweb/gitweb.perl
+9 -2
@@ -819,8 +819,15 @@ sub evaluate_path_info {
819 # hash_base instead. It should also be noted that hand-crafted
820 # links having 'history' as an action and no pathname or hash
821 # set will fail, but that happens regardless of PATH_INFO.
822 - $input_params{'action'} ||= "shortlog";
823 - if (grep { $_ eq $input_params{'action'} } @wants_base) {
822 + if (defined $parentrefname) {
823 + # if there is parent let the default be 'shortlog' action
824 + # (for http://git.example.com/repo.git/A..B links); if there
825 + # is no parent, dispatch will detect type of object and set
826 + # action appropriately if required (if action is not set)
827 + $input_params{'action'} ||= "shortlog";
828 + }
829 + if ($input_params{'action'} &&
830 + grep { $_ eq $input_params{'action'} } @wants_base) {
831 $input_params{'hash_base'} ||= $refname;
832 } else {
833 $input_params{'hash'} ||= $refname;