From mboxrd@z Thu Jan 1 00:00:00 1970 From: plenz at cis.fu-berlin.de (Julius Plenz) Date: Thu, 10 Mar 2011 17:03:21 +0100 Subject: [PATCH 2/5] get_commit_date() obtains newest commit date In-Reply-To: <1299773004-27380-1-git-send-email-plenz@cis.fu-berlin.de> References: <1299773004-27380-1-git-send-email-plenz@cis.fu-berlin.de> Message-ID: <1299773004-27380-2-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 --- 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