[PATCH 1/4] gitweb: notes feature

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Giuseppe Bilotta
Date: Thursday, February 4, 2010 - 9:18 am

Introduce support for notes by collecting them when creating commit
lists. The list of noterefs to look into is configurable, and can be a(n
array of) refspec(s), which will be looked for in the refs/notes
namespace.

The feature is disabled by default because it's presently not very
efficient (one extra git call per configured refspec, plus two extra git
calls per commit per noteref).
---
 gitweb/gitweb.perl |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index d0c3ff2..9ba5815 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -411,6 +411,22 @@ our %feature = (
 		'override' => 0,
 		'default' => [16]},
 
+	# Notes support. When this feature is enabled, the presence of notes
+	# for any commit is signaled, and the note content is made available
+	# in a way appropriate for the current view.
+	# Set this to '*' to enable all notes namespace, or to a shell-glob
+	# specification to enable specific namespaces only.
+
+	# To enable system wide have in $GITWEB_CONFIG
+	# $feature{'notes'}{'default'} = ['*'];
+	# To have project specific config enable override in $GITWEB_CONFIG
+	# $feature{'notes'}{'override'} = 1;
+	# and in project config gitweb.notes = namespace;
+	'notes' => {
+		'sub' => \&feature_notes,
+		'override' => 0,
+		'default' => []},
+
 	# Avatar support. When this feature is enabled, views such as
 	# shortlog or commit will display an avatar associated with
 	# the email of the committer(s) and/or author(s).
@@ -513,6 +529,16 @@ sub feature_patches {
 	return ($_[0]);
 }
 
+sub feature_notes {
+	my @val = (git_get_project_config('notes'));
+
+	if (@val) {
+		return @val;
+	}
+
+	return @_;
+}
+
 sub feature_avatar {
 	my @val = (git_get_project_config('avatar'));
 
@@ -2786,10 +2812,30 @@ sub parse_commit {
 	return %co;
 }
 
+# return all refs matching refs/notes/<globspecs> where the globspecs
+# are taken from the notes feature content.
+sub get_note_refs {
+	my @globs = gitweb_get_feature('notes');
+	my @note_refs = ();
+	foreach my $glob (@globs) {
+		if (open my $fd, '-|', git_cmd(), 'for-each-ref',
+		    '--format=%(refname)', "refs/notes/$glob") {
+			while (<$fd>) {
+				chomp;
+				push @note_refs, $_ if $_;
+			}
+			close $fd;
+		}
+	}
+	return @note_refs;
+}
+
 sub parse_commits {
 	my ($commit_id, $maxcount, $skip, $filename, @args) = @_;
 	my @cos;
 
+	my @note_refs = get_note_refs();
+
 	$maxcount ||= 1;
 	$skip ||= 0;
 
@@ -2807,6 +2853,22 @@ sub parse_commits {
 		or die_error(500, "Open git-rev-list failed");
 	while (my $line = <$fd>) {
 		my %co = parse_commit_text($line);
+		my %notes = () ;
+		foreach my $note_ref (@note_refs) {
+			my $obj = "$note_ref:$co{'id'}";
+			if (open my $fd, '-|', git_cmd(), 'rev-parse',
+				'--verify', '-q', $obj) {
+				my $exists = <$fd>;
+				close $fd;
+				if (defined $exists) {
+					if (open $fd, '-|', git_cmd(), 'show', $obj) {
+						$notes{$note_ref} = scalar <$fd>;
+						close $fd;
+					}
+				}
+			}
+		}
+		$co{'notes'} = \%notes;
 		push @cos, \%co;
 	}
 	close $fd;
-- 
1.7.0.rc1.193.ge8618

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/4] gitweb: preliminary notes support, Giuseppe Bilotta, (Thu Feb 4, 9:18 am)
[PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Thu Feb 4, 9:18 am)
[PATCH 2/4] gitweb: show notes in shortlog view, Giuseppe Bilotta, (Thu Feb 4, 9:18 am)
[PATCH 3/4] gitweb: show notes in log, Giuseppe Bilotta, (Thu Feb 4, 9:18 am)
[PATCH 4/4] gitweb: show notes in commit(diff) view, Giuseppe Bilotta, (Thu Feb 4, 9:18 am)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Thu Feb 4, 9:33 am)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Thu Feb 4, 9:46 am)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Thu Feb 4, 10:21 am)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Thu Feb 4, 1:08 pm)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Thu Feb 4, 2:03 pm)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Thu Feb 4, 2:07 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Thu Feb 4, 4:20 pm)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Thu Feb 4, 4:38 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Thu Feb 4, 5:44 pm)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Thu Feb 4, 5:55 pm)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Fri Feb 5, 1:42 am)
Re: [PATCH 1/4] gitweb: notes feature, Johan Herland, (Fri Feb 5, 3:36 am)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Fri Feb 5, 9:10 am)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Fri Feb 5, 2:31 pm)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Fri Feb 5, 3:31 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Fri Feb 5, 4:44 pm)
Re: [PATCH 2/4] gitweb: show notes in shortlog view, Jakub Narebski, (Fri Feb 5, 5:18 pm)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sat Feb 6, 1:16 am)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sat Feb 6, 2:02 am)
Re: [PATCH 2/4] gitweb: show notes in shortlog view, Giuseppe Bilotta, (Sat Feb 6, 2:24 am)
Re: [PATCH 3/4] gitweb: show notes in log, Jakub Narebski, (Sat Feb 6, 5:57 am)
Re: [PATCH 3/4] gitweb: show notes in log, Giuseppe Bilotta, (Sat Feb 6, 6:14 am)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Jakub Narebski, (Sat Feb 6, 6:16 am)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Giuseppe Bilotta, (Sat Feb 6, 7:15 am)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Jakub Narebski, (Sat Feb 6, 7:34 am)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Giuseppe Bilotta, (Sat Feb 6, 9:13 am)
Re: [PATCH 3/4] gitweb: show notes in log, Jakub Narebski, (Sat Feb 6, 2:47 pm)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Jakub Narebski, (Sat Feb 6, 2:50 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sat Feb 6, 3:14 pm)
Re: [PATCH 4/4] gitweb: show notes in commit(diff) view, Giuseppe Bilotta, (Sat Feb 6, 3:17 pm)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sat Feb 6, 3:58 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sat Feb 6, 6:20 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sat Feb 6, 6:38 pm)
Re: [PATCH 1/4] gitweb: notes feature, Johan Herland, (Sat Feb 6, 6:48 pm)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sun Feb 7, 3:57 am)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sun Feb 7, 4:08 am)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sun Feb 7, 4:11 am)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sun Feb 7, 4:14 am)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sun Feb 7, 5:41 am)
Re: [PATCH 1/4] gitweb: notes feature, Junio C Hamano, (Sun Feb 7, 11:38 am)
Re: [PATCH 1/4] gitweb: notes feature, Giuseppe Bilotta, (Sun Feb 7, 1:11 pm)
Re: [PATCH 1/4] gitweb: notes feature, Jakub Narebski, (Sun Feb 7, 2:08 pm)