[PATCH 2/4] Remove context parameter from all commands

Lukas Fleischer cgit at cryptocrack.de
Wed Jan 15 22:37:05 CET 2014


Drop the context parameter from the following functions (and all static
helpers used by them) and use the global context instead:

* cgit_get_cmd()
* All cgit command functions.
* cgit_clone_info()
* cgit_clone_objects()
* cgit_clone_head()
* cgit_print_plain()
* cgit_show_stats()

Fix all invocations of these functions accordingly.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 cgit.c     |   4 +--
 cmd.c      | 100 ++++++++++++++++++++++++++++++-------------------------------
 cmd.h      |   4 +--
 ui-clone.c |  42 +++++++++++++-------------
 ui-clone.h |   6 ++--
 ui-plain.c |  10 +++----
 ui-plain.h |   2 +-
 ui-stats.c |  29 +++++++++---------
 ui-stats.h |   2 +-
 9 files changed, 99 insertions(+), 100 deletions(-)

diff --git a/cgit.c b/cgit.c
index 512ef56..54efd59 100644
--- a/cgit.c
+++ b/cgit.c
@@ -598,7 +598,7 @@ static void process_request(void *cbdata)
 	struct cgit_context *ctx = cbdata;
 	struct cgit_cmd *cmd;
 
-	cmd = cgit_get_cmd(ctx);
+	cmd = cgit_get_cmd();
 	if (!cmd) {
 		ctx->page.title = "cgit error";
 		ctx->page.status = 404;
@@ -640,7 +640,7 @@ static void process_request(void *cbdata)
 		cgit_print_pageheader();
 	}
 
-	cmd->fn(ctx);
+	cmd->fn();
 
 	if (cmd->want_layout)
 		cgit_print_docend();
diff --git a/cmd.c b/cmd.c
index 3022452..cbd235c 100644
--- a/cmd.c
+++ b/cmd.c
@@ -26,120 +26,120 @@
 #include "ui-tag.h"
 #include "ui-tree.h"
 
-static void HEAD_fn(struct cgit_context *ctx)
+static void HEAD_fn(void)
 {
-	cgit_clone_head(ctx);
+	cgit_clone_head();
 }
 
-static void atom_fn(struct cgit_context *ctx)
+static void atom_fn(void)
 {
-	cgit_print_atom(ctx->qry.head, ctx->qry.path, ctx->cfg.max_atom_items);
+	cgit_print_atom(ctx.qry.head, ctx.qry.path, ctx.cfg.max_atom_items);
 }
 
-static void about_fn(struct cgit_context *ctx)
+static void about_fn(void)
 {
-	if (ctx->repo)
-		cgit_print_repo_readme(ctx->qry.path);
+	if (ctx.repo)
+		cgit_print_repo_readme(ctx.qry.path);
 	else
 		cgit_print_site_readme();
 }
 
-static void blob_fn(struct cgit_context *ctx)
+static void blob_fn(void)
 {
-	cgit_print_blob(ctx->qry.sha1, ctx->qry.path, ctx->qry.head, 0);
+	cgit_print_blob(ctx.qry.sha1, ctx.qry.path, ctx.qry.head, 0);
 }
 
-static void commit_fn(struct cgit_context *ctx)
+static void commit_fn(void)
 {
-	cgit_print_commit(ctx->qry.sha1, ctx->qry.path);
+	cgit_print_commit(ctx.qry.sha1, ctx.qry.path);
 }
 
-static void diff_fn(struct cgit_context *ctx)
+static void diff_fn(void)
 {
-	cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1, 0);
+	cgit_print_diff(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1, 0);
 }
 
-static void rawdiff_fn(struct cgit_context *ctx)
+static void rawdiff_fn(void)
 {
-	cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1, 1);
+	cgit_print_diff(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1, 1);
 }
 
-static void info_fn(struct cgit_context *ctx)
+static void info_fn(void)
 {
-	cgit_clone_info(ctx);
+	cgit_clone_info();
 }
 
-static void log_fn(struct cgit_context *ctx)
+static void log_fn(void)
 {
-	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);
+	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(struct cgit_context *ctx)
+static void ls_cache_fn(void)
 {
-	ctx->page.mimetype = "text/plain";
-	ctx->page.filename = "ls-cache.txt";
+	ctx.page.mimetype = "text/plain";
+	ctx.page.filename = "ls-cache.txt";
 	cgit_print_http_headers();
-	cache_ls(ctx->cfg.cache_root);
+	cache_ls(ctx.cfg.cache_root);
 }
 
