gitweb: Change appereance of marker of refs pointing to given object
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. This might be considered cleaner separating of git_get_references into filling %refs hash only, and not taking part in formatting ref marker. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
		 Jakub Narebski
					Jakub Narebski
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							1e0cf030c0
						
					
				
				
					commit
					d294e1cad4
				
			| @ -326,15 +326,30 @@ a.rss_logo:hover { | ||||
| 	background-color: #ee5500; | ||||
| } | ||||
|  | ||||
| span.tag { | ||||
| span.refs span { | ||||
| 	padding: 0px 4px; | ||||
| 	font-size: 10px; | ||||
| 	font-weight: normal; | ||||
| 	background-color: #ffffaa; | ||||
| 	border: 1px solid; | ||||
| 	background-color: #ffaaff; | ||||
| 	border-color: #ffccff #ff00ee #ff00ee #ffccff; | ||||
| } | ||||
|  | ||||
| span.refs span.ref { | ||||
| 	background-color: #aaaaff; | ||||
| 	border-color: #ccccff #0033cc #0033cc #ccccff; | ||||
| } | ||||
|  | ||||
| span.refs span.tag { | ||||
| 	background-color: #ffffaa; | ||||
| 	border-color: #ffffcc #ffee00 #ffee00 #ffffcc; | ||||
| } | ||||
|  | ||||
| span.refs span.head { | ||||
| 	background-color: #aaffaa; | ||||
| 	border-color: #ccffcc #00cc33 #00cc33 #ccffcc; | ||||
| } | ||||
|  | ||||
| span.atnight { | ||||
| 	color: #cc0000; | ||||
| } | ||||
|  | ||||
| @ -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(); | ||||
| 			# e.g. tags/v2.6.11 or heads/next | ||||
| 			if ($ref =~ m!^(.*?)s?/(.*)$!) { | ||||
| 				$type = $1; | ||||
| 				$name = $2; | ||||
| 			} else { | ||||
| 				$type = "ref"; | ||||
| 				$name = $ref; | ||||
| 			} | ||||
|  | ||||
| 			$markers .= " <span class=\"$type\">" . esc_html($name) . "</span>"; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if ($markers) { | ||||
| 		return ' <span class="refs">'. $markers . '</span>'; | ||||
| 	} else { | ||||
| 		return ""; | ||||
| 	} | ||||
| @ -561,18 +578,24 @@ sub git_get_project_owner { | ||||
| sub git_get_references { | ||||
| 	my $type = shift || ""; | ||||
| 	my %refs; | ||||
| 	my $fd; | ||||
| 	# 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c	refs/tags/v2.6.11 | ||||
| 	# c39ae07f393806ccf406ef966e9a15afc43cc36a	refs/tags/v2.6.11^{} | ||||
| 	open my $fd, "$projectroot/$project/info/refs" or return; | ||||
| 	if (-f "$projectroot/$project/info/refs") { | ||||
| 		open $fd, "$projectroot/$project/info/refs" | ||||
| 			or return; | ||||
| 	} else { | ||||
| 		open $fd, "-|", $GIT, "ls-remote", "." | ||||
| 			or return; | ||||
| 	} | ||||
|  | ||||
| 	while (my $line = <$fd>) { | ||||
| 		chomp $line; | ||||
| 		# attention: for $type == "" it saves only last path part of ref name | ||||
| 		# e.g. from 'refs/heads/jn/gitweb' it would leave only 'gitweb' | ||||
| 		if ($line =~ m/^([0-9a-fA-F]{40})\t.*$type\/([^\^]+)/) { | ||||
| 		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 ]; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user