All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Fitzsimons <robfitz@273k.net>
To: Git Mailing List <git@vger.kernel.org>
Cc: Jakub Narebski <jnareb@gmail.com>,
	Martin Langhoff <martin.langhoff@gmail.com>
Subject: [PATCH] gitweb: New feature last_modified_ref.
Date: Fri, 29 Dec 2006 18:58:05 +0000	[thread overview]
Message-ID: <20061229185805.GF6558@localhost> (raw)

Added a new feature which allows the gitweb administrator to set a
symbolic ref name that will be used to work out the Last Change value
for the project_list action.  This was suggested by Jakub Narebski in
<200612291140.46909.jnareb@gmail.com>.

Signed-off-by: Robert Fitzsimons <robfitz@273k.net>
---
 gitweb/gitweb.perl |   52 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index d845e91..9fb5208 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -185,6 +185,21 @@ our %feature = (
 	'forks' => {
 		'override' => 0,
 		'default' => [0]},
+
+	# Set a symbolic ref name that will be used to working out the Last
+	# Change value for the project_list action.  If the ref name does not
+	# exist for a project or the ref name is undefined, the code will fall
+	# back on doing a 'for-each-ref refs/heads'.
+	#
+	# To enable system wide have in $GITWEB_CONFIG
+	# $feature{'last_activity_ref'}{'default'} = ['HEAD'];
+	# or
+	# $feature{'last_activity_ref'}{'default'} = ['refs/heads/master'];
+	# etc.
+	# Project specific override is not supported.
+	'last_activity_ref' => {
+		'override' => 0,
+		'default' => [undef]},
 );
 
 sub gitweb_check_feature {
@@ -1147,17 +1162,35 @@ sub git_get_project_owner {
 }
 
 sub git_get_last_activity {
-	my ($path) = @_;
+	my ($path, $ref) = @_;
 	my $fd;
+	my $most_recent = undef;
 
 	$git_dir = "$projectroot/$path";
-	open($fd, "-|", git_cmd(), 'for-each-ref',
-	     '--format=%(committer)',
-	     '--sort=-committerdate',
-	     '--count=1',
-	     'refs/heads') or return;
-	my $most_recent = <$fd>;
-	close $fd or return;
+
+	if (defined $ref) {
+		open($fd, "-|", git_cmd(), "cat-file",
+		     "commit",
+		     $ref) or return;
+		while (my $line = <$fd>) {
+			last if $line eq "\n";
+			if ($line =~ m/^committer /) {
+				$most_recent = $line;
+				last;
+			}
+		}
+		close $fd;
+	}
+	if (!defined $most_recent) {
+		open($fd, "-|", git_cmd(), 'for-each-ref',
+		     '--format=%(committer)',
+		     '--sort=-committerdate',
+		     '--count=1',
+		     'refs/heads') or return;
+		$most_recent = <$fd>;
+		close $fd or return;
+	}
+
 	if ($most_recent =~ / (\d+) [-+][01]\d\d\d$/) {
 		my $timestamp = $1;
 		my $age = time - $timestamp;
@@ -2561,10 +2594,11 @@ sub git_project_list_body {
 	my ($projlist, $order, $from, $to, $extra, $no_header) = @_;
 
 	my ($check_forks) = gitweb_check_feature('forks');
+	my ($last_activity_ref) = gitweb_check_feature('last_activity_ref');
 
 	my @projects;
 	foreach my $pr (@$projlist) {
-		my (@aa) = git_get_last_activity($pr->{'path'});
+		my (@aa) = git_get_last_activity($pr->{'path'}, $last_activity_ref);
 		unless (@aa) {
 			next;
 		}
-- 
1.5.0.rc0.g5b5f

             reply	other threads:[~2006-12-29 18:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-29 18:58 Robert Fitzsimons [this message]
2006-12-29 19:12 ` [PATCH] gitweb: New feature last_modified_ref Junio C Hamano
2006-12-30  0:12   ` Robert Fitzsimons

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=20061229185805.GF6558@localhost \
    --to=robfitz@273k.net \
    --cc=git@vger.kernel.org \
    --cc=jnareb@gmail.com \
    --cc=martin.langhoff@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.