git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Cc: git@vger.kernel.org, Petr Baudis <pasky@suse.cz>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 05/11] gitweb: git_split_heads_body function.
Date: Sat, 15 Nov 2008 00:59:14 +0100	[thread overview]
Message-ID: <200811150059.14515.jnareb@gmail.com> (raw)
In-Reply-To: <1226616555-24503-6-git-send-email-giuseppe.bilotta@gmail.com>

On Thu, 13 Nov 2008, Giuseppe Bilotta wrote:

> The purpose of this function is to split a headlist into groups
> determined by the leading part of the refname, and call git_heads_body()
> on each group.

What is the reason of this patch? Is it to split remote-tracking
branches ('remotes' references) into remotes, and group them by
the remote repository name?

If it is true, then first: you should have wrote the _reason_ behind
this patch and not only what it does in this commit message. And use
better summary (commit title / subject of this patch).

Second, this patch wouldn't do what you want from it if there are
remotes with '/' in name.  I for example use "gsoc2008/gitweb-caching"
for Lea Wiemann repository with her GSoC 2008 work on adding caching
to gitweb.  Because there are many ways to specify remotes due to
backwards compatibility (and simplicity, as some for example prefer
old 'branches/' way to specify remotes), namely config, files under
'.git/remotes', and (from Cogito) files in '.git/branches', you would
have to either reimplement/reuse parts of git-remote (there is old Perl
implementation in contrib/examples), or use "git remote" or 
"git remote -v" command output[1].


So from me there is slight NAK on this patch, in this form.

> 
> Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
> ---
>  gitweb/gitweb.perl |   33 ++++++++++++++++++++++++++++++++-
>  1 files changed, 32 insertions(+), 1 deletions(-)
> 
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index a736f2a..836b6ba 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -4271,6 +4271,37 @@ sub git_tags_body {
>  	print "</table>\n";
>  }
>  
> +sub git_split_heads_body {
> +	my ($headlist, $head, $from, $to, $extra) = @_;

It should probably be said somewhere that git_split_heads_body has to
have the same signature as git_heads_body.

> +	my %headlists;
> +	my $leader; my $list; my @list;

Style - I would use:

+	my ($leader, $list, @list);

although I wouldn't use $list and @list together...

> +
> +	# Split @$headlist into a hash of lists
> +	map {
> +		my %ref = %$_;
> +		$ref{'hname'} = $ref{'name'};
> +		if ($ref{'name'} =~ /\//) {
> +			$ref{'name'} =~ s!^([^/]+)/!!;

As I said, this would fail on for example "gsoc2008/gitweb-caching"
remote...

> +			$leader = $1;
> +		} else {
> +			$leader = "\000";

Can't you use undef or "" for $leader? $headlists{undef} works...

> +		}
> +		if (defined $headlists{$leader}) {
> +			@list = @{$headlists{$leader}}
> +		} else {
> +			@list = ()
> +		}
> +		push @list, \%ref;
> +		$headlists{$leader} = [@list];

We have similar code in href(), but we use there:

  if (defined $ref{key}) {
  	push @{$ref{$key}}, $elem;
  } else {
  	$ref{$key} = [ $elem ];
  }

Isn't it simpler and easier to understand?


> +	} @$headlist;

Why such ugly and ungainy 'map' invocation, instead of IMHO simpler
and better here foreach loop?

> +
> +	foreach $leader (sort(keys %headlists)) {
> +		print "<b>$leader</b><br/>\n" unless $leader eq "\000";
> +		$list = $headlists{$leader};
> +		git_heads_body($list, $head, $from, $to, $extra);
> +	}
> +}

Wouldn't be it simpler to loop over @$headlist, and if prefix (or to be
more exact repository shorthand aka 'remote') changes then run 
git_heads_body, adjusting $from / $to accordingly, based on current and
remembered index? I think we can assume that list is sorted by refname,
can't we? If not then perhaps the way by building hash is good idea
after all...

