List for cgit developers and users
 help / color / mirror / Atom feed
From: plenz at cis.fu-berlin.de (Julius Plenz)
Subject: [PATCH 2/5] get_commit_date() obtains newest commit date
Date: Thu, 10 Mar 2011 17:03:21 +0100	[thread overview]
Message-ID: <1299773004-27380-2-git-send-email-plenz@cis.fu-berlin.de> (raw)
In-Reply-To: <1299773004-27380-1-git-send-email-plenz@cis.fu-berlin.de>

Previously, CGit used to stat() the branch file under $GIT_DIR/refs/heads,
which is error-prone due to the fact that

 i) the file's modification time is not always the commit time of the
    commit pointed at and
ii) the ref can be packed, in which case the upstream modification time
    would be unavailable

Signed-off-by: Julius Plenz <plenz at cis.fu-berlin.de>
---
 ui-repolist.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/ui-repolist.c b/ui-repolist.c
index 2c98668..06fe6c0 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -28,6 +28,30 @@ time_t read_agefile(char *path)
 	return result;
 }
 
+static time_t get_commit_date(const char *repo_path, const char *ref)
+{
+	time_t *t;
+	unsigned char sha[20];
+	const char *retval;
+	struct commit *commit;
+	int flags;
+
+	t = xmalloc(sizeof(time_t));
+
+	set_git_dir(repo_path);
+	setup_git_directory_gently(NULL);
+
+	retval = resolve_ref(ref, sha, 1, &flags);
+	if(!retval)
+		return (time_t)NULL;
+
+	commit = lookup_commit_reference_gently(sha, 1);
+	if(commit)
+		return (time_t) commit->date;
+
+	return (time_t)NULL;
+}
+
 static int get_repo_modtime(const struct cgit_repo *repo, time_t *mtime)
 {
 	char *path;
@@ -45,13 +69,9 @@ static int get_repo_modtime(const struct cgit_repo *repo, time_t *mtime)
 		return 1;
 	}
 
-	path = fmt("%s/refs/heads/%s", repo->path, repo->defbranch);
-	if (stat(path, &s) == 0)
-		*mtime = s.st_mtime;
-	else
-		*mtime = 0;
-
+	*mtime = get_commit_date(repo->path, fmt("refs/heads/%s", repo->defbranch));
 	r->mtime = *mtime;
+
 	return (r->mtime != 0);
 }
 
-- 
1.7.3.1





  reply	other threads:[~2011-03-10 16:03 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-10 16:03 [PATCH 1/5] guess default branch from HEAD plenz
2011-03-10 16:03 ` plenz [this message]
2011-03-10 16:03 ` [PATCH 3/5] make enable-log-linecount independent of -filecount plenz
2011-03-10 17:25   ` hjemli
2011-03-26 14:43     ` hjemli
2011-03-10 16:03 ` [PATCH 4/5] fix two encoding bugs plenz
2011-03-10 17:29   ` hjemli
2011-03-10 16:03 ` [PATCH 5/5] Add advice about scan-path in cgitrc.5.txt plenz
2011-03-10 17:33   ` hjemli
2011-03-10 17:22 ` [PATCH 1/5] guess default branch from HEAD hjemli
2011-03-16 10:53   ` plenz
2011-03-26 10:08     ` hjemli
2011-03-30 16:00       ` [PATCH v2] " plenz
2011-04-07  9:44         ` hjemli
2011-04-07 10:49           ` plenz
2011-04-07 10:59             ` [PATCH] " plenz
2011-06-10  6:42               ` jugg
2011-06-13 10:16                 ` larsh
2011-06-13 10:16                   ` hjemli
2011-06-16 14:59                     ` plenz
2011-06-20 19:25                       ` hjemli
2011-07-09  8:09                         ` jugg
2011-07-13 15:10                           ` plenz
2011-07-19  7:08                             ` larsh
2011-07-19  9:40                             ` jugg
2011-07-19  6:30                           ` larsh
2011-07-19  9:35                             ` jugg
2011-07-19  9:56                               ` larsh
2011-07-19 10:13                                 ` jugg
2011-07-21 10:34                                   ` larsh
2011-04-07 11:05             ` [PATCH v2] " hjemli
2011-06-09  4:40               ` jugg

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=1299773004-27380-2-git-send-email-plenz@cis.fu-berlin.de \
    --to=cgit@lists.zx2c4.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 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).