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-summary.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ui-summary.c') diff --git a/ui-summary.c b/ui-summary.c index b96414e..bbd4464 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -94,7 +94,7 @@ static int print_tag(struct refinfo *ref) if (!tag || !info) return 1; html("<tr><td>"); - url = cgit_pageurl(cgit_query_repo, "tag", + url = cgit_pageurl(ctx.qry.repo, "tag", fmt("id=%s", name)); html_link_open(url, NULL, NULL); html_txt(name); @@ -123,7 +123,7 @@ static int print_tag(struct refinfo *ref) static void print_refs_link(char *path) { html("<tr class='nohover'><td colspan='4'>"); - cgit_refs_link("[...]", NULL, NULL, cgit_query_head, NULL, path); + cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); html("</td></tr>"); } @@ -188,7 +188,7 @@ void cgit_print_summary() html("</div>"); } if (cgit_summary_log > 0) - cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, + cgit_print_log(ctx.qry.head, 0, cgit_summary_log, NULL, NULL, NULL, 0); html("<table summary='repository info' class='list nowrap'>"); if (cgit_summary_log > 0) -- cgit v1.2.3-54-g00ecf From b228d4ff82a65fdcd4a7364759fe36a0bdda5978 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sat, 16 Feb 2008 13:07:13 +0100 Subject: Add all config variables into struct cgit_context This removes another big set of global variables, and introduces the cgit_prepare_context() function which populates a context-variable with compile-time default values. Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- cache.c | 10 ++--- cgit.c | 33 +++++++------- cgit.h | 72 +++++++++++++++--------------- shared.c | 138 +++++++++++++++++++++++++++------------------------------- ui-repolist.c | 18 ++++---- ui-shared.c | 60 ++++++++++++------------- ui-summary.c | 10 ++--- 7 files changed, 166 insertions(+), 175 deletions(-) (limited to 'ui-summary.c') diff --git a/cache.c b/cache.c index b162952..2ed0d6f 100644 --- a/cache.c +++ b/cache.c @@ -44,21 +44,21 @@ int cache_create_dirs() { char *path; - path = fmt("%s", cgit_cache_root); + path = fmt("%s", ctx.cfg.cache_root); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; if (!cgit_repo) return 0; - path = fmt("%s/%s", cgit_cache_root, + path = fmt("%s/%s", ctx.cfg.cache_root, cache_safe_filename(cgit_repo->url)); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; if (ctx.qry.page) { - path = fmt("%s/%s/%s", cgit_cache_root, + path = fmt("%s/%s/%s", ctx.cfg.cache_root, cache_safe_filename(cgit_repo->url), ctx.qry.page); if (mkdir(path, S_IRWXU) && errno!=EEXIST) @@ -74,7 +74,7 @@ int cache_refill_overdue(const char *lockfile) if (stat(lockfile, &st)) return 0; else - return (time(NULL) - st.st_mtime > cgit_cache_max_create_time); + return (time(NULL) - st.st_mtime > ctx.cfg.cache_max_create_time); } int cache_lock(struct cacheitem *item) @@ -83,7 +83,7 @@ int cache_lock(struct cacheitem *item) char *lockfile = xstrdup(fmt("%s.lock", item->name)); top: - if (++i > cgit_max_lock_attempts) + if (++i > ctx.cfg.max_lock_attempts) die("cache_lock: unable to lock %s: %s", item->name, strerror(errno)); diff --git a/cgit.c b/cgit.c index 8a30c3c..f0907a1 100644 --- a/cgit.c +++ b/cgit.c @@ -11,7 +11,7 @@ static int cgit_prepare_cache(struct cacheitem *item) { if (!cgit_repo && ctx.qry.repo) { - char *title = fmt("%s - %s", cgit_root_title, "Bad request"); + char *title = fmt("%s - %s", ctx.cfg.root_title, "Bad request"); cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); cgit_print_error(fmt("Unknown repo: %s", ctx.qry.repo)); @@ -20,27 +20,27 @@ static int cgit_prepare_cache(struct cacheitem *item) } if (!cgit_repo) { - item->name = xstrdup(fmt("%s/index.html", cgit_cache_root)); - item->ttl = cgit_cache_root_ttl; + item->name = xstrdup(fmt("%s/index.html", ctx.cfg.cache_root)); + item->ttl = ctx.cfg.cache_root_ttl; return 1; } if (!cgit_cmd) { - item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root, + item->name = xstrdup(fmt("%s/%s/index.%s.html", ctx.cfg.cache_root, cache_safe_filename(cgit_repo->url), cache_safe_filename(ctx.qry.raw))); - item->ttl = cgit_cache_repo_ttl; + item->ttl = ctx.cfg.cache_repo_ttl; } else { - item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, + item->name = xstrdup(fmt("%s/%s/%s/%s.html", ctx.cfg.cache_root, cache_safe_filename(cgit_repo->url), ctx.qry.page, cache_safe_filename(ctx.qry.raw))); if (ctx.qry.has_symref) - item->ttl = cgit_cache_dynamic_ttl; + item->ttl = ctx.cfg.cache_dynamic_ttl; else if (ctx.qry.has_sha1) - item->ttl = cgit_cache_static_ttl; + item->ttl = ctx.cfg.cache_static_ttl; else - item->ttl = cgit_cache_repo_ttl; + item->ttl = ctx.cfg.cache_repo_ttl; } return 1; } @@ -85,7 +85,7 @@ static void cgit_print_repo_page(struct cacheitem *item) unsigned char sha1[20]; if (chdir(cgit_repo->path)) { - title = fmt("%s - %s", cgit_root_title, "Bad request"); + title = fmt("%s - %s", ctx.cfg.root_title, "Bad request"); cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); cgit_print_error(fmt("Unable to scan repository: %s", @@ -153,7 +153,7 @@ static void cgit_print_repo_page(struct cacheitem *item) switch(cgit_cmd) { case CMD_LOG: cgit_print_log(ctx.qry.sha1, ctx.qry.ofs, - cgit_max_commit_count, ctx.qry.grep, ctx.qry.search, + ctx.cfg.max_commit_count, ctx.qry.grep, ctx.qry.search, ctx.qry.path, 1); break; case CMD_TREE: @@ -212,7 +212,7 @@ static void cgit_check_cache(struct cacheitem *item) int i = 0; top: - if (++i > cgit_max_lock_attempts) { + if (++i > ctx.cfg.max_lock_attempts) { die("cgit_refresh_cache: unable to lock %s: %s", item->name, strerror(errno)); } @@ -258,10 +258,10 @@ static void cgit_parse_args(int argc, const char **argv) for (i = 1; i < argc; i++) { if (!strncmp(argv[i], "--cache=", 8)) { - cgit_cache_root = xstrdup(argv[i]+8); + ctx.cfg.cache_root = xstrdup(argv[i]+8); } if (!strcmp(argv[i], "--nocache")) { - cgit_nocache = 1; + ctx.cfg.nocache = 1; } if (!strncmp(argv[i], "--query=", 8)) { ctx.qry.raw = xstrdup(argv[i]+8); @@ -291,6 +291,7 @@ int main(int argc, const char **argv) struct cacheitem item; 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; @@ -301,14 +302,14 @@ int main(int argc, const char **argv) cgit_global_config_cb); cgit_repo = NULL; if (getenv("SCRIPT_NAME")) - cgit_script_name = xstrdup(getenv("SCRIPT_NAME")); + ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); if (getenv("QUERY_STRING")) ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); cgit_parse_args(argc, argv); cgit_parse_query(ctx.qry.raw, cgit_querystring_cb); if (!cgit_prepare_cache(&item)) return 0; - if (cgit_nocache) { + if (ctx.cfg.nocache) { cgit_fill_cache(&item, 0); } else { cgit_check_cache(&item); diff --git a/cgit.h b/cgit.h index 4576efb..0338ebd 100644 --- a/cgit.h +++ b/cgit.h @@ -139,8 +139,44 @@ struct cgit_query { int ofs; }; +struct cgit_config { + char *agefile; + char *cache_root; + char *clone_prefix; + char *css; + char *index_header; + char *index_info; + char *logo; + char *logo_link; + char *module_link; + char *repo_group; + char *robots; + char *root_title; + char *script_name; + char *virtual_root; + int cache_dynamic_ttl; + int cache_max_create_time; + int cache_repo_ttl; + int cache_root_ttl; + int cache_static_ttl; + int enable_index_links; + int enable_log_filecount; + int enable_log_linecount; + int max_commit_count; + int max_lock_attempts; + int max_msg_len; + int max_repodesc_len; + int nocache; + int renamelimit; + int snapshots; + int summary_branches; + int summary_log; + int summary_tags; +}; + struct cgit_context { struct cgit_query qry; + struct cgit_config cfg; }; extern const char *cgit_version; @@ -150,43 +186,9 @@ extern struct repoinfo *cgit_repo; extern struct cgit_context ctx; extern int cgit_cmd; -extern char *cgit_root_title; -extern char *cgit_css; -extern char *cgit_logo; -extern char *cgit_index_header; -extern char *cgit_index_info; -extern char *cgit_logo_link; -extern char *cgit_module_link; -extern char *cgit_agefile; -extern char *cgit_virtual_root; -extern char *cgit_script_name; -extern char *cgit_cache_root; -extern char *cgit_repo_group; -extern char *cgit_robots; -extern char *cgit_clone_prefix; - -extern int cgit_nocache; -extern int cgit_snapshots; -extern int cgit_enable_index_links; -extern int cgit_enable_log_filecount; -extern int cgit_enable_log_linecount; -extern int cgit_max_lock_attempts; -extern int cgit_cache_root_ttl; -extern int cgit_cache_repo_ttl; -extern int cgit_cache_dynamic_ttl; -extern int cgit_cache_static_ttl; -extern int cgit_cache_max_create_time; -extern int cgit_summary_log; -extern int cgit_summary_tags; -extern int cgit_summary_branches; - -extern int cgit_max_msg_len; -extern int cgit_max_repodesc_len; -extern int cgit_max_commit_count; - - extern int htmlfd; +extern void cgit_prepare_context(struct cgit_context *ctx); extern int cgit_get_cmd_index(const char *cmd); extern struct repoinfo *cgit_get_repoinfo(const char *url); extern void cgit_global_config_cb(const char *name, const char *value); diff --git a/shared.c b/shared.c index 6c1a762..8dd2b00 100644 --- a/shared.c +++ b/shared.c @@ -15,43 +15,31 @@ int cgit_cmd; const char *cgit_version = CGIT_VERSION; -char *cgit_root_title = "Git repository browser"; -char *cgit_css = "/cgit.css"; -char *cgit_logo = "/git-logo.png"; -char *cgit_index_header = NULL; -char *cgit_index_info = NULL; -char *cgit_logo_link = "http://www.kernel.org/pub/software/scm/git/docs/"; -char *cgit_module_link = "./?repo=%s&page=commit&id=%s"; -char *cgit_agefile = "info/web/last-modified"; -char *cgit_virtual_root = NULL; -char *cgit_script_name = CGIT_SCRIPT_NAME; -char *cgit_cache_root = CGIT_CACHE_ROOT; -char *cgit_repo_group = NULL; -char *cgit_robots = "index, nofollow"; -char *cgit_clone_prefix = NULL; - -int cgit_nocache = 0; -int cgit_snapshots = 0; -int cgit_enable_index_links = 0; -int cgit_enable_log_filecount = 0; -int cgit_enable_log_linecount = 0; -int cgit_max_lock_attempts = 5; -int cgit_cache_root_ttl = 5; -int cgit_cache_repo_ttl = 5; -int cgit_cache_dynamic_ttl = 5; -int cgit_cache_static_ttl = -1; -int cgit_cache_max_create_time = 5; -int cgit_summary_log = 0; -int cgit_summary_tags = 0; -int cgit_summary_branches = 0; -int cgit_renamelimit = -1; - -int cgit_max_msg_len = 60; -int cgit_max_repodesc_len = 60; -int cgit_max_commit_count = 50; - int htmlfd = 0; +void cgit_prepare_context(struct cgit_context *ctx) +{ + memset(ctx, 0, sizeof(ctx)); + ctx->cfg.agefile = "info/web/last-modified"; + ctx->cfg.cache_dynamic_ttl = 5; + ctx->cfg.cache_max_create_time = 5; + ctx->cfg.cache_repo_ttl = 5; + ctx->cfg.cache_root = CGIT_CACHE_ROOT; + ctx->cfg.cache_root_ttl = 5; + ctx->cfg.cache_static_ttl = -1; + ctx->cfg.css = "/cgit.css"; + ctx->cfg.logo = "/git-logo.png"; + ctx->cfg.max_commit_count = 50; + ctx->cfg.max_lock_attempts = 5; + ctx->cfg.max_msg_len = 60; + ctx->cfg.max_repodesc_len = 60; + ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; + ctx->cfg.renamelimit = -1; + ctx->cfg.robots = "index, nofollow"; + ctx->cfg.root_title = "Git repository browser"; + ctx->cfg.script_name = CGIT_SCRIPT_NAME; +} + int cgit_get_cmd_index(const char *cmd) { static char *cmds[] = {"log", "commit", "diff", "tree", "blob", @@ -105,12 +93,12 @@ struct repoinfo *add_repo(const char *url) ret->path = NULL; ret->desc = "[no description]"; ret->owner = NULL; - ret->group = cgit_repo_group; + ret->group = ctx.cfg.repo_group; ret->defbranch = "master"; - ret->snapshots = cgit_snapshots; - ret->enable_log_filecount = cgit_enable_log_filecount; - ret->enable_log_linecount = cgit_enable_log_linecount; - ret->module_link = cgit_module_link; + ret->snapshots = ctx.cfg.snapshots; + ret->enable_log_filecount = ctx.cfg.enable_log_filecount; + ret->enable_log_linecount = ctx.cfg.enable_log_linecount; + ret->module_link = ctx.cfg.module_link; ret->readme = NULL; return ret; } @@ -131,65 +119,65 @@ struct repoinfo *cgit_get_repoinfo(const char *url) void cgit_global_config_cb(const char *name, const char *value) { if (!strcmp(name, "root-title")) - cgit_root_title = xstrdup(value); + ctx.cfg.root_title = xstrdup(value); else if (!strcmp(name, "css")) - cgit_css = xstrdup(value); + ctx.cfg.css = xstrdup(value); else if (!strcmp(name, "logo")) - cgit_logo = xstrdup(value); + ctx.cfg.logo = xstrdup(value); else if (!strcmp(name, "index-header")) - cgit_index_header = xstrdup(value); + ctx.cfg.index_header = xstrdup(value); else if (!strcmp(name, "index-info")) - cgit_index_info = xstrdup(value); + ctx.cfg.index_info = xstrdup(value); else if (!strcmp(name, "logo-link")) - cgit_logo_link = xstrdup(value); + ctx.cfg.logo_link = xstrdup(value); else if (!strcmp(name, "module-link")) - cgit_module_link = xstrdup(value); + ctx.cfg.module_link = xstrdup(value); else if (!strcmp(name, "virtual-root")) { - cgit_virtual_root = trim_end(value, '/'); - if (!cgit_virtual_root && (!strcmp(value, "/"))) - cgit_virtual_root = ""; + ctx.cfg.virtual_root = trim_end(value, '/'); + if (!ctx.cfg.virtual_root && (!strcmp(value, "/"))) + ctx.cfg.virtual_root = ""; } else if (!strcmp(name, "nocache")) - cgit_nocache = atoi(value); + ctx.cfg.nocache = atoi(value); else if (!strcmp(name, "snapshots")) - cgit_snapshots = cgit_parse_snapshots_mask(value); + ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); else if (!strcmp(name, "enable-index-links")) - cgit_enable_index_links = atoi(value); + ctx.cfg.enable_index_links = atoi(value); else if (!strcmp(name, "enable-log-filecount")) - cgit_enable_log_filecount = atoi(value); + ctx.cfg.enable_log_filecount = atoi(value); else if (!strcmp(name, "enable-log-linecount")) - cgit_enable_log_linecount = atoi(value); + ctx.cfg.enable_log_linecount = atoi(value); else if (!strcmp(name, "cache-root")) - cgit_cache_root = xstrdup(value); + ctx.cfg.cache_root = xstrdup(value); else if (!strcmp(name, "cache-root-ttl")) - cgit_cache_root_ttl = atoi(value); + ctx.cfg.cache_root_ttl = atoi(value); else if (!strcmp(name, "cache-repo-ttl")) - cgit_cache_repo_ttl = atoi(value); + ctx.cfg.cache_repo_ttl = atoi(value); else if (!strcmp(name, "cache-static-ttl")) - cgit_cache_static_ttl = atoi(value); + ctx.cfg.cache_static_ttl = atoi(value); else if (!strcmp(name, "cache-dynamic-ttl")) - cgit_cache_dynamic_ttl = atoi(value); + ctx.cfg.cache_dynamic_ttl = atoi(value); else if (!strcmp(name, "max-message-length")) - cgit_max_msg_len = atoi(value); + ctx.cfg.max_msg_len = atoi(value); else if (!strcmp(name, "max-repodesc-length")) - cgit_max_repodesc_len = atoi(value); + ctx.cfg.max_repodesc_len = atoi(value); else if (!strcmp(name, "max-commit-count")) - cgit_max_commit_count = atoi(value); + ctx.cfg.max_commit_count = atoi(value); else if (!strcmp(name, "summary-log")) - cgit_summary_log = atoi(value); + ctx.cfg.summary_log = atoi(value); else if (!strcmp(name, "summary-branches")) - cgit_summary_branches = atoi(value); + ctx.cfg.summary_branches = atoi(value); else if (!strcmp(name, "summary-tags")) - cgit_summary_tags = atoi(value); + ctx.cfg.summary_tags = atoi(value); else if (!strcmp(name, "agefile")) - cgit_agefile = xstrdup(value); + ctx.cfg.agefile = xstrdup(value); else if (!strcmp(name, "renamelimit")) - cgit_renamelimit = atoi(value); + ctx.cfg.renamelimit = atoi(value); else if (!strcmp(name, "robots")) - cgit_robots = xstrdup(value); + ctx.cfg.robots = xstrdup(value); else if (!strcmp(name, "clone-prefix")) - cgit_clone_prefix = xstrdup(value); + ctx.cfg.clone_prefix = xstrdup(value); else if (!strcmp(name, "repo.group")) - cgit_repo_group = xstrdup(value); + ctx.cfg.repo_group = xstrdup(value); else if (!strcmp(name, "repo.url")) cgit_repo = add_repo(value); else if (!strcmp(name, "repo.name")) @@ -205,11 +193,11 @@ void cgit_global_config_cb(const char *name, const char *value) else if (cgit_repo && !strcmp(name, "repo.defbranch")) cgit_repo->defbranch = xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.snapshots")) - cgit_repo->snapshots = cgit_snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ + cgit_repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) - cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); + cgit_repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) - cgit_repo->enable_log_linecount = cgit_enable_log_linecount * atoi(value); + cgit_repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); else if (cgit_repo && !strcmp(name, "repo.module-link")) cgit_repo->module_link= xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.readme") && value != NULL) { @@ -476,7 +464,7 @@ void cgit_diff_tree(const unsigned char *old_sha1, diff_setup(&opt); opt.output_format = DIFF_FORMAT_CALLBACK; opt.detect_rename = 1; - opt.rename_limit = cgit_renamelimit; + opt.rename_limit = ctx.cfg.renamelimit; DIFF_OPT_SET(&opt, RECURSIVE); opt.format_callback = cgit_diff_tree_cb; opt.format_callback_data = fn; diff --git a/ui-repolist.c b/ui-repolist.c index 3e97ca9..a6cc2cc 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -30,7 +30,7 @@ static void print_modtime(struct repoinfo *repo) char *path; struct stat s; - path = fmt("%s/%s", repo->path, cgit_agefile); + path = fmt("%s/%s", repo->path, ctx.cfg.agefile); if (stat(path, &s) == 0) { cgit_print_age(read_agefile(path), -1, NULL); return; @@ -47,17 +47,17 @@ void cgit_print_repolist(struct cacheitem *item) int i, columns = 4; char *last_group = NULL; - if (cgit_enable_index_links) + if (ctx.cfg.enable_index_links) columns++; - cgit_print_docstart(cgit_root_title, item); - cgit_print_pageheader(cgit_root_title, 0); + cgit_print_docstart(ctx.cfg.root_title, item); + cgit_print_pageheader(ctx.cfg.root_title, 0); html("<table summary='repository list' class='list nowrap'>"); - if (cgit_index_header) { + if (ctx.cfg.index_header) { htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", columns); - html_include(cgit_index_header); + html_include(ctx.cfg.index_header); html("</td></tr>"); } html("<tr class='nohover'>" @@ -65,7 +65,7 @@ void cgit_print_repolist(struct cacheitem *item) "<th class='left'>Description</th>" "<th class='left'>Owner</th>" "<th class='left'>Idle</th>"); - if (cgit_enable_index_links) + if (ctx.cfg.enable_index_links) html("<th>Links</th>"); html("</tr>\n"); @@ -87,13 +87,13 @@ void cgit_print_repolist(struct cacheitem *item) html_txt(cgit_repo->name); html_link_close(); html("</td><td>"); - html_ntxt(cgit_max_repodesc_len, cgit_repo->desc); + html_ntxt(ctx.cfg.max_repodesc_len, cgit_repo->desc); html("</td><td>"); html_txt(cgit_repo->owner); html("</td><td>"); print_modtime(cgit_repo); html("</td>"); - if (cgit_enable_index_links) { + if (ctx.cfg.enable_index_links) { html("<td>"); html_link_open(cgit_repourl(cgit_repo->url), NULL, "button"); diff --git a/ui-shared.c b/ui-shared.c index 6a41fb0..b96237d 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -42,16 +42,16 @@ void cgit_print_error(char *msg) char *cgit_rooturl() { - if (cgit_virtual_root) - return fmt("%s/", cgit_virtual_root); + if (ctx.cfg.virtual_root) + return fmt("%s/", ctx.cfg.virtual_root); else - return cgit_script_name; + return ctx.cfg.script_name; } char *cgit_repourl(const char *reponame) { - if (cgit_virtual_root) { - return fmt("%s/%s/", cgit_virtual_root, reponame); + if (ctx.cfg.virtual_root) { + return fmt("%s/%s/", ctx.cfg.virtual_root, reponame); } else { return fmt("?r=%s", reponame); } @@ -63,8 +63,8 @@ char *cgit_fileurl(const char *reponame, const char *pagename, char *tmp; char *delim; - if (cgit_virtual_root) { - tmp = fmt("%s/%s/%s/%s", cgit_virtual_root, reponame, + if (ctx.cfg.virtual_root) { + tmp = fmt("%s/%s/%s/%s", ctx.cfg.virtual_root, reponame, pagename, (filename ? filename:"")); delim = "?"; } else { @@ -110,14 +110,14 @@ const char *cgit_repobasename(const char *reponame) char *cgit_currurl() { - if (!cgit_virtual_root) - return cgit_script_name; + if (!ctx.cfg.virtual_root) + return ctx.cfg.script_name; else if (ctx.qry.page) - return fmt("%s/%s/%s/", cgit_virtual_root, ctx.qry.repo, ctx.qry.page); + return fmt("%s/%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo, ctx.qry.page); else if (ctx.qry.repo) - return fmt("%s/%s/", cgit_virtual_root, ctx.qry.repo); + return fmt("%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo); else - return fmt("%s/", cgit_virtual_root); + return fmt("%s/", ctx.cfg.virtual_root); } static char *repolink(char *title, char *class, char *page, char *head, @@ -137,9 +137,9 @@ static char *repolink(char *title, char *class, char *page, char *head, html("'"); } html(" href='"); - if (cgit_virtual_root) { - html_attr(cgit_virtual_root); - if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') + if (ctx.cfg.virtual_root) { + html_attr(ctx.cfg.virtual_root); + if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/') html("/"); html_attr(cgit_repo->url); if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') @@ -151,7 +151,7 @@ static char *repolink(char *title, char *class, char *page, char *head, html_attr(path); } } else { - html(cgit_script_name); + html(ctx.cfg.script_name); html("?url="); html_attr(cgit_repo->url); if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') @@ -229,11 +229,11 @@ void cgit_log_link(char *name, char *title, char *class, char *head, void cgit_commit_link(char *name, char *title, char *class, char *head, char *rev) { - if (strlen(name) > cgit_max_msg_len && cgit_max_msg_len >= 15) { - name[cgit_max_msg_len] = '\0'; - name[cgit_max_msg_len - 1] = '.'; - name[cgit_max_msg_len - 2] = '.'; - name[cgit_max_msg_len - 3] = '.'; + if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { + name[ctx.cfg.max_msg_len] = '\0'; + name[ctx.cfg.max_msg_len - 1] = '.'; + name[ctx.cfg.max_msg_len - 2] = '.'; + name[ctx.cfg.max_msg_len - 3] = '.'; } reporevlink("commit", name, title, class, head, rev, NULL); } @@ -374,10 +374,10 @@ void cgit_print_docstart(char *title, struct cacheitem *item) html_txt(title); html("</title>\n"); htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version); - if (cgit_robots && *cgit_robots) - htmlf("<meta name='robots' content='%s'/>\n", cgit_robots); + if (ctx.cfg.robots && *ctx.cfg.robots) + htmlf("<meta name='robots' content='%s'/>\n", ctx.cfg.robots); html("<link rel='stylesheet' type='text/css' href='"); - html_attr(cgit_css); + html_attr(ctx.cfg.css); html("'/>\n"); html("</head>\n"); html("<body>\n"); @@ -439,7 +439,7 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page) { char *url; - if (!cgit_virtual_root) { + if (!ctx.cfg.virtual_root) { url = fmt("%s/%s", ctx.qry.repo, page); if (ctx.qry.path) url = fmt("%s/%s", url, ctx.qry.path); @@ -474,7 +474,7 @@ void cgit_print_pageheader(char *title, int show_search) html("<tr><td class='sidebar'>\n<a href='"); html_attr(cgit_rooturl()); htmlf("'><img src='%s' alt='cgit'/></a>\n", - cgit_logo); + ctx.cfg.logo); html("</td></tr>\n<tr><td class='sidebar'>\n"); if (ctx.qry.repo) { html("<h1 class='first'>"); @@ -501,12 +501,12 @@ void cgit_print_pageheader(char *title, int show_search) for_each_ref(print_archive_ref, &header); - if (cgit_repo->clone_url || cgit_clone_prefix) { + if (cgit_repo->clone_url || ctx.cfg.clone_prefix) { html("<h1>clone</h1>\n"); if (cgit_repo->clone_url) url = cgit_repo->clone_url; else - url = fmt("%s%s", cgit_clone_prefix, + url = fmt("%s%s", ctx.cfg.clone_prefix, cgit_repo->url); html("<a class='menu' href='"); html_attr(url); @@ -531,7 +531,7 @@ void cgit_print_pageheader(char *title, int show_search) html("<h1>search</h1>\n"); html("<form method='get' action='"); - if (cgit_virtual_root) + if (ctx.cfg.virtual_root) html_attr(cgit_fileurl(ctx.qry.repo, "log", ctx.qry.path, NULL)); html("'>\n"); @@ -546,7 +546,7 @@ void cgit_print_pageheader(char *title, int show_search) html("'/>\n"); html("</form>\n"); } else { - if (!cgit_index_info || html_include(cgit_index_info)) + if (!ctx.cfg.index_info || html_include(ctx.cfg.index_info)) html(default_info); } diff --git a/ui-summary.c b/ui-summary.c index bbd4464..0a44994 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -187,14 +187,14 @@ void cgit_print_summary() html_include(cgit_repo->readme); html("</div>"); } - if (cgit_summary_log > 0) - cgit_print_log(ctx.qry.head, 0, cgit_summary_log, NULL, + if (ctx.cfg.summary_log > 0) + cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL, NULL, NULL, 0); html("<table summary='repository info' class='list nowrap'>"); - if (cgit_summary_log > 0) + if (ctx.cfg.summary_log > 0) html("<tr class='nohover'><td colspan='4'> </td></tr>"); - cgit_print_branches(cgit_summary_branches); + cgit_print_branches(ctx.cfg.summary_branches); html("<tr class='nohover'><td colspan='4'> </td></tr>"); - cgit_print_tags(cgit_summary_tags); + cgit_print_tags(ctx.cfg.summary_tags); html("</table>"); } -- cgit v1.2.3-54-g00ecf From d1f3bbe9d22029f45a77bb938c176ccc0c827d46 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sat, 16 Feb 2008 13:56:09 +0100 Subject: Move cgit_repo into cgit_context This removes the global variable which is used to keep track of the currently selected repository, and adds a new variable in the cgit_context structure. Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- cache.c | 6 +++--- cgit.c | 31 +++++++++++++++--------------- cgit.h | 12 ++++++------ parsing.c | 16 ++++++++-------- shared.c | 61 +++++++++++++++++++++++++++++------------------------------ ui-commit.c | 4 ++-- ui-log.c | 10 +++++----- ui-repolist.c | 30 ++++++++++++++--------------- ui-shared.c | 28 +++++++++++++-------------- ui-summary.c | 4 ++-- ui-tree.c | 2 +- 11 files changed, 101 insertions(+), 103 deletions(-) (limited to 'ui-summary.c') diff --git a/cache.c b/cache.c index 2ed0d6f..7860fc7 100644 --- a/cache.c +++ b/cache.c @@ -48,18 +48,18 @@ int cache_create_dirs() if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; - if (!cgit_repo) + if (!ctx.repo) return 0; path = fmt("%s/%s", ctx.cfg.cache_root, - cache_safe_filename(cgit_repo->url)); + cache_safe_filename(ctx.repo->url)); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; if (ctx.qry.page) { path = fmt("%s/%s/%s", ctx.cfg.cache_root, - cache_safe_filename(cgit_repo->url), + cache_safe_filename(ctx.repo->url), ctx.qry.page); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; diff --git a/cgit.c b/cgit.c index f0907a1..b270fdc 100644 --- a/cgit.c +++ b/cgit.c @@ -10,7 +10,7 @@ static int cgit_prepare_cache(struct cacheitem *item) { - if (!cgit_repo && ctx.qry.repo) { + if (!ctx.repo && ctx.qry.repo) { char *title = fmt("%s - %s", ctx.cfg.root_title, "Bad request"); cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); @@ -19,7 +19,7 @@ static int cgit_prepare_cache(struct cacheitem *item) return 0; } - if (!cgit_repo) { + if (!ctx.repo) { item->name = xstrdup(fmt("%s/index.html", ctx.cfg.cache_root)); item->ttl = ctx.cfg.cache_root_ttl; return 1; @@ -27,12 +27,12 @@ static int cgit_prepare_cache(struct cacheitem *item) if (!cgit_cmd) { item->name = xstrdup(fmt("%s/%s/index.%s.html", ctx.cfg.cache_root, - cache_safe_filename(cgit_repo->url), + cache_safe_filename(ctx.repo->url), cache_safe_filename(ctx.qry.raw))); item->ttl = ctx.cfg.cache_repo_ttl; } else { item->name = xstrdup(fmt("%s/%s/%s/%s.html", ctx.cfg.cache_root, - cache_safe_filename(cgit_repo->url), + cache_safe_filename(ctx.repo->url), ctx.qry.page, cache_safe_filename(ctx.qry.raw))); if (ctx.qry.has_symref) @@ -64,7 +64,7 @@ int find_current_ref(const char *refname, const unsigned char *sha1, return info->match; } -char *find_default_branch(struct repoinfo *repo) +char *find_default_branch(struct cgit_repo *repo) { struct refmatch info; @@ -84,7 +84,7 @@ static void cgit_print_repo_page(struct cacheitem *item) int show_search; unsigned char sha1[20]; - if (chdir(cgit_repo->path)) { + if (chdir(ctx.repo->path)) { title = fmt("%s - %s", ctx.cfg.root_title, "Bad request"); cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); @@ -94,13 +94,13 @@ static void cgit_print_repo_page(struct cacheitem *item) return; } - title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); + title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc); show_search = 0; - setenv("GIT_DIR", cgit_repo->path, 1); + setenv("GIT_DIR", ctx.repo->path, 1); if (!ctx.qry.head) { - ctx.qry.head = xstrdup(find_default_branch(cgit_repo)); - cgit_repo->defbranch = ctx.qry.head; + ctx.qry.head = xstrdup(find_default_branch(ctx.repo)); + ctx.repo->defbranch = ctx.qry.head; } if (!ctx.qry.head) { @@ -113,7 +113,7 @@ static void cgit_print_repo_page(struct cacheitem *item) if (get_sha1(ctx.qry.head, sha1)) { tmp = xstrdup(ctx.qry.head); - ctx.qry.head = cgit_repo->defbranch; + ctx.qry.head = ctx.repo->defbranch; cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); cgit_print_error(fmt("Invalid branch: %s", tmp)); @@ -121,11 +121,11 @@ static void cgit_print_repo_page(struct cacheitem *item) return; } - if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) { + if ((cgit_cmd == CMD_SNAPSHOT) && ctx.repo->snapshots) { cgit_print_snapshot(item, ctx.qry.head, ctx.qry.sha1, - cgit_repobasename(cgit_repo->url), + cgit_repobasename(ctx.repo->url), ctx.qry.path, - cgit_repo->snapshots ); + ctx.repo->snapshots ); return; } @@ -192,7 +192,7 @@ static void cgit_fill_cache(struct cacheitem *item, int use_cache) chk_positive(dup2(item->fd, STDOUT_FILENO), "Dup2(cachefile)"); } - if (cgit_repo) + if (ctx.repo) cgit_print_repo_page(item); else cgit_print_repolist(item); @@ -300,7 +300,6 @@ int main(int argc, const char **argv) cgit_read_config(cgit_config_env ? cgit_config_env : CGIT_CONFIG, cgit_global_config_cb); - cgit_repo = NULL; if (getenv("SCRIPT_NAME")) ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); if (getenv("QUERY_STRING")) diff --git a/cgit.h b/cgit.h index 0338ebd..598d8c3 100644 --- a/cgit.h +++ b/cgit.h @@ -66,7 +66,7 @@ struct cacheitem { int fd; }; -struct repoinfo { +struct cgit_repo { char *url; char *name; char *path; @@ -82,10 +82,10 @@ struct repoinfo { int enable_log_linecount; }; -struct repolist { +struct cgit_repolist { int length; int count; - struct repoinfo *repos; + struct cgit_repo *repos; }; struct commitinfo { @@ -177,12 +177,12 @@ struct cgit_config { struct cgit_context { struct cgit_query qry; struct cgit_config cfg; + struct cgit_repo *repo; }; extern const char *cgit_version; -extern struct repolist cgit_repolist; -extern struct repoinfo *cgit_repo; +extern struct cgit_repolist cgit_repolist; extern struct cgit_context ctx; extern int cgit_cmd; @@ -190,7 +190,7 @@ extern int htmlfd; extern void cgit_prepare_context(struct cgit_context *ctx); extern int cgit_get_cmd_index(const char *cmd); -extern struct repoinfo *cgit_get_repoinfo(const char *url); +extern struct cgit_repo *cgit_get_repoinfo(const char *url); extern void cgit_global_config_cb(const char *name, const char *value); extern void cgit_repo_config_cb(const char *name, const char *value); extern void cgit_querystring_cb(const char *name, const char *value); diff --git a/parsing.c b/parsing.c index 8cf56a4..027f06b 100644 --- a/parsing.c +++ b/parsing.c @@ -143,27 +143,27 @@ void cgit_parse_url(const char *url) { char *cmd, *p; - cgit_repo = NULL; + ctx.repo = NULL; if (!url || url[0] == '\0') return; - cgit_repo = cgit_get_repoinfo(url); - if (cgit_repo) { - ctx.qry.repo = cgit_repo->url; + ctx.repo = cgit_get_repoinfo(url); + if (ctx.repo) { + ctx.qry.repo = ctx.repo->url; return; } cmd = strchr(url, '/'); - while (!cgit_repo && cmd) { + while (!ctx.repo && cmd) { cmd[0] = '\0'; - cgit_repo = cgit_get_repoinfo(url); - if (cgit_repo == NULL) { + ctx.repo = cgit_get_repoinfo(url); + if (ctx.repo == NULL) { cmd[0] = '/'; cmd = strchr(cmd + 1, '/'); continue; } - ctx.qry.repo = cgit_repo->url; + ctx.qry.repo = ctx.repo->url; p = strchr(cmd + 1, '/'); if (p) { p[0] = '\0'; diff --git a/shared.c b/shared.c index 8dd2b00..808e674 100644 --- a/shared.c +++ b/shared.c @@ -8,8 +8,7 @@ #include "cgit.h" -struct repolist cgit_repolist; -struct repoinfo *cgit_repo; +struct cgit_repolist cgit_repolist; struct cgit_context ctx; int cgit_cmd; @@ -73,9 +72,9 @@ int chk_non_negative(int result, char *msg) return result; } -struct repoinfo *add_repo(const char *url) +struct cgit_repo *add_repo(const char *url) { - struct repoinfo *ret; + struct cgit_repo *ret; if (++cgit_repolist.count > cgit_repolist.length) { if (cgit_repolist.length == 0) @@ -84,7 +83,7 @@ struct repoinfo *add_repo(const char *url) cgit_repolist.length *= 2; cgit_repolist.repos = xrealloc(cgit_repolist.repos, cgit_repolist.length * - sizeof(struct repoinfo)); + sizeof(struct cgit_repo)); } ret = &cgit_repolist.repos[cgit_repolist.count-1]; @@ -103,10 +102,10 @@ struct repoinfo *add_repo(const char *url) return ret; } -struct repoinfo *cgit_get_repoinfo(const char *url) +struct cgit_repo *cgit_get_repoinfo(const char *url) { int i; - struct repoinfo *repo; + struct cgit_repo *repo; for (i=0; i<cgit_repolist.count; i++) { repo = &cgit_repolist.repos[i]; @@ -179,32 +178,32 @@ void cgit_global_config_cb(const char *name, const char *value) else if (!strcmp(name, "repo.group")) ctx.cfg.repo_group = xstrdup(value); else if (!strcmp(name, "repo.url")) - cgit_repo = add_repo(value); + ctx.repo = add_repo(value); else if (!strcmp(name, "repo.name")) - cgit_repo->name = xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.path")) - cgit_repo->path = trim_end(value, '/'); - else if (cgit_repo && !strcmp(name, "repo.clone-url")) - cgit_repo->clone_url = xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.desc")) - cgit_repo->desc = xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.owner")) - cgit_repo->owner = xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.defbranch")) - cgit_repo->defbranch = xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.snapshots")) - cgit_repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ - else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) - cgit_repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); - else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) - cgit_repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); - else if (cgit_repo && !strcmp(name, "repo.module-link")) - cgit_repo->module_link= xstrdup(value); - else if (cgit_repo && !strcmp(name, "repo.readme") && value != NULL) { + ctx.repo->name = xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.path")) + ctx.repo->path = trim_end(value, '/'); + else if (ctx.repo && !strcmp(name, "repo.clone-url")) + ctx.repo->clone_url = xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.desc")) + ctx.repo->desc = xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.owner")) + ctx.repo->owner = xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.defbranch")) + ctx.repo->defbranch = xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.snapshots")) + ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ + else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount")) + ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); + else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount")) + ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); + else if (ctx.repo && !strcmp(name, "repo.module-link")) + ctx.repo->module_link= xstrdup(value); + else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) { if (*value == '/') - cgit_repo->readme = xstrdup(value); + ctx.repo->readme = xstrdup(value); else - cgit_repo->readme = xstrdup(fmt("%s/%s", cgit_repo->path, value)); + ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); } else if (!strcmp(name, "include")) cgit_read_config(value, cgit_global_config_cb); } @@ -213,7 +212,7 @@ void cgit_querystring_cb(const char *name, const char *value) { if (!strcmp(name,"r")) { ctx.qry.repo = xstrdup(value); - cgit_repo = cgit_get_repoinfo(value); + ctx.repo = cgit_get_repoinfo(value); } else if (!strcmp(name, "p")) { ctx.qry.page = xstrdup(value); cgit_cmd = cgit_get_cmd_index(value); diff --git a/ui-commit.c b/ui-commit.c index 3b0919b..25721ca 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -194,10 +194,10 @@ void cgit_print_commit(char *hex) sha1_to_hex(p->item->object.sha1), NULL); html(")</td></tr>"); } - if (cgit_repo->snapshots) { + if (ctx.repo->snapshots) { html("<tr><th>download</th><td colspan='2' class='sha1'>"); cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, - hex, cgit_repo->snapshots); + hex, ctx.repo->snapshots); html("</td></tr>"); } html("</table>\n"); diff --git a/ui-log.c b/ui-log.c index a39474b..72e2a4b 100644 --- a/ui-log.c +++ b/ui-log.c @@ -25,7 +25,7 @@ void count_lines(char *line, int size) void inspect_files(struct diff_filepair *pair) { files++; - if (cgit_repo->enable_log_linecount) + if (ctx.repo->enable_log_linecount) cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines); } @@ -39,14 +39,14 @@ void print_commit(struct commit *commit) html("</td><td>"); cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, sha1_to_hex(commit->object.sha1)); - if (cgit_repo->enable_log_filecount) { + if (ctx.repo->enable_log_filecount) { files = 0; add_lines = 0; rem_lines = 0; cgit_diff_commit(commit, inspect_files); html("</td><td class='right'>"); htmlf("%d", files); - if (cgit_repo->enable_log_linecount) { + if (ctx.repo->enable_log_linecount) { html("</td><td class='right'>"); htmlf("-%d/+%d", rem_lines, add_lines); } @@ -94,9 +94,9 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern html("<tr class='nohover'><th class='left'>Age</th>" "<th class='left'>Message</th>"); - if (cgit_repo->enable_log_filecount) { + if (ctx.repo->enable_log_filecount) { html("<th class='right'>Files</th>"); - if (cgit_repo->enable_log_linecount) + if (ctx.repo->enable_log_linecount) html("<th class='right'>Lines</th>"); } html("<th class='left'>Author</th></tr>\n"); diff --git a/ui-repolist.c b/ui-repolist.c index a6cc2cc..5fde174 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -25,7 +25,7 @@ time_t read_agefile(char *path) return 0; } -static void print_modtime(struct repoinfo *repo) +static void print_modtime(struct cgit_repo *repo) { char *path; struct stat s; @@ -70,32 +70,32 @@ void cgit_print_repolist(struct cacheitem *item) html("</tr>\n"); for (i=0; i<cgit_repolist.count; i++) { - cgit_repo = &cgit_repolist.repos[i]; - if ((last_group == NULL && cgit_repo->group != NULL) || - (last_group != NULL && cgit_repo->group == NULL) || - (last_group != NULL && cgit_repo->group != NULL && - strcmp(cgit_repo->group, last_group))) { + ctx.repo = &cgit_repolist.repos[i]; + if ((last_group == NULL && ctx.repo->group != NULL) || + (last_group != NULL && ctx.repo->group == NULL) || + (last_group != NULL && ctx.repo->group != NULL && + strcmp(ctx.repo->group, last_group))) { htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", columns); - html_txt(cgit_repo->group); + html_txt(ctx.repo->group); html("</td></tr>"); - last_group = cgit_repo->group; + last_group = ctx.repo->group; } htmlf("<tr><td class='%s'>", - cgit_repo->group ? "sublevel-repo" : "toplevel-repo"); - html_link_open(cgit_repourl(cgit_repo->url), NULL, NULL); - html_txt(cgit_repo->name); + ctx.repo->group ? "sublevel-repo" : "toplevel-repo"); + html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); + html_txt(ctx.repo->name); html_link_close(); html("</td><td>"); - html_ntxt(ctx.cfg.max_repodesc_len, cgit_repo->desc); + html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); html("</td><td>"); - html_txt(cgit_repo->owner); + html_txt(ctx.repo->owner); html("</td><td>"); - print_modtime(cgit_repo); + print_modtime(ctx.repo); html("</td>"); if (ctx.cfg.enable_index_links) { html("<td>"); - html_link_open(cgit_repourl(cgit_repo->url), + html_link_open(cgit_repourl(ctx.repo->url), NULL, "button"); html("summary</a>"); cgit_log_link("log", NULL, "button", NULL, NULL, NULL, diff --git a/ui-shared.c b/ui-shared.c index b96237d..b9f487a 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -141,8 +141,8 @@ static char *repolink(char *title, char *class, char *page, char *head, html_attr(ctx.cfg.virtual_root); if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/') html("/"); - html_attr(cgit_repo->url); - if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') + html_attr(ctx.repo->url); + if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') html("/"); if (page) { html(page); @@ -153,8 +153,8 @@ static char *repolink(char *title, char *class, char *page, char *head, } else { html(ctx.cfg.script_name); html("?url="); - html_attr(cgit_repo->url); - if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') + html_attr(ctx.repo->url); + if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') html("/"); if (page) { html(page); @@ -164,7 +164,7 @@ static char *repolink(char *title, char *class, char *page, char *head, } delim = "&"; } - if (head && strcmp(head, cgit_repo->defbranch)) { + if (head && strcmp(head, ctx.repo->defbranch)) { html(delim); html("h="); html_attr(head); @@ -446,7 +446,7 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page) html_hidden("url", url); } - if (incl_head && strcmp(ctx.qry.head, cgit_repo->defbranch)) + if (incl_head && strcmp(ctx.qry.head, ctx.repo->defbranch)) html_hidden("h", ctx.qry.head); if (ctx.qry.sha1) @@ -478,12 +478,12 @@ void cgit_print_pageheader(char *title, int show_search) html("</td></tr>\n<tr><td class='sidebar'>\n"); if (ctx.qry.repo) { html("<h1 class='first'>"); - html_txt(strrpart(cgit_repo->name, 20)); + html_txt(strrpart(ctx.repo->name, 20)); html("</h1>\n"); - html_txt(cgit_repo->desc); - if (cgit_repo->owner) { + html_txt(ctx.repo->desc); + if (ctx.repo->owner) { html("<h1>owner</h1>\n"); - html_txt(cgit_repo->owner); + html_txt(ctx.repo->owner); } html("<h1>navigate</h1>\n"); reporevlink(NULL, "summary", NULL, "menu", ctx.qry.head, @@ -501,13 +501,13 @@ void cgit_print_pageheader(char *title, int show_search) for_each_ref(print_archive_ref, &header); - if (cgit_repo->clone_url || ctx.cfg.clone_prefix) { + if (ctx.repo->clone_url || ctx.cfg.clone_prefix) { html("<h1>clone</h1>\n"); - if (cgit_repo->clone_url) - url = cgit_repo->clone_url; + if (ctx.repo->clone_url) + url = ctx.repo->clone_url; else url = fmt("%s%s", ctx.cfg.clone_prefix, - cgit_repo->url); + ctx.repo->url); html("<a class='menu' href='"); html_attr(url); html("' title='"); diff --git a/ui-summary.c b/ui-summary.c index 0a44994..3baac08 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -182,9 +182,9 @@ void cgit_print_tags(int maxcount) void cgit_print_summary() { - if (cgit_repo->readme) { + if (ctx.repo->readme) { html("<div id='summary'>"); - html_include(cgit_repo->readme); + html_include(ctx.repo->readme); html("</div>"); } if (ctx.cfg.summary_log > 0) diff --git a/ui-tree.c b/ui-tree.c index 7cae85a..df05ad3 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -83,7 +83,7 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, html("</td><td>"); if (S_ISGITLINK(mode)) { htmlf("<a class='ls-mod' href='"); - html_attr(fmt(cgit_repo->module_link, + html_attr(fmt(ctx.repo->module_link, name, sha1_to_hex(sha1))); html("'>"); -- 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-summary.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-summary.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