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
Junio C Hamano <junkio@cox.net>
Date
Aug 15, 2006, 00:27 UTC
Message-ID
<7vy7tqc06u.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<200608140214.20450.jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> writes:
Show 14 quoted lines
> 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.

Show 14 quoted lines
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 6be6c55..4fe3fc7 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -364,9 +364,26 @@ sub format_log_line_html {
>  # format marker of refs pointing to given object
>  sub format_ref_marker {
>  	my ($refs, $id) = @_;
> +	my $markers = '';
>  
>  	if (defined $refs->{$id}) {
> -		return ' <span class="tag">' . esc_html($refs->{$id}) . '</span>';
> +		foreach my $ref (@{$refs->{$id}}) {
> +			my ($type, $name) = qw();
Just () -- qw() is not needed.
Show 8 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;
	}
Show 11 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;
	}
Previous: Jakub NarebskiNext: Jakub Narebski
Message 13 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.