static char month[][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
- struct tm *tm = gmtime(&t);
- return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday],
- tm->tm_mday, month[tm->tm_mon], 1900 + tm->tm_year,
- tm->tm_hour, tm->tm_min, tm->tm_sec);
+ struct tm tm;
+ gmtime_r(&t, &tm);
+ return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm.tm_wday],
+ tm.tm_mday, month[tm.tm_mon], 1900 + tm.tm_year,
+ tm.tm_hour, tm.tm_min, tm.tm_sec);
}
void cgit_print_error(const char *fmt, ...)
else if (!strcmp(ctx.qry.page, "summary"))
cgit_summary_link(name, title, class, ctx.qry.head);
else if (!strcmp(ctx.qry.page, "tag"))
- cgit_tag_link(name, title, class, ctx.qry.has_sha1 ?
- ctx.qry.sha1 : ctx.qry.head);
+ cgit_tag_link(name, title, class, ctx.qry.has_oid ?
+ ctx.qry.oid : ctx.qry.head);
else if (!strcmp(ctx.qry.page, "tree"))
cgit_tree_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "plain"))
cgit_plain_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "blame"))
cgit_blame_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "log"))
cgit_log_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path, ctx.qry.ofs,
ctx.qry.grep, ctx.qry.search,
ctx.qry.showmsg, ctx.qry.follow);
else if (!strcmp(ctx.qry.page, "commit"))
cgit_commit_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "patch"))
cgit_patch_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "refs"))
cgit_refs_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "snapshot"))
cgit_snapshot_link(name, title, class, ctx.qry.head,
- ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
+ ctx.qry.has_oid ? ctx.qry.oid : NULL,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "diff"))
cgit_diff_link(name, title, class, ctx.qry.head,
- ctx.qry.sha1, ctx.qry.sha2,
+ ctx.qry.oid, ctx.qry.oid2,
ctx.qry.path);
else if (!strcmp(ctx.qry.page, "stats"))
cgit_stats_link(name, title, class, ctx.qry.head,
strcmp(ctx.qry.head, ctx.repo->defbranch))
html_hidden("h", ctx.qry.head);
- if (ctx.qry.sha1)
- html_hidden("id", ctx.qry.sha1);
- if (ctx.qry.sha2)
- html_hidden("id2", ctx.qry.sha2);
+ if (ctx.qry.oid)
+ html_hidden("id", ctx.qry.oid);
+ if (ctx.qry.oid2)
+ html_hidden("id2", ctx.qry.oid2);
if (ctx.qry.showmsg)
html_hidden("showmsg", "1");
{
char *old_path = ctx.qry.path;
char *p = path, *q, *end = path + strlen(path);
+ int levels = 0;
ctx.qry.path = NULL;
cgit_self_link("root", NULL, NULL);
ctx.qry.path = p = path;
while (p < end) {
- if (!(q = strchr(p, '/')))
+ if (!(q = strchr(p, '/')) || levels > 15)
q = end;
*q = '\0';
html_txt("/");
if (q < end)
*q = '/';
p = q + 1;
+ ++levels;
}
ctx.qry.path = old_path;
}
cgit_summary_link("summary", NULL, hc("summary"),
ctx.qry.head);
cgit_refs_link("refs", NULL, hc("refs"), ctx.qry.head,
- ctx.qry.sha1, NULL);
+ ctx.qry.oid, NULL);
cgit_log_link("log", NULL, hc("log"), ctx.qry.head,
NULL, ctx.qry.vpath, 0, NULL, NULL,
ctx.qry.showmsg, ctx.qry.follow);
if (ctx.qry.page && !strcmp(ctx.qry.page, "blame"))
cgit_blame_link("blame", NULL, hc("blame"), ctx.qry.head,
- ctx.qry.sha1, ctx.qry.vpath);
+ ctx.qry.oid, ctx.qry.vpath);
else
cgit_tree_link("tree", NULL, hc("tree"), ctx.qry.head,
- ctx.qry.sha1, ctx.qry.vpath);
+ ctx.qry.oid, ctx.qry.vpath);
cgit_commit_link("commit", NULL, hc("commit"),
- ctx.qry.head, ctx.qry.sha1, ctx.qry.vpath);
+ ctx.qry.head, ctx.qry.oid, ctx.qry.vpath);
cgit_diff_link("diff", NULL, hc("diff"), ctx.qry.head,
- ctx.qry.sha1, ctx.qry.sha2, ctx.qry.vpath);
+ ctx.qry.oid, ctx.qry.oid2, ctx.qry.vpath);
if (ctx.repo->max_stats)
cgit_stats_link("stats", NULL, hc("stats"),
ctx.qry.head, ctx.qry.vpath);
void cgit_set_title_from_path(const char *path)
{
- size_t path_len, path_index, path_last_end, line_len;
- char *new_title;
+ struct strbuf sb = STRBUF_INIT;
+ const char *slash, *last_slash;
if (!path)
return;
- path_len = strlen(path);
- new_title = xmalloc(path_len + 3 + strlen(ctx.page.title) + 1);
- new_title[0] = '\0';
-
- for (path_index = path_len, path_last_end = path_len; path_index-- > 0;) {
- if (path[path_index] == '/') {
- if (path_index == path_len - 1) {
- path_last_end = path_index - 1;
- continue;
- }
- strncat(new_title, &path[path_index + 1], path_last_end - path_index - 1);
- line_len = strlen(new_title);
- new_title[line_len++] = '\\';
- new_title[line_len] = '\0';
- path_last_end = path_index;
- }
+ for (last_slash = path + strlen(path); (slash = memrchr(path, '/', last_slash - path)) != NULL; last_slash = slash) {
+ strbuf_add(&sb, slash + 1, last_slash - slash - 1);
+ strbuf_addstr(&sb, " \xc2\xab ");
}
- if (path_last_end)
- strncat(new_title, path, path_last_end);
-
- line_len = strlen(new_title);
- memcpy(&new_title[line_len], " - ", 3);
- new_title[line_len + 3] = '\0';
- strncat(new_title, ctx.page.title, sizeof(new_title) - strlen(new_title) - 1);
- ctx.page.title = new_title;
+ strbuf_add(&sb, path, last_slash - path);
+ strbuf_addf(&sb, " - %s", ctx.page.title);
+ ctx.page.title = strbuf_detach(&sb, NULL);
}