> +
>  sub git_heads_body {
>  	# uses global variable $project
>  	my ($headlist, $head, $from, $to, $extra) = @_;
> @@ -4541,7 +4572,7 @@ sub git_summary {
>  
>  	if (@remotelist) {
>  		git_print_header_div('remotes');
> -		git_heads_body(\@remotelist, $head, 0, 15,
> +		git_split_heads_body(\@remotelist, $head, 0, 15,
>  		               $#remotelist <= 15 ? undef :
>  		               $cgi->a({-href => href(action=>"heads")}, "..."));
>  	}

Nice.


Footnotes:
==========
[1] It is strange that there is no explicit "git remote list"
-- 
Jakub Narebski
Poland

  parent reply	other threads:[~2008-11-15  0:00 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-13 22:49 [PATCH v2 00/11] gitweb: display remote heads Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 01/11] gitweb: introduce remote_heads feature Giuseppe Bilotta
2008-11-13 22:49   ` [PATCH v2 02/11] gitweb: git_get_heads_list accepts an optional list of refs Giuseppe Bilotta
2008-11-13 22:49     ` [PATCH v2 03/11] gitweb: separate heads and remotes list in summary view Giuseppe Bilotta
2008-11-13 22:49       ` [PATCH v2 04/11] gitweb: optional custom name for refs in git_heads_body Giuseppe Bilotta
2008-11-13 22:49         ` [PATCH v2 05/11] gitweb: git_split_heads_body function Giuseppe Bilotta
2008-11-13 22:49           ` [PATCH v2 06/11] gitweb: use CSS to style split head lists Giuseppe Bilotta
2008-11-13 22:49             ` [PATCH v2 07/11] gitweb: add 'remotes' action Giuseppe Bilotta
2008-11-13 22:49               ` [PATCH v2 08/11] gitweb: display HEAD in heads list when detached Giuseppe Bilotta
2008-11-13 22:49                 ` [PATCH v2 09/11] gitweb: git_is_head_detached() function Giuseppe Bilotta
2008-11-13 23:54                   ` [PATCH v2 10/11] gitweb: add HEAD to list of shortlog refs if detached Giuseppe Bilotta
2008-11-13 23:54                     ` [PATCH v2 11/11] gitweb: CSS style and refs mark for detached HEAD Giuseppe Bilotta
2008-11-16  0:08                       ` Jakub Narebski
2008-11-15 23:59                     ` [PATCH v2 10/11] gitweb: add HEAD to list of shortlog refs if detached Jakub Narebski
2008-11-14  6:40                   ` [PATCH v2 09/11] gitweb: git_is_head_detached() function Junio C Hamano
2008-11-14  8:52                     ` Giuseppe Bilotta
2008-11-14 17:44                       ` Junio C Hamano
2008-11-14 21:17                       ` Nanako Shiraishi
2008-11-15 23:43                   ` Jakub Narebski
2008-11-15 22:31                 ` [PATCH v2 08/11] gitweb: display HEAD in heads list when detached Jakub Narebski
2008-11-15 12:16               ` [PATCH v2 07/11] gitweb: add 'remotes' action Jakub Narebski
2008-11-15 12:32                 ` Giuseppe Bilotta
2008-11-16  0:29                   ` Jakub Narebski
2008-11-16  2:47                     ` Giuseppe Bilotta
2008-11-15  0:20             ` [PATCH v2 06/11] gitweb: use CSS to style split head lists Jakub Narebski
2008-11-14 23:59           ` Jakub Narebski [this message]
2008-11-15 10:04             ` [PATCH v2 05/11] gitweb: git_split_heads_body function Giuseppe Bilotta
2008-11-16  1:13               ` Jakub Narebski
2008-11-16  2:53                 ` Giuseppe Bilotta
2008-11-15 12:14             ` Junio C Hamano
2008-11-15 12:25               ` Giuseppe Bilotta
2008-11-16 12:12                 ` Jakub Narebski
2008-11-16 12:26                   ` Giuseppe Bilotta
2008-11-16 14:21                     ` Jakub Narebski
2008-11-16 15:28                       ` Giuseppe Bilotta
2008-11-14 23:32         ` [PATCH v2 04/11] gitweb: optional custom name for refs in git_heads_body Jakub Narebski
2008-11-15 10:11           ` Giuseppe Bilotta
2008-11-14 20:04       ` [PATCH v2 03/11] gitweb: separate heads and remotes list in summary view Jakub Narebski
2008-11-14 22:01         ` Giuseppe Bilotta
2008-11-14 18:48     ` [PATCH v2 02/11] gitweb: git_get_heads_list accepts an optional list of refs Jakub Narebski
2008-11-14 21:52       ` Giuseppe Bilotta
2008-11-14 18:15   ` [PATCH v2 01/11] gitweb: introduce remote_heads feature Jakub Narebski
2008-11-14 21:44     ` Giuseppe Bilotta
2008-11-14 14:33 ` [PATCH v2 00/11] gitweb: display remote heads Jakub Narebski
2008-11-14 15:25   ` Sverre Rabbelier
2008-11-14 18:37   ` Giuseppe Bilotta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200811150059.14515.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=giuseppe.bilotta@gmail.com \
    --cc=pasky@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).