-static void objects_fn(struct cgit_context *ctx)
+static void objects_fn(void)
 {
-	cgit_clone_objects(ctx);
+	cgit_clone_objects();
 }
 
-static void repolist_fn(struct cgit_context *ctx)
+static void repolist_fn(void)
 {
 	cgit_print_repolist();
 }
 
-static void patch_fn(struct cgit_context *ctx)
+static void patch_fn(void)
 {
-	cgit_print_patch(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path);
+	cgit_print_patch(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path);
 }
 
-static void plain_fn(struct cgit_context *ctx)
+static void plain_fn(void)
 {
-	cgit_print_plain(ctx);
+	cgit_print_plain();
 }
 
-static void refs_fn(struct cgit_context *ctx)
+static void refs_fn(void)
 {
 	cgit_print_refs();
 }
 
-static void snapshot_fn(struct cgit_context *ctx)
+static void snapshot_fn(void)
 {
-	cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1, ctx->qry.path,
-			    ctx->repo->snapshots, 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(struct cgit_context *ctx)
+static void stats_fn(void)
 {
-	cgit_show_stats(ctx);
+	cgit_show_stats();
 }
 
-static void summary_fn(struct cgit_context *ctx)
+static void summary_fn(void)
 {
 	cgit_print_summary();
 }
 
-static void tag_fn(struct cgit_context *ctx)
+static void tag_fn(void)
 {
-	cgit_print_tag(ctx->qry.sha1);
+	cgit_print_tag(ctx.qry.sha1);
 }
 
-static void tree_fn(struct cgit_context *ctx)
+static void tree_fn(void)
 {
-	cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
+	cgit_print_tree(ctx.qry.sha1, ctx.qry.path);
 }
 
 #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(struct cgit_context *ctx)
+struct cgit_cmd *cgit_get_cmd(void)
 {
 	static struct cgit_cmd cmds[] = {
 		def_cmd(HEAD, 1, 0, 0, 1),
@@ -165,15 +165,15 @@ struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
 	};
 	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;
 }
diff --git a/cmd.h b/cmd.h
index eb5bc87..752f078 100644
--- a/cmd.h
+++ b/cmd.h
@@ -1,7 +1,7 @@
 #ifndef CMD_H
 #define CMD_H
 
-typedef void (*cgit_cmd_fn)(struct cgit_context *ctx);
+typedef void (*cgit_cmd_fn)(void);
 
 struct cgit_cmd {
 	const char *name;
@@ -12,6 +12,6 @@ struct cgit_cmd {
 		is_clone:1;
 };
 
-extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx);
+extern struct cgit_cmd *cgit_get_cmd(void);
 
 #endif /* CMD_H */
diff --git a/ui-clone.c b/ui-clone.c
index 09e2b46..d25553b 100644
--- a/ui-clone.c
+++ b/ui-clone.c
@@ -29,22 +29,22 @@ static int print_ref_info(const char *refname, const unsigned char *sha1,
 	return 0;
 }
 
-static void print_pack_info(struct cgit_context *ctx)
+static void print_pack_info(void)
 {
 	struct packed_git *pack;
 	int ofs;
 
-	ctx->page.mimetype = "text/plain";
-	ctx->page.filename = "objects/info/packs";
+	ctx.page.mimetype = "text/plain";
+	ctx.page.filename = "objects/info/packs";
 	cgit_print_http_headers();
-	ofs = strlen(ctx->repo->path) + strlen("/objects/pack/");
+	ofs = strlen(ctx.repo->path) + strlen("/objects/pack/");
 	prepare_packed_git();
 	for (pack = packed_git; pack; pack = pack->next)
 		if (pack->pack_local)
 			htmlf("P %s\n", pack->pack_name + ofs);
 }
 
-static void send_file(struct cgit_context *ctx, char *path)
+static void send_file(char *path)
 {
 	struct stat st;
 
@@ -61,41 +61,41 @@ static void send_file(struct cgit_context *ctx, char *path)
 		}
 		return;
 	}
