git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 05/11] gitweb: git_split_heads_body function.

From
Jakub Narebski <jnareb@gmail.com>
Date
Nov 16, 2008, 01:13 UTC
Message-ID
<200811160213.43343.jnareb@gmail.com>
In-Reply-To
<cb7bb73a0811150204v15463275sf63098b819c6d259@mail.gmail.com>
On Sat, 15 Nov 2008, Giuseppe Bilotta wrote:
Show 32 quoted lines
> On Sat, Nov 15, 2008 at 12:59 AM, Jakub Narebski <jnareb@gmail.com> wrote:
>> 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].
> 
> The initially intended purpose for this patch was to group remote
> heads by remotes, but an interesting side-effect of doing it this way
> was that it allowed to group _local_ heads too, by using the
> stuff/morestuff syntax. For example, I could group gitweb/pathinfo and
> gitweb/allheads together (although I disabled this grouping for local
> heads in the patchset).

I'm not sure if it would be that useful. How many people have _many_ stuff/morestuff branches for some values of stuff/? The convention of <initials>/<topic> of topic branches in git.git doesn't usually lead to many branches with the same <initials>/ prefix.

Show 6 quoted lines
> 
> However, as you remark, the current patch fails to achieve even its
> intended purpose, so it looks like going the 'git remote' way would be
> the right way to find at least the grouping keys: this has the benefit
> of allowing us to retrieve the remote URL as well by using 'git remote
> -v', although it has the underside of require one additional git call.
Now I thought about it a bit, I think your solution has merit. 

Splitting by remotes is hard and difficult to do right, especially if you consider than 'remote' prefix doesn't need to have anything in common with names (common prefix) of refs/remotes/* remote-tracking branches used. It is fairly easy to do it right in common case, but hard in uncommon one.

So perhaps the idea of using first dirname as a kind of category for remotes is a good idea. And usually it would be also remote name.

But it really needs explanation in commit message... and quite a bit of commit squashing.

Show 5 quoted lines
> 
> It would also probably be a good idea to separate the actual head
> grouping from the display of the grouped head lists. I wonder if Perl
> has a 'tree' data structure that could be used to store the grouped
> head lists ...
Hash of hashes (well, hash references), see perldsc(1)?
> 
> Ah yes, the code in this patch I was never actually really satisfied
> with, hopefully I can rewrite it more sensibly with the adittional
> experience I've accumulated this year.
Code... well, perhaps... commit messages also matter.
Show 17 quoted lines
> 
>>> +
>>> +     # 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...
> 
> Would you say that in this case we want 'gsoc2008/gitweb-caching' as
> the group head, or would you rather have nested groups [gsoc2008
> [gitweb-caching [branches in gsoc2008/gitweb-caching] [etc]] ? I must
> say that I think the latter would be quite interesting, but I _am_ a
> little afraid we could turn up with way too much nested groups ...

Now I think that having [gsoc2008] subgroup here might be a good thing...

-- 
Jakub Narebski
Poland
Previous: Giuseppe BilottaNext: Giuseppe Bilotta
Message 28 of 46 in “gitweb: display remote heads”
  1. 00/11 gitweb: display remote headsGiuseppe Bilotta, Nov 13, 2008
  2. 01/11 gitweb: introduce remote_heads featureGiuseppe Bilotta, Nov 13, 2008
  3. 02/11 gitweb: git_get_heads_list accepts an optional list of refs.Giuseppe Bilotta, Nov 13, 2008
  4. 03/11 gitweb: separate heads and remotes list in summary viewGiuseppe Bilotta, Nov 13, 2008
  5. 04/11 gitweb: optional custom name for refs in git_heads_bodyGiuseppe Bilotta, Nov 13, 2008
  6. 05/11 gitweb: git_split_heads_body function.Giuseppe Bilotta, Nov 13, 2008
  7. 06/11 gitweb: use CSS to style split head lists.Giuseppe Bilotta, Nov 13, 2008
  8. 07/11 gitweb: add 'remotes' actionGiuseppe Bilotta, Nov 13, 2008
  9. 08/11 gitweb: display HEAD in heads list when detachedGiuseppe Bilotta, Nov 13, 2008
  10. 09/11 gitweb: git_is_head_detached() functionGiuseppe Bilotta, Nov 13, 2008
  11. 10/11 gitweb: add HEAD to list of shortlog refs if detachedGiuseppe Bilotta, Nov 13, 2008
  12. 11/11 gitweb: CSS style and refs mark for detached HEADGiuseppe Bilotta, Nov 13, 2008
  13. Jakub NarebskiNov 16, 2008
  14. Jakub NarebskiNov 15, 2008
  15. Junio C HamanoNov 14, 2008
  16. Giuseppe BilottaNov 14, 2008
  17. Junio C HamanoNov 14, 2008
  18. Nanako ShiraishiNov 14, 2008
  19. Jakub NarebskiNov 15, 2008
  20. Jakub NarebskiNov 15, 2008
  21. Jakub NarebskiNov 15, 2008
  22. Giuseppe BilottaNov 15, 2008
  23. Jakub NarebskiNov 16, 2008
  24. Giuseppe BilottaNov 16, 2008
  25. Jakub NarebskiNov 15, 2008
  26. Jakub NarebskiNov 14, 2008
  27. Giuseppe BilottaNov 15, 2008
  28. Jakub NarebskiNov 16, 2008
  29. Giuseppe BilottaNov 16, 2008
  30. Junio C HamanoNov 15, 2008
  31. Giuseppe BilottaNov 15, 2008
  32. Jakub NarebskiNov 16, 2008
  33. Giuseppe BilottaNov 16, 2008
  34. Jakub NarebskiNov 16, 2008
  35. Giuseppe BilottaNov 16, 2008
  36. Jakub NarebskiNov 14, 2008
  37. Giuseppe BilottaNov 15, 2008
  38. Jakub NarebskiNov 14, 2008
  39. Giuseppe BilottaNov 14, 2008
  40. Jakub NarebskiNov 14, 2008
  41. Giuseppe BilottaNov 14, 2008
  42. Jakub NarebskiNov 14, 2008
  43. Giuseppe BilottaNov 14, 2008
  44. Jakub NarebskiNov 14, 2008
  45. Sverre RabbelierNov 14, 2008
  46. Giuseppe BilottaNov 14, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.