Diffstat (limited to 'cmd.c')
| -rw-r--r-- | cmd.c | 191 |
1 files changed, 73 insertions, 118 deletions
@@ -1,10 +1,7 @@ /* cmd.c: the cgit command dispatcher * - * Copyright (C) 2006-2017 cgit Development Team <cgit@lists.zx2c4.com> - * Copyright (C) 2026 Saya Andy <saya.andy@posteo.com> - * - * Modified 2026 by Saya Andy: - * Include ci ui element + * Copyright (C) 2008 Lars Hjemli + * Copyright (C) 2013 Jason A. Donenfeld <Jason@zx2c4.com>. * * Licensed under GNU General Public License v2 * (see COPYING for full license text) @@ -15,9 +12,7 @@ #include "cache.h" #include "ui-shared.h" #include "ui-atom.h" -#include "ui-blame.h" #include "ui-blob.h" -#include "ui-ci.h" #include "ui-clone.h" #include "ui-commit.h" #include "ui-diff.h" @@ -32,188 +27,148 @@ #include "ui-tag.h" #include "ui-tree.h" -static void HEAD_fn(void) -{ - cgit_clone_head(); -} - -static void atom_fn(void) +static void HEAD_fn(struct cgit_context *ctx) { - cgit_print_atom(ctx.qry.head, ctx.qry.path, ctx.cfg.max_atom_items); + cgit_clone_head(ctx); } -static void about_fn(void) +static void atom_fn(struct cgit_context *ctx) { - if (ctx.repo) { - size_t path_info_len = ctx.env.path_info ? strlen(ctx.env.path_info) : 0; - if (!ctx.qry.path && - ctx.qry.url[strlen(ctx.qry.url) - 1] != '/' && - (!path_info_len || ctx.env.path_info[path_info_len - 1] != '/')) { - char *currenturl = cgit_currenturl(); - char *redirect = fmtalloc("%s/", currenturl); - cgit_redirect(redirect, true); - free(currenturl); - free(redirect); - } else if (ctx.repo->readme.nr) - cgit_print_repo_readme(ctx.qry.path); - else if (ctx.repo->homepage) - cgit_redirect(ctx.repo->homepage, false); - else { - char *currenturl = cgit_currenturl(); - char *redirect = fmtalloc("%s../", currenturl); - cgit_redirect(redirect, false); - free(currenturl); - free(redirect); - } - } else - cgit_print_site_readme(); + cgit_print_atom(ctx->qry.head, ctx->qry.path, ctx->cfg.max_atom_items); } -static void blame_fn(void) +static void about_fn(struct cgit_context *ctx) { - if (ctx.repo->enable_blame) - cgit_print_blame(); + if (ctx->repo) + cgit_print_repo_readme(ctx->qry.path); else - cgit_print_error_page(403, "Forbidden", "Blame is disabled"); -} - -static void blob_fn(void) -{ - cgit_print_blob(ctx.qry.oid, ctx.qry.path, ctx.qry.head, 0); -} - -static void ci_fn(void) -{ - cgit_print_ci(); + cgit_print_site_readme(); } -static void commit_fn(void) +static void blob_fn(struct cgit_context *ctx) { - cgit_print_commit(ctx.qry.oid, ctx.qry.path); + cgit_print_blob(ctx->qry.sha1, ctx->qry.path, ctx->qry.head, 0); } -static void diff_fn(void) +static void commit_fn(struct cgit_context *ctx) { - cgit_print_diff(ctx.qry.oid, ctx.qry.oid2, ctx.qry.path, 1, 0); + cgit_print_commit(ctx->qry.sha1, ctx->qry.path); } -static void rawdiff_fn(void) +static void diff_fn(struct cgit_context *ctx) { - cgit_print_diff(ctx.qry.oid, ctx.qry.oid2, ctx.qry.path, 1, 1); + cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1); } -static void info_fn(void) +static void info_fn(struct cgit_context *ctx) { - cgit_clone_info(); + cgit_clone_info(ctx); } -static void log_fn(void) +static void log_fn(struct cgit_context *ctx) { - cgit_print_log(ctx.qry.oid, ctx.qry.ofs, ctx.cfg.max_commit_count, - ctx.qry.grep, ctx.qry.search, ctx.qry.path, 1, - ctx.repo->enable_commit_graph, - ctx.repo->commit_sort); + cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count, + ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1, + ctx->repo->enable_commit_graph, + ctx->repo->commit_sort); } -static void ls_cache_fn(void) +static void ls_cache_fn(struct cgit_context *ctx) { - ctx.page.mimetype = "text/plain"; - ctx.page.filename = "ls-cache.txt"; - cgit_print_http_headers(); - cache_ls(ctx.cfg.cache_root); + ctx->page.mimetype = "text/plain"; + ctx->page.filename = "ls-cache.txt"; + cgit_print_http_headers(ctx); + cache_ls(ctx->cfg.cache_root); } -static void objects_fn(void) +static void objects_fn(struct cgit_context *ctx) { - cgit_clone_objects(); + cgit_clone_objects(ctx); } -static void repolist_fn(void) +static void repolist_fn(struct cgit_context *ctx) { cgit_print_repolist(); } -static void patch_fn(void) +static void patch_fn(struct cgit_context *ctx) { - cgit_print_patch(ctx.qry.oid, ctx.qry.oid2, ctx.qry.path); + cgit_print_patch(ctx->qry.sha1, ctx->qry.path); } -static void plain_fn(void) +static void plain_fn(struct cgit_context *ctx) { - cgit_print_plain(); + cgit_print_plain(ctx); } -static void refs_fn(void) +static void refs_fn(struct cgit_context *ctx) { cgit_print_refs(); } -static void snapshot_fn(void) +static void snapshot_fn(struct cgit_context *ctx) { - cgit_print_snapshot(ctx.qry.head, ctx.qry.oid, ctx.qry.path, - ctx.qry.nohead); + cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1, ctx->qry.path, + ctx->repo->snapshots, ctx->qry.nohead); } -static void stats_fn(void) +static void stats_fn(struct cgit_context *ctx) { - cgit_show_stats(); + cgit_show_stats(ctx); } -static void summary_fn(void) +static void summary_fn(struct cgit_context *ctx) { cgit_print_summary(); } -static void tag_fn(void) +static void tag_fn(struct cgit_context *ctx) { - cgit_print_tag(ctx.qry.oid); + cgit_print_tag(ctx->qry.sha1); } -static void tree_fn(void) +static void tree_fn(struct cgit_context *ctx) { - cgit_print_tree(ctx.qry.oid, ctx.qry.path); + cgit_print_tree(ctx->qry.sha1, ctx->qry.path); } -#define def_cmd(name, want_repo, want_vpath, is_clone) \ - {#name, name##_fn, want_repo, want_vpath, is_clone} +#define def_cmd(name, want_repo, want_layout, want_vpath, is_clone) \ + {#name, name##_fn, want_repo, want_layout, want_vpath, is_clone} -struct cgit_cmd *cgit_get_cmd(void) +struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) { static struct cgit_cmd cmds[] = { - def_cmd(HEAD, 1, 0, 1), - def_cmd(atom, 1, 0, 0), - def_cmd(about, 0, 0, 0), - def_cmd(blame, 1, 1, 0), - def_cmd(blob, 1, 0, 0), - def_cmd(ci, 1, 0, 0), - def_cmd(commit, 1, 1, 0), - def_cmd(diff, 1, 1, 0), - def_cmd(info, 1, 0, 1), - def_cmd(log, 1, 1, 0), - def_cmd(ls_cache, 0, 0, 0), - def_cmd(objects, 1, 0, 1), - def_cmd(patch, 1, 1, 0), - def_cmd(plain, 1, 0, 0), - def_cmd(rawdiff, 1, 1, 0), - def_cmd(refs, 1, 0, 0), - def_cmd(repolist, 0, 0, 0), - def_cmd(snapshot, 1, 0, 0), - def_cmd(stats, 1, 1, 0), - def_cmd(summary, 1, 0, 0), - def_cmd(tag, 1, 0, 0), - def_cmd(tree, 1, 1, 0), + def_cmd(HEAD, 1, 0, 0, 1), + def_cmd(atom, 1, 0, 0, 0), + def_cmd(about, 0, 1, 0, 0), + def_cmd(blob, 1, 0, 0, 0), + def_cmd(commit, 1, 1, 1, 0), + def_cmd(diff, 1, 1, 1, 0), + def_cmd(info, 1, 0, 0, 1), + def_cmd(log, 1, 1, 1, 0), + def_cmd(ls_cache, 0, 0, 0, 0), + def_cmd(objects, 1, 0, 0, 1), + def_cmd(patch, 1, 0, 1, 0), + def_cmd(plain, 1, 0, 0, 0), + def_cmd(refs, 1, 1, 0, 0), + def_cmd(repolist, 0, 0, 0, 0), + def_cmd(snapshot, 1, 0, 0, 0), + def_cmd(stats, 1, 1, 1, 0), + def_cmd(summary, 1, 1, 0, 0), + def_cmd(tag, 1, 1, 0, 0), + def_cmd(tree, 1, 1, 1, 0), }; int i; - if (ctx.qry.page == NULL) { - if (ctx.repo) - ctx.qry.page = "summary"; + if (ctx->qry.page == NULL) { + if (ctx->repo) + ctx->qry.page = "summary"; else - ctx.qry.page = "repolist"; + ctx->qry.page = "repolist"; } for (i = 0; i < sizeof(cmds)/sizeof(*cmds); i++) - if (!strcmp(ctx.qry.page, cmds[i].name)) + if (!strcmp(ctx->qry.page, cmds[i].name)) return &cmds[i]; return NULL; } |