From d14d77fe95c3b6224b40df9b101dded0deea913c Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sat, 16 Feb 2008 11:53:40 +0100 Subject: Introduce struct cgit_context This struct will hold all the cgit runtime information currently found in a multitude of global variables. The first cleanup removes all querystring-related variables. Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- ui-refs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ui-refs.c') diff --git a/ui-refs.c b/ui-refs.c index 295f5ba..ba513c1 100644 --- a/ui-refs.c +++ b/ui-refs.c @@ -16,9 +16,9 @@ void cgit_print_refs() html("<table class='list nowrap'>"); - if (cgit_query_path && !strncmp(cgit_query_path, "heads", 5)) + if (ctx.qry.path && !strncmp(ctx.qry.path, "heads", 5)) cgit_print_branches(0); - else if (cgit_query_path && !strncmp(cgit_query_path, "tags", 4)) + else if (ctx.qry.path && !strncmp(ctx.qry.path, "tags", 4)) cgit_print_tags(0); else { cgit_print_branches(0); -- cgit v1.2.3-54-g00ecf From b1f9b9c1459cb9a30ebf80721aff6ef788d1f891 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sat, 23 Feb 2008 22:45:33 +0100 Subject: Introduce html.h All html-functions can be quite easily separated from the rest of cgit, so lets do it; the only issue was html_filemode which uses some git-defined macros so the function is moved into ui-shared.c::cgit_print_filemode(). Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- cgit.c | 1 - cgit.h | 15 +-------------- html.c | 31 ++++++++++++------------------- html.h | 18 ++++++++++++++++++ shared.c | 2 -- ui-blob.c | 9 +++++++++ ui-commit.c | 7 ++++--- ui-diff.c | 2 +- ui-log.c | 1 + ui-patch.c | 1 + ui-refs.c | 4 +--- ui-repolist.c | 3 ++- ui-shared.c | 16 ++++++++++++++++ ui-snapshot.c | 1 + ui-summary.c | 1 + ui-tag.c | 2 +- ui-tree.c | 3 ++- 17 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 html.h (limited to 'ui-refs.c') diff --git a/cgit.c b/cgit.c index 2c933dc..e6b4526 100644 --- a/cgit.c +++ b/cgit.c @@ -291,7 +291,6 @@ int main(int argc, const char **argv) const char *cgit_config_env = getenv("CGIT_CONFIG"); cgit_prepare_context(&ctx); - htmlfd = STDOUT_FILENO; item.st.st_mtime = time(NULL); cgit_repolist.length = 0; cgit_repolist.count = 0; diff --git a/cgit.h b/cgit.h index 598d8c3..5b7ee1c 100644 --- a/cgit.h +++ b/cgit.h @@ -186,8 +186,6 @@ extern struct cgit_repolist cgit_repolist; extern struct cgit_context ctx; extern int cgit_cmd; -extern int htmlfd; - extern void cgit_prepare_context(struct cgit_context *ctx); extern int cgit_get_cmd_index(const char *cmd); extern struct cgit_repo *cgit_get_repoinfo(const char *url); @@ -222,18 +220,6 @@ extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); extern char *fmt(const char *format,...); -extern void html(const char *txt); -extern void htmlf(const char *format,...); -extern void html_txt(char *txt); -extern void html_ntxt(int len, char *txt); -extern void html_attr(char *txt); -extern void html_hidden(char *name, char *value); -extern void html_option(char *value, char *text, char *selected_value); -extern void html_link_open(char *url, char *title, char *class); -extern void html_link_close(void); -extern void html_filemode(unsigned short mode); -extern int html_include(const char *filename); - extern int cgit_read_config(const char *filename, configfn fn); extern int cgit_parse_query(char *txt, configfn fn); extern struct commitinfo *cgit_parse_commit(struct commit *commit); @@ -280,6 +266,7 @@ extern void cgit_print_pageheader(char *title, int show_search); extern void cgit_print_snapshot_start(const char *mimetype, const char *filename, struct cacheitem *item); +extern void cgit_print_filemode(unsigned short mode); extern void cgit_print_branches(int maxcount); extern void cgit_print_tags(int maxcount); diff --git a/html.c b/html.c index eb163d9..0962e71 100644 --- a/html.c +++ b/html.c @@ -6,7 +6,13 @@ * (see COPYING for full license text) */ -#include "cgit.h" +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> + +int htmlfd = STDOUT_FILENO; char *fmt(const char *format, ...) { @@ -21,8 +27,10 @@ char *fmt(const char *format, ...) va_start(args, format); len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); va_end(args); - if (len>sizeof(buf[bufidx])) - die("[html.c] string truncated: %s", format); + if (len>sizeof(buf[bufidx])) { + fprintf(stderr, "[html.c] string truncated: %s\n", format); + exit(1); + } return buf[bufidx]; } @@ -160,25 +168,10 @@ void html_link_close(void) void html_fileperm(unsigned short mode) { - htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), + htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); } -void html_filemode(unsigned short mode) -{ - if (S_ISDIR(mode)) - html("d"); - else if (S_ISLNK(mode)) - html("l"); - else if (S_ISGITLINK(mode)) - html("m"); - else - html("-"); - html_fileperm(mode >> 6); - html_fileperm(mode >> 3); - html_fileperm(mode); -} - int html_include(const char *filename) { FILE *f; diff --git a/html.h b/html.h new file mode 100644 index 0000000..63f4551 --- /dev/null +++ b/html.h @@ -0,0 +1,18 @@ +#ifndef HTML_H +#define HTML_H + +extern int htmlfd; + +extern void html(const char *txt); +extern void htmlf(const char *format,...); +extern void html_txt(char *txt); +extern void html_ntxt(int len, char *txt); +extern void html_attr(char *txt); +extern void html_hidden(char *name, char *value); +extern void html_option(char *value, char *text, char *selected_value); +extern void html_link_open(char *url, char *title, char *class); +extern void html_link_close(void); +extern void html_fileperm(unsigned short mode); +extern int html_include(const char *filename); + +#endif /* HTML_H */ diff --git a/shared.c b/shared.c index 808e674..76e10d0 100644 --- a/shared.c +++ b/shared.c @@ -14,8 +14,6 @@ int cgit_cmd; const char *cgit_version = CGIT_VERSION; -int htmlfd = 0; - void cgit_prepare_context(struct cgit_context *ctx) { memset(ctx, 0, sizeof(ctx)); diff --git a/ui-blob.c b/ui-blob.c index f5b844b..be4fb88 100644 --- a/ui-blob.c +++ b/ui-blob.c @@ -1,4 +1,13 @@ +/* ui-blob.c: show blob content + * + * Copyright (C) 2008 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + #include "cgit.h" +#include "html.h" void cgit_print_blob(struct cacheitem *item, const char *hex, char *path) { diff --git a/ui-commit.c b/ui-commit.c index 25721ca..ed25824 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" static int files, slots; static int total_adds, total_rems, max_changes; @@ -62,16 +63,16 @@ void print_fileinfo(struct fileinfo *info) html("<tr>"); htmlf("<td class='mode'>"); if (is_null_sha1(info->new_sha1)) { - html_filemode(info->old_mode); + cgit_print_filemode(info->old_mode); } else { - html_filemode(info->new_mode); + cgit_print_filemode(info->new_mode); } if (info->old_mode != info->new_mode && !is_null_sha1(info->old_sha1) && !is_null_sha1(info->new_sha1)) { html("<span class='modechange'>["); - html_filemode(info->old_mode); + cgit_print_filemode(info->old_mode); html("]</span>"); } htmlf("</td><td class='%s'>", class); diff --git a/ui-diff.c b/ui-diff.c index 263a7ba..5c3bc98 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -7,7 +7,7 @@ */ #include "cgit.h" - +#include "html.h" unsigned char old_rev_sha1[20]; unsigned char new_rev_sha1[20]; diff --git a/ui-log.c b/ui-log.c index 72e2a4b..e1d324d 100644 --- a/ui-log.c +++ b/ui-log.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" int files, add_lines, rem_lines; diff --git a/ui-patch.c b/ui-patch.c index 1da0a27..d93426b 100644 --- a/ui-patch.c +++ b/ui-patch.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" static void print_line(char *line, int len) { diff --git a/ui-refs.c b/ui-refs.c index ba513c1..e2a16f4 100644 --- a/ui-refs.c +++ b/ui-refs.c @@ -7,9 +7,7 @@ */ #include "cgit.h" - - - +#include "html.h" void cgit_print_refs() { diff --git a/ui-repolist.c b/ui-repolist.c index 5fde174..cd4e41d 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -6,9 +6,10 @@ * (see COPYING for full license text) */ -#include "cgit.h" #include <time.h> +#include "cgit.h" +#include "html.h" time_t read_agefile(char *path) { diff --git a/ui-shared.c b/ui-shared.c index cc1ab8b..2eff79d 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" const char cgit_doctype[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" @@ -567,4 +568,19 @@ void cgit_print_snapshot_start(const char *mimetype, const char *filename, html("\n"); } +void cgit_print_filemode(unsigned short mode) +{ + if (S_ISDIR(mode)) + html("d"); + else if (S_ISLNK(mode)) + html("l"); + else if (S_ISGITLINK(mode)) + html("m"); + else + html("-"); + html_fileperm(mode >> 6); + html_fileperm(mode >> 3); + html_fileperm(mode); +} + /* vim:set sw=8: */ diff --git a/ui-snapshot.c b/ui-snapshot.c index dfedd8f..67dbbdd 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" static int write_compressed_tar_archive(struct archiver_args *args,const char *filter) { diff --git a/ui-summary.c b/ui-summary.c index 3baac08..0afa0a3 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" static int header; diff --git a/ui-tag.c b/ui-tag.c index 6d761f3..2998d02 100644 --- a/ui-tag.c +++ b/ui-tag.c @@ -7,7 +7,7 @@ */ #include "cgit.h" - +#include "html.h" static void print_tag_content(char *buf) { diff --git a/ui-tree.c b/ui-tree.c index df05ad3..7912784 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -7,6 +7,7 @@ */ #include "cgit.h" +#include "html.h" char *curr_rev; char *match_path; @@ -79,7 +80,7 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, } html("<tr><td class='ls-mode'>"); - html_filemode(mode); + cgit_print_filemode(mode); html("</td><td>"); if (S_ISGITLINK(mode)) { htmlf("<a class='ls-mod' href='"); -- cgit v1.2.3-54-g00ecf From c5984a9896b39748e61daf6e620483749654b102 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 16:38:47 +0100 Subject: Add separate header-files for each page/view Yet another step towards removing cgit.h. Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- cgit.h | 17 ------ cmd.c | 11 ++++ ui-blob.h | 6 ++ ui-commit.h | 6 ++ ui-diff.h | 7 +++ ui-log.h | 7 +++ ui-patch.h | 6 ++ ui-refs.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ui-refs.h | 8 +++ ui-repolist.h | 6 ++ ui-snapshot.h | 8 +++ ui-summary.c | 174 +--------------------------------------------------------- ui-summary.h | 6 ++ ui-tag.h | 6 ++ ui-tree.h | 6 ++ 15 files changed, 257 insertions(+), 189 deletions(-) create mode 100644 ui-blob.h create mode 100644 ui-commit.h create mode 100644 ui-diff.h create mode 100644 ui-log.h create mode 100644 ui-patch.h create mode 100644 ui-refs.h create mode 100644 ui-repolist.h create mode 100644 ui-snapshot.h create mode 100644 ui-summary.h create mode 100644 ui-tag.h create mode 100644 ui-tree.h (limited to 'ui-refs.c') diff --git a/cgit.h b/cgit.h index e2d5126..1b23369 100644 --- a/cgit.h +++ b/cgit.h @@ -269,23 +269,6 @@ extern void cgit_print_docstart(struct cgit_context *ctx); extern void cgit_print_docend(); extern void cgit_print_pageheader(struct cgit_context *ctx); extern void cgit_print_filemode(unsigned short mode); -extern void cgit_print_branches(int maxcount); -extern void cgit_print_tags(int maxcount); - -extern void cgit_print_repolist(); -extern void cgit_print_summary(); -extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, - char *pattern, char *path, int pager); -extern void cgit_print_blob(const char *hex, char *path); -extern void cgit_print_tree(const char *rev, char *path); -extern void cgit_print_commit(char *hex); -extern void cgit_print_refs(); -extern void cgit_print_tag(char *revname); -extern void cgit_print_diff(const char *new_hex, const char *old_hex, const char *prefix); -extern void cgit_print_patch(char *hex); -extern void cgit_print_snapshot(const char *head, const char *hex, - const char *prefix, const char *filename, - int snapshot); extern void cgit_print_snapshot_links(const char *repo, const char *head, const char *hex, int snapshots); extern int cgit_parse_snapshots_mask(const char *str); diff --git a/cmd.c b/cmd.c index 489a11c..e0eacbe 100644 --- a/cmd.c +++ b/cmd.c @@ -8,6 +8,17 @@ #include "cgit.h" #include "cmd.h" +#include "ui-blob.h" +#include "ui-commit.h" +#include "ui-diff.h" +#include "ui-log.h" +#include "ui-patch.h" +#include "ui-refs.h" +#include "ui-repolist.h" +#include "ui-snapshot.h" +#include "ui-summary.h" +#include "ui-tag.h" +#include "ui-tree.h" static void blob_fn(struct cgit_context *ctx) { diff --git a/ui-blob.h b/ui-blob.h new file mode 100644 index 0000000..5a920a8 --- /dev/null +++ b/ui-blob.h @@ -0,0 +1,6 @@ +#ifndef UI_BLOB_H +#define UI_BLOB_H + +extern void cgit_print_blob(const char *hex, char *path); + +#endif /* UI_BLOB_H */ diff --git a/ui-commit.h b/ui-commit.h new file mode 100644 index 0000000..40bcb31 --- /dev/null +++ b/ui-commit.h @@ -0,0 +1,6 @@ +#ifndef UI_COMMIT_H +#define UI_COMMIT_H + +extern void cgit_print_commit(char *hex); + +#endif /* UI_COMMIT_H */ diff --git a/ui-diff.h b/ui-diff.h new file mode 100644 index 0000000..2307322 --- /dev/null +++ b/ui-diff.h @@ -0,0 +1,7 @@ +#ifndef UI_DIFF_H +#define UI_DIFF_H + +extern void cgit_print_diff(const char *new_hex, const char *old_hex, + const char *prefix); + +#endif /* UI_DIFF_H */ diff --git a/ui-log.h b/ui-log.h new file mode 100644 index 0000000..877e40e --- /dev/null +++ b/ui-log.h @@ -0,0 +1,7 @@ +#ifndef UI_LOG_H +#define UI_LOG_H + +extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, + char *pattern, char *path, int pager); + +#endif /* UI_LOG_H */ diff --git a/ui-patch.h b/ui-patch.h new file mode 100644 index 0000000..9f68212 --- /dev/null +++ b/ui-patch.h @@ -0,0 +1,6 @@ +#ifndef UI_PATCH_H +#define UI_PATCH_H + +extern void cgit_print_patch(char *hex); + +#endif /* UI_PATCH_H */ diff --git a/ui-refs.c b/ui-refs.c index e2a16f4..fc82ca7 100644 --- a/ui-refs.c +++ b/ui-refs.c @@ -9,6 +9,178 @@ #include "cgit.h" #include "html.h" +static int header; + +static int cmp_age(int age1, int age2) +{ + if (age1 != 0 && age2 != 0) + return age2 - age1; + + if (age1 == 0 && age2 == 0) + return 0; + + if (age1 == 0) + return +1; + + return -1; +} + +static int cmp_ref_name(const void *a, const void *b) +{ + struct refinfo *r1 = *(struct refinfo **)a; + struct refinfo *r2 = *(struct refinfo **)b; + + return strcmp(r1->refname, r2->refname); +} + +static int cmp_branch_age(const void *a, const void *b) +{ + struct refinfo *r1 = *(struct refinfo **)a; + struct refinfo *r2 = *(struct refinfo **)b; + + return cmp_age(r1->commit->committer_date, r2->commit->committer_date); +} + +static int cmp_tag_age(const void *a, const void *b) +{ + struct refinfo *r1 = *(struct refinfo **)a; + struct refinfo *r2 = *(struct refinfo **)b; + + return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date); +} + +static int print_branch(struct refinfo *ref) +{ + struct commitinfo *info = ref->commit; + char *name = (char *)ref->refname; + + if (!info) + return 1; + html("<tr><td>"); + cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL); + html("</td><td>"); + + if (ref->object->type == OBJ_COMMIT) { + cgit_print_age(info->commit->date, -1, NULL); + html("</td><td>"); + html_txt(info->author); + html("</td><td>"); + cgit_commit_link(info->subject, NULL, NULL, name, NULL); + } else { + html("</td><td></td><td>"); + cgit_object_link(ref->object); + } + html("</td></tr>\n"); + return 0; +} + +static void print_tag_header() +{ + html("<tr class='nohover'><th class='left'>Tag</th>" + "<th class='left'>Age</th>" + "<th class='left'>Author</th>" + "<th class='left'>Reference</th></tr>\n"); + header = 1; +} + +static int print_tag(struct refinfo *ref) +{ + struct tag *tag; + struct taginfo *info; + char *url, *name = (char *)ref->refname; + + if (ref->object->type == OBJ_TAG) { + tag = (struct tag *)ref->object; + info = ref->tag; + if (!tag || !info) + return 1; + html("<tr><td>"); + url = cgit_pageurl(ctx.qry.repo, "tag", + fmt("id=%s", name)); + html_link_open(url, NULL, NULL); + html_txt(name); + html_link_close(); + html("</td><td>"); + if (info->tagger_date > 0) + cgit_print_age(info->tagger_date, -1, NULL); + html("</td><td>"); + if (info->tagger) + html(info->tagger); + html("</td><td>"); + cgit_object_link(tag->tagged); + html("</td></tr>\n"); + } else { + if (!header) + print_tag_header(); + html("<tr><td>"); + html_txt(name); + html("</td><td colspan='2'/><td>"); + cgit_object_link(ref->object); + html("</td></tr>\n"); + } + return 0; +} + +static void print_refs_link(char *path) +{ + html("<tr class='nohover'><td colspan='4'>"); + cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); + html("</td></tr>"); +} + +void cgit_print_branches(int maxcount) +{ + struct reflist list; + int i; + + html("<tr class='nohover'><th class='left'>Branch</th>" + "<th class='left'>Idle</th>" + "<th class='left'>Author</th>" + "<th class='left'>Head commit</th></tr>\n"); + + list.refs = NULL; + list.alloc = list.count = 0; + for_each_branch_ref(cgit_refs_cb, &list); + + if (maxcount == 0 || maxcount > list.count) + maxcount = list.count; + + if (maxcount < list.count) { + qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age); + qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name); + } + + for(i=0; i<maxcount; i++) + print_branch(list.refs[i]); + + if (maxcount < list.count) + print_refs_link("heads"); +} + +void cgit_print_tags(int maxcount) +{ + struct reflist list; + int i; + + header = 0; + list.refs = NULL; + list.alloc = list.count = 0; + for_each_tag_ref(cgit_refs_cb, &list); + if (list.count == 0) + return; + qsort(list.refs, list.count, sizeof(*list.refs), cmp_tag_age); + if (!maxcount) + maxcount = list.count; + else if (maxcount > list.count) + maxcount = list.count; + print_tag_header(); + for(i=0; i<maxcount; i++) + print_tag(list.refs[i]); + + if (maxcount < list.count) + print_refs_link("tags"); +} + void cgit_print_refs() { diff --git a/ui-refs.h b/ui-refs.h new file mode 100644 index 0000000..b35c04a --- /dev/null +++ b/ui-refs.h @@ -0,0 +1,8 @@ +#ifndef UI_REFS_H +#define UI_REFS_H + +extern void cgit_print_branches(int maxcount); +extern void cgit_print_tags(int maxcount); +extern void cgit_print_refs(); + +#endif /* UI_REFS_H */ diff --git a/ui-repolist.h b/ui-repolist.h new file mode 100644 index 0000000..c23e5d2 --- /dev/null +++ b/ui-repolist.h @@ -0,0 +1,6 @@ +#ifndef UI_REPOLIST_H +#define UI_REPOLIST_H + +extern void cgit_print_repolist(); + +#endif /* UI_REPOLIST_H */ diff --git a/ui-snapshot.h b/ui-snapshot.h new file mode 100644 index 0000000..6e03761 --- /dev/null +++ b/ui-snapshot.h @@ -0,0 +1,8 @@ +#ifndef UI_SNAPSHOT_H +#define UI_SNAPSHOT_H + +extern void cgit_print_snapshot(const char *head, const char *hex, + const char *prefix, const char *filename, + int snapshot); + +#endif /* UI_SNAPSHOT_H */ diff --git a/ui-summary.c b/ui-summary.c index 0afa0a3..0b66b52 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -8,178 +8,8 @@ #include "cgit.h" #include "html.h" - -static int header; - -static int cmp_age(int age1, int age2) -{ - if (age1 != 0 && age2 != 0) - return age2 - age1; - - if (age1 == 0 && age2 == 0) - return 0; - - if (age1 == 0) - return +1; - - return -1; -} - -static int cmp_ref_name(const void *a, const void *b) -{ - struct refinfo *r1 = *(struct refinfo **)a; - struct refinfo *r2 = *(struct refinfo **)b; - - return strcmp(r1->refname, r2->refname); -} - -static int cmp_branch_age(const void *a, const void *b) -{ - struct refinfo *r1 = *(struct refinfo **)a; - struct refinfo *r2 = *(struct refinfo **)b; - - return cmp_age(r1->commit->committer_date, r2->commit->committer_date); -} - -static int cmp_tag_age(const void *a, const void *b) -{ - struct refinfo *r1 = *(struct refinfo **)a; - struct refinfo *r2 = *(struct refinfo **)b; - - return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date); -} - -static int print_branch(struct refinfo *ref) -{ - struct commitinfo *info = ref->commit; - char *name = (char *)ref->refname; - - if (!info) - return 1; - html("<tr><td>"); - cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL); - html("</td><td>"); - - if (ref->object->type == OBJ_COMMIT) { - cgit_print_age(info->commit->date, -1, NULL); - html("</td><td>"); - html_txt(info->author); - html("</td><td>"); - cgit_commit_link(info->subject, NULL, NULL, name, NULL); - } else { - html("</td><td></td><td>"); - cgit_object_link(ref->object); - } - html("</td></tr>\n"); - return 0; -} - -static void print_tag_header() -{ - html("<tr class='nohover'><th class='left'>Tag</th>" - "<th class='left'>Age</th>" - "<th class='left'>Author</th>" - "<th class='left'>Reference</th></tr>\n"); - header = 1; -} - -static int print_tag(struct refinfo *ref) -{ - struct tag *tag; - struct taginfo *info; - char *url, *name = (char *)ref->refname; - - if (ref->object->type == OBJ_TAG) { - tag = (struct tag *)ref->object; - info = ref->tag; - if (!tag || !info) - return 1; - html("<tr><td>"); - url = cgit_pageurl(ctx.qry.repo, "tag", - fmt("id=%s", name)); - html_link_open(url, NULL, NULL); - html_txt(name); - html_link_close(); - html("</td><td>"); - if (info->tagger_date > 0) - cgit_print_age(info->tagger_date, -1, NULL); - html("</td><td>"); - if (info->tagger) - html(info->tagger); - html("</td><td>"); - cgit_object_link(tag->tagged); - html("</td></tr>\n"); - } else { - if (!header) - print_tag_header(); - html("<tr><td>"); - html_txt(name); - html("</td><td colspan='2'/><td>"); - cgit_object_link(ref->object); - html("</td></tr>\n"); - } - return 0; -} - -static void print_refs_link(char *path) -{ - html("<tr class='nohover'><td colspan='4'>"); - cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); - html("</td></tr>"); -} - -void cgit_print_branches(int maxcount) -{ - struct reflist list; - int i; - - html("<tr class='nohover'><th class='left'>Branch</th>" - "<th class='left'>Idle</th>" - "<th class='left'>Author</th>" - "<th class='left'>Head commit</th></tr>\n"); - - list.refs = NULL; - list.alloc = list.count = 0; - for_each_branch_ref(cgit_refs_cb, &list); - - if (maxcount == 0 || maxcount > list.count) - maxcount = list.count; - - if (maxcount < list.count) { - qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age); - qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name); - } - - for(i=0; i<maxcount; i++) - print_branch(list.refs[i]); - - if (maxcount < list.count) - print_refs_link("heads"); -} - -void cgit_print_tags(int maxcount) -{ - struct reflist list; - int i; - - header = 0; - list.refs = NULL; - list.alloc = list.count = 0; - for_each_tag_ref(cgit_refs_cb, &list); - if (list.count == 0) - return; - qsort(list.refs, list.count, sizeof(*list.refs), cmp_tag_age); - if (!maxcount) - maxcount = list.count; - else if (maxcount > list.count) - maxcount = list.count; - print_tag_header(); - for(i=0; i<maxcount; i++) - print_tag(list.refs[i]); - - if (maxcount < list.count) - print_refs_link("tags"); -} +#include "ui-log.h" +#include "ui-refs.h" void cgit_print_summary() { diff --git a/ui-summary.h b/ui-summary.h new file mode 100644 index 0000000..37aedd2 --- /dev/null +++ b/ui-summary.h @@ -0,0 +1,6 @@ +#ifndef UI_SUMMARY_H +#define UI_SUMMARY_H + +extern void cgit_print_summary(); + +#endif /* UI_SUMMARY_H */ diff --git a/ui-tag.h b/ui-tag.h new file mode 100644 index 0000000..d295cdc --- /dev/null +++ b/ui-tag.h @@ -0,0 +1,6 @@ +#ifndef UI_TAG_H +#define UI_TAG_H + +extern void cgit_print_tag(char *revname); + +#endif /* UI_TAG_H */ diff --git a/ui-tree.h b/ui-tree.h new file mode 100644 index 0000000..bbd34e3 --- /dev/null +++ b/ui-tree.h @@ -0,0 +1,6 @@ +#ifndef UI_TREE_H +#define UI_TREE_H + +extern void cgit_print_tree(const char *rev, char *path); + +#endif /* UI_TREE_H */ -- cgit v1.2.3-54-g00ecf From a4d1ca1dc6ff8171694d9e2280b6075a1beced0c Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 24 Mar 2008 16:50:57 +0100 Subject: Add ui-shared.h This is finally a proper headerfile for the shared ui-functions which used to reside in cgit.h Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- cgit.c | 1 + cgit.h | 32 -------------------------------- ui-blob.c | 1 + ui-commit.c | 1 + ui-diff.c | 1 + ui-log.c | 1 + ui-patch.c | 1 + ui-refs.c | 1 + ui-repolist.c | 1 + ui-shared.h | 36 ++++++++++++++++++++++++++++++++++++ ui-snapshot.c | 1 + ui-tag.c | 1 + ui-tree.c | 1 + 13 files changed, 47 insertions(+), 32 deletions(-) create mode 100644 ui-shared.h (limited to 'ui-refs.c') diff --git a/cgit.c b/cgit.c index 79e0e43..dbb023e 100644 --- a/cgit.c +++ b/cgit.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "cmd.h" +#include "ui-shared.h" static int cgit_prepare_cache(struct cacheitem *item) { diff --git a/cgit.h b/cgit.h index 1b23369..c1a231d 100644 --- a/cgit.h +++ b/cgit.h @@ -237,40 +237,8 @@ extern int cache_cancel_lock(struct cacheitem *item); extern int cache_exist(struct cacheitem *item); extern int cache_expired(struct cacheitem *item); -extern char *cgit_repourl(const char *reponame); -extern char *cgit_fileurl(const char *reponame, const char *pagename, - const char *filename, const char *query); -extern char *cgit_pageurl(const char *reponame, const char *pagename, - const char *query); - extern const char *cgit_repobasename(const char *reponame); -extern void cgit_tree_link(char *name, char *title, char *class, char *head, - char *rev, char *path); -extern void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path, int ofs, char *grep, - char *pattern); -extern void cgit_commit_link(char *name, char *title, char *class, char *head, - char *rev); -extern void cgit_refs_link(char *name, char *title, char *class, char *head, - char *rev, char *path); -extern void cgit_snapshot_link(char *name, char *title, char *class, - char *head, char *rev, char *archivename); -extern void cgit_diff_link(char *name, char *title, char *class, char *head, - char *new_rev, char *old_rev, char *path); - -extern void cgit_object_link(struct object *obj); - -extern void cgit_print_error(char *msg); -extern void cgit_print_date(time_t secs, char *format); -extern void cgit_print_age(time_t t, time_t max_relative, char *format); -extern void cgit_print_http_headers(struct cgit_context *ctx); -extern void cgit_print_docstart(struct cgit_context *ctx); -extern void cgit_print_docend(); -extern void cgit_print_pageheader(struct cgit_context *ctx); -extern void cgit_print_filemode(unsigned short mode); -extern void cgit_print_snapshot_links(const char *repo, const char *head, - const char *hex, int snapshots); extern int cgit_parse_snapshots_mask(const char *str); #endif /* CGIT_H */ diff --git a/ui-blob.c b/ui-blob.c index 3b29132..11589db 100644 --- a/ui-blob.c +++ b/ui-blob.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" void cgit_print_blob(const char *hex, char *path) { diff --git a/ui-commit.c b/ui-commit.c index ed25824..8019e36 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" static int files, slots; static int total_adds, total_rems, max_changes; diff --git a/ui-diff.c b/ui-diff.c index 5c3bc98..2a22009 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" unsigned char old_rev_sha1[20]; unsigned char new_rev_sha1[20]; diff --git a/ui-log.c b/ui-log.c index e1d324d..60c9269 100644 --- a/ui-log.c +++ b/ui-log.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" int files, add_lines, rem_lines; diff --git a/ui-patch.c b/ui-patch.c index 68ebb15..36bfae4 100644 --- a/ui-patch.c +++ b/ui-patch.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" static void print_line(char *line, int len) { diff --git a/ui-refs.c b/ui-refs.c index fc82ca7..12533cd 100644 --- a/ui-refs.c +++ b/ui-refs.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" static int header; diff --git a/ui-repolist.c b/ui-repolist.c index ad9b1bc..eeeaf3d 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -10,6 +10,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" time_t read_agefile(char *path) { diff --git a/ui-shared.h b/ui-shared.h new file mode 100644 index 0000000..94de884 --- /dev/null +++ b/ui-shared.h @@ -0,0 +1,36 @@ +#ifndef UI_SHARED_H +#define UI_SHARED_H + +extern char *cgit_repourl(const char *reponame); +extern char *cgit_fileurl(const char *reponame, const char *pagename, + const char *filename, const char *query); +extern char *cgit_pageurl(const char *reponame, const char *pagename, + const char *query); + +extern void cgit_tree_link(char *name, char *title, char *class, char *head, + char *rev, char *path); +extern void cgit_log_link(char *name, char *title, char *class, char *head, + char *rev, char *path, int ofs, char *grep, + char *pattern); +extern void cgit_commit_link(char *name, char *title, char *class, char *head, + char *rev); +extern void cgit_refs_link(char *name, char *title, char *class, char *head, + char *rev, char *path); +extern void cgit_snapshot_link(char *name, char *title, char *class, + char *head, char *rev, char *archivename); +extern void cgit_diff_link(char *name, char *title, char *class, char *head, + char *new_rev, char *old_rev, char *path); +extern void cgit_object_link(struct object *obj); + +extern void cgit_print_error(char *msg); +extern void cgit_print_date(time_t secs, char *format); +extern void cgit_print_age(time_t t, time_t max_relative, char *format); +extern void cgit_print_http_headers(struct cgit_context *ctx); +extern void cgit_print_docstart(struct cgit_context *ctx); +extern void cgit_print_docend(); +extern void cgit_print_pageheader(struct cgit_context *ctx); +extern void cgit_print_filemode(unsigned short mode); +extern void cgit_print_snapshot_links(const char *repo, const char *head, + const char *hex, int snapshots); + +#endif /* UI_SHARED_H */ diff --git a/ui-snapshot.c b/ui-snapshot.c index 512fcd2..966a140 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" static int write_compressed_tar_archive(struct archiver_args *args,const char *filter) { diff --git a/ui-tag.c b/ui-tag.c index 2998d02..ab2c66d 100644 --- a/ui-tag.c +++ b/ui-tag.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" static void print_tag_content(char *buf) { diff --git a/ui-tree.c b/ui-tree.c index 7912784..9be3140 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -8,6 +8,7 @@ #include "cgit.h" #include "html.h" +#include "ui-shared.h" char *curr_rev; char *match_path; -- cgit v1.2.3-54-g00ecf