cgit

commit 1830271c5958526425f92ae2b369646b54e3c370

Author: John Keeping <john@keeping.me.uk>

Change "ss" diff flag to an enum

This will allow us to introduce a new "stat only" diff mode without
needing an explosion of mutually incompatible flags.

The old "ss" query parameter is still accepted in order to avoid
breaking saved links, but we no longer generate any URIs using it;
instead the new "dt" (diff type) parameter is used.

Signed-off-by: John Keeping <john@keeping.me.uk>

 cgit.c | 12 ++++++++----
 cgit.h | 10 +++++++---
 ui-diff.c | 8 +++++---
 ui-shared.c | 8 ++++----


diff --git a/cgit.c b/cgit.c
index 8c4517d8e70554e02ac3cdaf8a246f2dad9dbfe0..db60107e7c2839fbad98a688db803cfb13602bca 100644
--- a/cgit.c
+++ b/cgit.c
@@ -237,7 +237,7 @@ 		ctx.cfg.summary_branches = atoi(value);
 	else if (!strcmp(name, "summary-tags"))
 		ctx.cfg.summary_tags = atoi(value);
 	else if (!strcmp(name, "side-by-side-diffs"))
-		ctx.cfg.ssdiff = atoi(value);
+		ctx.cfg.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED;
 	else if (!strcmp(name, "agefile"))
 		ctx.cfg.agefile = xstrdup(value);
 	else if (!strcmp(name, "mimetype-file"))
@@ -312,9 +312,13 @@ 	} else if (!strcmp(name, "showmsg")) {
 		ctx.qry.showmsg = atoi(value);
 	} else if (!strcmp(name, "period")) {
 		ctx.qry.period = xstrdup(value);
+	} else if (!strcmp(name, "dt")) {
+		ctx.qry.difftype = atoi(value);
+		ctx.qry.has_difftype = 1;
 	} else if (!strcmp(name, "ss")) {
-		ctx.qry.ssdiff = atoi(value);
-		ctx.qry.has_ssdiff = 1;
+		/* No longer generated, but there may be links out there. */
+		ctx.qry.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED;
+		ctx.qry.has_difftype = 1;
 	} else if (!strcmp(name, "all")) {
 		ctx.qry.show_all = atoi(value);
 	} else if (!strcmp(name, "context")) {
@@ -372,7 +376,7 @@ 	ctx.cfg.summary_branches = 10;
 	ctx.cfg.summary_log = 10;
 	ctx.cfg.summary_tags = 10;
 	ctx.cfg.max_atom_items = 10;
-	ctx.cfg.ssdiff = 0;
+	ctx.cfg.difftype = DIFF_UNIFIED;
 	ctx.env.cgit_config = getenv("CGIT_CONFIG");
 	ctx.env.http_host = getenv("HTTP_HOST");
 	ctx.env.https = getenv("HTTPS");




diff --git a/cgit.h b/cgit.h
index 0badc642ec65c9b4166afe8952cd04b4322fa3c3..0eb5ed5a4e6f10beeb4ce79519f78f08a15d2343 100644
--- a/cgit.h
+++ b/cgit.h
@@ -53,6 +53,10 @@ typedef void (*filepair_fn)(struct diff_filepair *pair);
 typedef void (*linediff_fn)(char *line, int len);
 
 typedef enum {
+	DIFF_UNIFIED, DIFF_SSDIFF
+} diff_type;
+
+typedef enum {
 	ABOUT, COMMIT, SOURCE, EMAIL, AUTH
 } filter_type;
 
@@ -150,7 +154,7 @@
 struct cgit_query {
 	int has_symref;
 	int has_sha1;
-	int has_ssdiff;
+	int has_difftype;
 	char *raw;
 	char *repo;
 	char *page;
@@ -168,7 +172,7 @@ 	int   ofs;
 	int nohead;
 	char *sort;
 	int showmsg;
-	int ssdiff;
+	diff_type difftype;
 	int show_all;
 	int context;
 	int ignorews;
@@ -245,7 +249,7 @@ 	int section_sort;
 	int summary_branches;
 	int summary_log;
 	int summary_tags;
-	int ssdiff;
+	diff_type difftype;
 	int branch_sort;
 	int commit_sort;
 	struct string_list mimetypes;




diff --git a/ui-diff.c b/ui-diff.c
index 49bd7480c573df06c41abb9d305d1ae8ac3e459c..a4ade4dd2e032c215c24355f66fb7afd159cf55f 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -345,8 +345,8 @@ 	html("");
 	html("</tr><tr>");
 	html("<td class='label'>mode:</td>");
 	html("<td class='ctrl'>");
-	html("<select name='ss' onchange='this.form.submit();'>");
-	curr = ctx.qry.has_ssdiff ? ctx.qry.ssdiff : ctx.cfg.ssdiff;
+	html("<select name='dt' onchange='this.form.submit();'>");
+	curr = ctx.qry.has_difftype ? ctx.qry.difftype : ctx.cfg.difftype;
 	html_intoption(0, "unified", curr);
 	html_intoption(1, "ssdiff", curr);
 	html("</select></td></tr>");
@@ -362,6 +362,7 @@ 		     const char *prefix, int show_ctrls, int raw)
 {
 	struct commit *commit, *commit2;
 	const unsigned char *old_tree_sha1, *new_tree_sha1;
+	diff_type difftype;
 
 	if (!new_rev)
 		new_rev = ctx.qry.head;
@@ -420,7 +421,8 @@
 		return;
 	}
 
-	use_ssdiff = ctx.qry.has_ssdiff ? ctx.qry.ssdiff : ctx.cfg.ssdiff;
+	difftype = ctx.qry.has_difftype ? ctx.qry.difftype : ctx.cfg.difftype;
+	use_ssdiff = difftype == DIFF_SSDIFF;
 
 	if (show_ctrls)
 		cgit_print_diff_ctrls();




diff --git a/ui-shared.c b/ui-shared.c
index 68e0d7cdf40c2573a532af1e80a109106b90b485..6243d1b1abb357c285c1665e55aef63541a91f1e 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -346,9 +346,9 @@ 		html("id=");
 		html_url_arg(rev);
 		delim = "&amp;";
 	}
-	if (ctx.qry.ssdiff) {
+	if (ctx.qry.difftype) {
 		html(delim);
-		html("ss=1");
+		htmlf("dt=%d", ctx.qry.difftype);
 		delim = "&amp;";
 	}
 	if (ctx.qry.context > 0 && ctx.qry.context != 3) {
@@ -402,9 +402,9 @@ 		html("id2=");
 		html_url_arg(old_rev);
 		delim = "&amp;";
 	}
-	if (ctx.qry.ssdiff) {
+	if (ctx.qry.difftype) {
 		html(delim);
-		html("ss=1");
+		htmlf("dt=%d", ctx.qry.difftype);
 		delim = "&amp;";
 	}
 	if (ctx.qry.context > 0 && ctx.qry.context != 3) {