From: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
To: git@vger.kernel.org
Cc: Jakub Narebski <jnareb@gmail.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Johan Herland <johan@herland.net>,
Junio C Hamano <gitster@pobox.com>,
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Subject: [PATCH 1/4] gitweb: notes feature
Date: Thu, 4 Feb 2010 17:18:55 +0100 [thread overview]
Message-ID: <1265300338-25021-2-git-send-email-giuseppe.bilotta@gmail.com> (raw)
In-Reply-To: <1265300338-25021-1-git-send-email-giuseppe.bilotta@gmail.com>
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
next prev parent reply other threads:[~2010-02-04 16:19 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-04 16:18 [PATCH 0/4] gitweb: preliminary notes support Giuseppe Bilotta
2010-02-04 16:18 ` Giuseppe Bilotta [this message]
2010-02-04 16:33 ` [PATCH 1/4] gitweb: notes feature Junio C Hamano
2010-02-04 16:46 ` Junio C Hamano
2010-02-04 17:21 ` Jakub Narebski
2010-02-04 20:08 ` Giuseppe Bilotta
2010-02-04 21:03 ` Junio C Hamano
2010-02-04 23:38 ` Giuseppe Bilotta
2010-02-05 10:36 ` Johan Herland
2010-02-05 16:10 ` Junio C Hamano
2010-02-05 21:31 ` Giuseppe Bilotta
2010-02-05 22:31 ` Junio C Hamano
2010-02-06 8:16 ` Giuseppe Bilotta
2010-02-04 21:07 ` Junio C Hamano
2010-02-04 23:20 ` Jakub Narebski
2010-02-05 0:44 ` Jakub Narebski
2010-02-05 0:55 ` Junio C Hamano
2010-02-05 8:42 ` Giuseppe Bilotta
2010-02-05 23:44 ` Jakub Narebski
2010-02-06 9:02 ` Giuseppe Bilotta
2010-02-06 22:14 ` Jakub Narebski
2010-02-06 22:58 ` Giuseppe Bilotta
2010-02-07 1:20 ` Jakub Narebski
2010-02-07 1:38 ` Jakub Narebski
2010-02-07 1:48 ` Johan Herland
2010-02-07 11:08 ` Jakub Narebski
2010-02-07 11:14 ` Giuseppe Bilotta
2010-02-07 12:41 ` Jakub Narebski
2010-02-07 18:38 ` Junio C Hamano
2010-02-07 20:11 ` Giuseppe Bilotta
2010-02-07 21:08 ` Jakub Narebski
2010-02-07 10:57 ` Giuseppe Bilotta
2010-02-07 11:11 ` Jakub Narebski
2010-02-04 16:18 ` [PATCH 2/4] gitweb: show notes in shortlog view Giuseppe Bilotta
2010-02-06 0:18 ` Jakub Narebski
2010-02-06 9:24 ` Giuseppe Bilotta
2010-02-04 16:18 ` [PATCH 3/4] gitweb: show notes in log Giuseppe Bilotta
2010-02-06 12:57 ` Jakub Narebski
2010-02-06 13:14 ` Giuseppe Bilotta
2010-02-06 21:47 ` Jakub Narebski
2010-02-04 16:18 ` [PATCH 4/4] gitweb: show notes in commit(diff) view Giuseppe Bilotta
2010-02-06 13:16 ` Jakub Narebski
2010-02-06 14:15 ` Giuseppe Bilotta
2010-02-06 14:34 ` Jakub Narebski
2010-02-06 16:13 ` Giuseppe Bilotta
2010-02-06 21:50 ` Jakub Narebski
2010-02-06 22:17 ` Giuseppe Bilotta
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=1265300338-25021-2-git-send-email-giuseppe.bilotta@gmail.com \
--to=giuseppe.bilotta@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=johan@herland.net \
/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).