git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: git@vger.kernel.org
Subject: gitweb: Add committags support
Date: Fri, 8 Sep 2006 12:46:56 +0200	[thread overview]
Message-ID: <200609081246.56423.jnareb@gmail.com> (raw)

Below is very preliminary code (think early alpha) 
to add committags support (a la gitweb-xmms2) to gitweb.

One of the problems is having committags support 
in the subject/title line, which is hyperlink itself 
(with title and class attribute).

-- >8 --
our %committags = (
	'commitsha' => {
		'pattern' => qr/[0-9a-fA-F]{40}/,
		'sub' => sub {
			my $hash_text = shift;
			if (git_get_type($hash_text) eq "commit") {
				return
					$cgi->a({-href => href(action=>"commit", hash=>$hash_text),
					        -class => "text"}, $hash_text);
			}
			return undef;
		},
		'islink' => 1,
	},
	'mantis' => {
		'pattern' => qr/(BUG|FEATURE)\(\d+\)/,
		'options' => [ 'http://bugs.xmms2.xmms.se/view.php?id=' ],
		'sub' => sub {
			my $match = shift;
			my $URL = shift;
			my ($issue) = $match =~ /(\d+)/;
			return
				$cgi->a({-href => "$URL$issue"},
				        $match);
		},
		'islink' => 1,
	},
);

sub format_log_line_html_generic {
	my $line = shift;
	my $a_attr = shift;
	my @committags = @_;
	my %subst;

	$line = esc_html($line);
	$line =~ s/ /&nbsp;/g;
	
	for my $ctname (@committags) {
		next unless exists $committags{$ctname};
		my $wrap = ref($a_attr) eq "HASH" && %$a_attr &&
			$committags{$ctname}{'islink'};
		my @opts =
			exists $committags{$ctname}{'options'} ?
			@{$committags{$ctname}{'options'}} :
			();

		while ($line =~ m/($committags{$ctname}{'pattern'})/gc) {
			my $match = $1;
			my $repl = $committags{$ctname}{'sub'}->($match, @opts);
			next unless $repl;

			if ($wrap) {
				$repl = $cgi->end_a() . $repl . $cgi->start_a($a_attr);
			}

			$subst{quotemeta $match} = $repl;
		}
	}

	while (my ($from, $to) = each %subst) {
		$line =~ s/$from/$to/g;
	}
	return $line;
}



foreach my $line (@log) {
	print format_log_line_html_generic($line, undef, keys %committags) . "<br/>\n";
#	print format_log_line_html_generic($line, {-href=>"href", -title => "TITEL"}, keys %committags) . "<br/>\n";
}

-- 
Jakub Narebski
Poland

             reply	other threads:[~2006-09-08 10:46 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-08 10:46 Jakub Narebski [this message]
2006-09-08 20:57 ` gitweb: Add committags support Jakub Narebski

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=200609081246.56423.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=git@vger.kernel.org \
    /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).