Do a scan for 'last' information only when necessary
authorChristian Thaeter <ct@pipapo.org>
Tue, 15 Jan 2008 07:38:37 +0000 (08:38 +0100)
committerChristian Thaeter <ct@pipapo.org>
Tue, 15 Jan 2008 07:38:37 +0000 (08:38 +0100)
all 'lasts' information is NULL default initialized and one has to call
webgit_repoinfo_find_last() on a per repository base only when needed

src/actions.c
src/repo.c
src/repo.h

index f60b444..e76e791 100644 (file)
@@ -66,6 +66,9 @@ webgit_main_content_action (struct webgit_query* query)
   LLIST_FOREACH (&query->repos, node)
     {
       struct webgit_repo_info* n = (struct webgit_repo_info*)node;
+
+      webgit_repoinfo_find_last (n);
+
       html_list_append (table, html (
                                      html_tag ("tr"),
                                      html(html_tag ("td"), webgit_summary_link (query, n, html (n->name))),
index 8f0c559..4f19638 100644 (file)
@@ -259,7 +259,7 @@ webgit_repoinfo_new (struct webgit_query* query, const char* path)
   /* set description if not already set by gitconfig */
   if (!self->description)
     {
-      FILE* desc = fopen (".git/description", "r");
+      FILE* desc = fopen (".git/description", "r"); /* FIXME: $GIT_DIR/description*/
       if (desc)
         {
           fgets (buf, 512, desc);
@@ -284,7 +284,29 @@ webgit_repoinfo_new (struct webgit_query* query, const char* path)
         }
     }
 
-  /* find 'last' information */
+
+  self->last_commit = NULL;
+  self->last_tree = NULL;
+  self->last_head = NULL;
+  self->last_committer_name = NULL;
+  self->last_committer_email = NULL;
+  self->last_author_name = NULL;
+  self->last_author_email = NULL;
+  self->age = ~0;
+
+  return self;
+}
+
+
+void
+webgit_repoinfo_find_last (struct webgit_repo_info* self)
+{
+  if (self->age != ~0)
+    return;
+
+  chdir (self->path);
+  setup_git_directory ();
+
   struct webgit_repo_info ri;
   ri.last_commit = NULL;
   ri.last_tree = NULL;
@@ -293,7 +315,7 @@ webgit_repoinfo_new (struct webgit_query* query, const char* path)
   ri.last_committer_email = NULL;
   ri.last_author_name = NULL;
   ri.last_author_email = NULL;
-  ri.query = query;
+  ri.query = self->query;
   ri.age = ~0;
   for_each_branch_ref (find_last, &ri);
 
@@ -309,8 +331,6 @@ webgit_repoinfo_new (struct webgit_query* query, const char* path)
   self->last_author_email = ri.last_author_email ?
     ri.last_author_email : cwa_strndup("NO_AUTHOR_EMAIL", SIZE_MAX);
   self->age = ri.age;
-
-  return self;
 }
 
 void
index 3846525..b781049 100644 (file)
@@ -60,4 +60,7 @@ webgit_repoinfo_new (struct webgit_query* query, const char* path);
 void
 webgit_repoinfo_free (struct webgit_repo_info* self);
 
+void
+webgit_repoinfo_find_last (struct webgit_repo_info* self);
+
 #endif