-	ctx->page.mimetype = "application/octet-stream";
-	ctx->page.filename = path;
-	if (prefixcmp(ctx->repo->path, path))
-		ctx->page.filename += strlen(ctx->repo->path) + 1;
+	ctx.page.mimetype = "application/octet-stream";
+	ctx.page.filename = path;
+	if (prefixcmp(ctx.repo->path, path))
+		ctx.page.filename += strlen(ctx.repo->path) + 1;
 	cgit_print_http_headers();
 	html_include(path);
 }
 
-void cgit_clone_info(struct cgit_context *ctx)
+void cgit_clone_info(void)
 {
-	if (!ctx->qry.path || strcmp(ctx->qry.path, "refs"))
+	if (!ctx.qry.path || strcmp(ctx.qry.path, "refs"))
 		return;
 
-	ctx->page.mimetype = "text/plain";
-	ctx->page.filename = "info/refs";
+	ctx.page.mimetype = "text/plain";
+	ctx.page.filename = "info/refs";
 	cgit_print_http_headers();
-	for_each_ref(print_ref_info, ctx);
+	for_each_ref(print_ref_info, NULL);
 }
 
-void cgit_clone_objects(struct cgit_context *ctx)
+void cgit_clone_objects(void)
 {
-	if (!ctx->qry.path) {
+	if (!ctx.qry.path) {
 		html_status(400, "Bad request", 0);
 		return;
 	}
 
-	if (!strcmp(ctx->qry.path, "info/packs")) {
-		print_pack_info(ctx);
+	if (!strcmp(ctx.qry.path, "info/packs")) {
+		print_pack_info();
 		return;
 	}
 
-	send_file(ctx, git_path("objects/%s", ctx->qry.path));
+	send_file(git_path("objects/%s", ctx.qry.path));
 }
 
-void cgit_clone_head(struct cgit_context *ctx)
+void cgit_clone_head(void)
 {
-	send_file(ctx, git_path("%s", "HEAD"));
+	send_file(git_path("%s", "HEAD"));
 }
diff --git a/ui-clone.h b/ui-clone.h
index 89cd4f1..3e460a3 100644
--- a/ui-clone.h
+++ b/ui-clone.h
@@ -1,8 +1,8 @@
 #ifndef UI_CLONE_H
 #define UI_CLONE_H
 
-void cgit_clone_info(struct cgit_context *ctx);
-void cgit_clone_objects(struct cgit_context *ctx);
-void cgit_clone_head(struct cgit_context *ctx);
+void cgit_clone_info(void);
+void cgit_clone_objects(void);
+void cgit_clone_head(void);
 
 #endif /* UI_CLONE_H */
diff --git a/ui-plain.c b/ui-plain.c
index 8909d30..30fff89 100644
--- a/ui-plain.c
+++ b/ui-plain.c
@@ -206,14 +206,14 @@ static int basedir_len(const char *path)
 	return 0;
 }
 
-void cgit_print_plain(struct cgit_context *ctx)
+void cgit_print_plain(void)
 {
-	const char *rev = ctx->qry.sha1;
+	const char *rev = ctx.qry.sha1;
 	unsigned char sha1[20];
 	struct commit *commit;
 	struct pathspec_item path_items = {
-		.match = ctx->qry.path,
-		.len = ctx->qry.path ? strlen(ctx->qry.path) : 0
+		.match = ctx.qry.path,
+		.len = ctx.qry.path ? strlen(ctx.qry.path) : 0
 	};
 	struct pathspec paths = {
 		.nr = 1,
@@ -224,7 +224,7 @@ void cgit_print_plain(struct cgit_context *ctx)
 	};
 
 	if (!rev)
-		rev = ctx->qry.head;
+		rev = ctx.qry.head;
 
 	if (get_sha1(rev, sha1)) {
 		html_status(404, "Not found", 0);
diff --git a/ui-plain.h b/ui-plain.h
index 4373118..5bff07b 100644
--- a/ui-plain.h
+++ b/ui-plain.h
@@ -1,6 +1,6 @@
 #ifndef UI_PLAIN_H
 #define UI_PLAIN_H
 
-extern void cgit_print_plain(struct cgit_context *ctx);
+extern void cgit_print_plain(void);
 
 #endif /* UI_PLAIN_H */
diff --git a/ui-stats.c b/ui-stats.c
index 84b247c..bc27308 100644
--- a/ui-stats.c
+++ b/ui-stats.c
@@ -209,13 +209,12 @@ static int cmp_total_commits(const void *a1, const void *a2)
 /* Walk the commit DAG and collect number of commits per author per
  * timeperiod into a nested string_list collection.
  */
-static struct string_list collect_stats(struct cgit_context *ctx,
-					struct cgit_period *period)
+static struct string_list collect_stats(struct cgit_period *period)
 {
 	struct string_list authors;
 	struct rev_info rev;
 	struct commit *commit;
-	const char *argv[] = {NULL, ctx->qry.head, NULL, NULL, NULL, NULL};
+	const char *argv[] = {NULL, ctx.qry.head, NULL, NULL, NULL, NULL};
 	int argc = 3;
 	time_t now;
 	long i;
@@ -229,9 +228,9 @@ static struct string_list collect_stats(struct cgit_context *ctx,
 		period->dec(tm);
 	strftime(tmp, sizeof(tmp), "%Y-%m-%d", tm);
 	argv[2] = xstrdup(fmt("--since=%s", tmp));
-	if (ctx->qry.path) {
+	if (ctx.qry.path) {
 		argv[3] = "--";
-		argv[4] = ctx->qry.path;
+		argv[4] = ctx.qry.path;
 		argc += 2;
 	}
 	init_revisions(&rev, NULL);
@@ -360,30 +359,30 @@ static void print_authors(struct string_list *authors, int top,
  * for each author is another string_list which is used to calculate the
  * number of commits per time-interval.
  */
-void cgit_show_stats(struct cgit_context *ctx)
+void cgit_show_stats(void)
 {
 	struct string_list authors;
 	struct cgit_period *period;
 	int top, i;
 	const char *code = "w";
 
-	if (ctx->qry.period)
-		code = ctx->qry.period;
+	if (ctx.qry.period)
+		code = ctx.qry.period;
 
 	i = cgit_find_stats_period(code, &period);
 	if (!i) {
 		cgit_print_error("Unknown statistics type: %c", code[0]);
 		return;
 	}
-	if (i > ctx->repo->max_stats) {
+	if (i > ctx.repo->max_stats) {
 		cgit_print_error("Statistics type disabled: %s", period->name);
 		return;
 	}
-	authors = collect_stats(ctx, period);
+	authors = collect_stats(period);
 	qsort(authors.items, authors.nr, sizeof(struct string_list_item),
 		cmp_total_commits);
 
-	top = ctx->qry.ofs;
+	top = ctx.qry.ofs;
 	if (!top)
 		top = 10;
 
@@ -392,10 +391,10 @@ void cgit_show_stats(struct cgit_context *ctx)
 	html("<form method='get' action=''>");
 	cgit_add_hidden_formfields(1, 0, "stats");
 	html("<table><tr><td colspan='2'/></tr>");
-	if (ctx->repo->max_stats > 1) {
+	if (ctx.repo->max_stats > 1) {
 		html("<tr><td class='label'>Period:</td>");
 		html("<td class='ctrl'><select name='period' onchange='this.form.submit();'>");
-		for (i = 0; i < ctx->repo->max_stats; i++)
+		for (i = 0; i < ctx.repo->max_stats; i++)
 			html_option(fmt("%c", periods[i].code),
 				    periods[i].name, fmt("%c", period->code));
 		html("</select></td></tr>");
@@ -414,9 +413,9 @@ void cgit_show_stats(struct cgit_context *ctx)
 	html("</form>");
 	html("</div>");
 	htmlf("<h2>Commits per author per %s", period->name);
-	if (ctx->qry.path) {
+	if (ctx.qry.path) {
 		html(" (path '");
-		html_txt(ctx->qry.path);
+		html_txt(ctx.qry.path);
 		html("')");
 	}
 	html("</h2>");
diff --git a/ui-stats.h b/ui-stats.h
index f0761ba..341ab13 100644
--- a/ui-stats.h
+++ b/ui-stats.h
@@ -23,6 +23,6 @@ struct cgit_period {
 extern int cgit_find_stats_period(const char *expr, struct cgit_period **period);
 extern const char *cgit_find_stats_periodname(int idx);
 
-extern void cgit_show_stats(struct cgit_context *ctx);
+extern void cgit_show_stats(void);
 
 #endif /* UI_STATS_H */
-- 
1.8.5.2



More information about the CGit mailing list