+/* cgit.c: cgi for the git scm
+ *
+ * Copyright (C) 2006 Lars Hjemli
+ *
+ * Licensed under GNU General Public License v2
+ * (see COPYING for full license text)
+ */
+
#include "cgit.h"
-static const char cgit_doctype[] =
+const char cgit_version[] = CGIT_VERSION;
+
+const char cgit_doctype[] =
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n"
" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
-static const char cgit_error[] =
+const char cgit_error[] =
"<div class='error'>%s</div>";
-static const char cgit_lib_error[] =
+const char cgit_lib_error[] =
"<div class='error'>%s: %s</div>";
int htmlfd = 0;
html("<title>");
html_txt(title);
html("</title>\n");
+ htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version);
html("<link rel='stylesheet' type='text/css' href='");
html_attr(cgit_css);
html("'/>\n");
static void cgit_refresh_cache(struct cacheitem *item)
{
+ cache_prepare(item);
top:
- if (!cache_lookup(item)) {
- if (cache_lock(item)) {
- cgit_fill_cache(item);
- cache_unlock(item);
- } else {
+ if (!cache_exist(item)) {
+ if (!cache_lock(item)) {
sched_yield();
goto top;
}
- } else if (cache_expired(item)) {
- if (cache_lock(item)) {
+ if (!cache_exist(item))
cgit_fill_cache(item);
- cache_unlock(item);
- }
+ cache_unlock(item);
+ } else if (cache_expired(item) && cache_lock(item)) {
+ if (cache_expired(item))
+ cgit_fill_cache(item);
+ cache_unlock(item);
}
}