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

Re: [PATCH 6/9] gitweb: Change appereance of marker of refs pointing to given object

From
Jakub Narebski <jnareb@gmail.com>
Date
Aug 15, 2006, 16:34 UTC
Message-ID
<ebst0v$3gt$1@sea.gmane.org>
In-Reply-To
<7vy7tqc06u.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
Show 19 quoted lines
> Jakub Narebski <jnareb@gmail.com> writes:
> 
>> Change git_get_references to include type of ref in the %refs value, which
>> means putting everything after 'refs/' as a ref name, not only last
>> part of the name.  Instead of separating refs pointing to the same
>> object by " / " separator, use anonymous array reference to store all
>> refs pointing to given object.
>>
>> Use 'git-ls-remote .' if $projectroot/$project/info/refs does not
>> exist.  (Perhaps it should be used always.)
>>
>> Refs are now in separate span elements.  Class is dependent on the ref
>> type: currently known classes are 'tag', 'head', 'remote', and 'ref'
>> (last one for HEAD and other refs in the main directory).  There is
>> encompassing span element of class refs, just in case of unknown ref
>> type.
> 
> I do not see definition that matches "span.refs span.remote" in
> the CSS, though.
It get's default style "span.refs span" (and fefault colors).
Show 20 quoted lines
>> +                    # e.g. tags/v2.6.11 or heads/next
>> +                    if ($ref =~ m!^(.*?)s?/(.*)$!) {
>> +                            $type = $1;
>> +                            $name = $2;
>> +                    } else {
>> +                            $type = "ref";
>> +                            $name = $ref;
>> +                    }
> 
> Hmph.  Maybe have a hash that defines the ones you know how to
> handle, and do something like:
> 
>         if ($ref =~ m|^([^/]+)/(.*)$| &&  exists $i_know_this_class{$1}) {
>               $type = $1;
>               $name = $2;
>       }
>         else {
>               $type = 'ref';
>               $name = $ref;
>       }

But what types are known is defined in CSS, not in gitweb.perl. The rule is that type is defined by first component of the ref name, in singular form (so with optional final s removed, refs -> ref, tags -> tag, remotes -> remote). All unknown types get default "span.refs span" format, thanks to encompassing span element.

"ref" class is for refs directly in $GIT_DIR, like HEAD or ORIG_HEAD (as of now you cannot get such a ref due to the regexp used in git_get_references, and the fact that you have no such refs in $GIT_DIR/info/refs file, and 'git-ls-remote .' gives only HEAD; but we could add them 'by hand').

Show 20 quoted lines
>> @@ -561,18 +578,24 @@ sub git_get_project_owner {
>>...
>> +            if ($line =~ m/^([0-9a-fA-F]{40})\trefs\/($type\/?[^\^]+)/) {
>>                      if (defined $refs{$1}) {
>> -                            $refs{$1} .= " / $2";
>> +                            push @{$refs{$1}}, $2;
>>                      } else {
>> -                            $refs{$1} = $2;
>> +                            $refs{$1} = [ $2 ];
>>                      }
>>              }
> 
> It would work as in your patch, but I would have preferred to
> see "exists $refs{$1}" there instead of "defined".
> 
> Or lose the if() and do it like this, which would be cleaner?
> 
>       if ($line =~ ...) {
>               push @{$refs{$1}}, $2;
>       }
That's even better.
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
Previous: Junio C HamanoNext: Jakub Narebski
Message 14 of 23 in “gitweb: Great subroutine renaming + task separation into subroutines + improvements”
  1. 0/9 gitweb: Great subroutine renaming + task separation into subroutines + improvementsJakub Narebski, Aug 14, 2006
  2. 1/9 gitweb: Great subroutines renamingJakub Narebski, Aug 14, 2006
  3. Junio C HamanoAug 14, 2006
  4. 2/9 gitweb: Separate ref parsing in git_get_refs_list into parse_refJakub Narebski, Aug 14, 2006
  5. Junio C HamanoAug 15, 2006
  6. Jakub NarebskiAug 15, 2006
  7. 3/9 gitweb: Refactor printing shortened title in git_shortlog_body and git_tags_bodyJakub Narebski, Aug 14, 2006
  8. Junio C HamanoAug 15, 2006
  9. 4/9 gitweb: Separate main part of git_history into git_history_bodyJakub Narebski, Aug 14, 2006
  10. 5/9 gitweb: Separate finding project owner into git_get_project_ownerJakub Narebski, Aug 14, 2006
  11. 6/9 gitweb: Change appereance of marker of refs pointing to given objectJakub Narebski, Aug 14, 2006
  12. Jakub NarebskiAug 14, 2006
  13. Junio C HamanoAug 15, 2006
  14. Jakub NarebskiAug 15, 2006
  15. 7/9 gitweb: Skip comments in mime.types like fileJakub Narebski, Aug 14, 2006
  16. 8/9 gitweb: True fix: Support for the standard mime.types map in gitwebJakub Narebski, Aug 14, 2006
  17. Junio C HamanoAug 15, 2006
  18. Jakub NarebskiAug 15, 2006
  19. 9/9 gitweb: Separate printing difftree in git_commit into git_difftree_bodyJakub Narebski, Aug 14, 2006
  20. Junio C HamanoAug 15, 2006
  21. Jakub NarebskiAug 15, 2006
  22. Jakub NarebskiAug 14, 2006
  23. Junio C HamanoAug 15, 2006

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.