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>
This commit is contained in:
John Keeping 2014-10-05 10:59:04 +01:00 committed by Lukas Fleischer
parent 03f537f1a1
commit 1830271c59
4 changed files with 24 additions and 14 deletions

12
cgit.c
View File

@ -237,7 +237,7 @@ static void config_cb(const char *name, const char *value)
else if (!strcmp(name, "summary-tags")) else if (!strcmp(name, "summary-tags"))
ctx.cfg.summary_tags = atoi(value); ctx.cfg.summary_tags = atoi(value);
else if (!strcmp(name, "side-by-side-diffs")) 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")) else if (!strcmp(name, "agefile"))
ctx.cfg.agefile = xstrdup(value); ctx.cfg.agefile = xstrdup(value);
else if (!strcmp(name, "mimetype-file")) else if (!strcmp(name, "mimetype-file"))
@ -312,9 +312,13 @@ static void querystring_cb(const char *name, const char *value)
ctx.qry.showmsg = atoi(value); ctx.qry.showmsg = atoi(value);
} else if (!strcmp(name, "period")) { } else if (!strcmp(name, "period")) {
ctx.qry.period = xstrdup(value); 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")) { } else if (!strcmp(name, "ss")) {
ctx.qry.ssdiff = atoi(value); /* No longer generated, but there may be links out there. */
ctx.qry.has_ssdiff = 1; ctx.qry.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED;
ctx.qry.has_difftype = 1;
} else if (!strcmp(name, "all")) { } else if (!strcmp(name, "all")) {
ctx.qry.show_all = atoi(value); ctx.qry.show_all = atoi(value);
} else if (!strcmp(name, "context")) { } else if (!strcmp(name, "context")) {
@ -372,7 +376,7 @@ static void prepare_context(void)
ctx.cfg.summary_log = 10; ctx.cfg.summary_log = 10;
ctx.cfg.summary_tags = 10; ctx.cfg.summary_tags = 10;
ctx.cfg.max_atom_items = 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.cgit_config = getenv("CGIT_CONFIG");
ctx.env.http_host = getenv("HTTP_HOST"); ctx.env.http_host = getenv("HTTP_HOST");
ctx.env.https = getenv("HTTPS"); ctx.env.https = getenv("HTTPS");

10
cgit.h
View File

@ -52,6 +52,10 @@ typedef void (*configfn)(const char *name, const char *value);
typedef void (*filepair_fn)(struct diff_filepair *pair); typedef void (*filepair_fn)(struct diff_filepair *pair);
typedef void (*linediff_fn)(char *line, int len); typedef void (*linediff_fn)(char *line, int len);
typedef enum {
DIFF_UNIFIED, DIFF_SSDIFF
} diff_type;
typedef enum { typedef enum {
ABOUT, COMMIT, SOURCE, EMAIL, AUTH ABOUT, COMMIT, SOURCE, EMAIL, AUTH
} filter_type; } filter_type;
@ -150,7 +154,7 @@ struct reflist {
struct cgit_query { struct cgit_query {
int has_symref; int has_symref;
int has_sha1; int has_sha1;
int has_ssdiff; int has_difftype;
char *raw; char *raw;
char *repo; char *repo;
char *page; char *page;
@ -168,7 +172,7 @@ struct cgit_query {
int nohead; int nohead;
char *sort; char *sort;
int showmsg; int showmsg;
int ssdiff; diff_type difftype;
int show_all; int show_all;
int context; int context;
int ignorews; int ignorews;
@ -245,7 +249,7 @@ struct cgit_config {
int summary_branches; int summary_branches;
int summary_log; int summary_log;
int summary_tags; int summary_tags;
int ssdiff; diff_type difftype;
int branch_sort; int branch_sort;
int commit_sort; int commit_sort;
struct string_list mimetypes; struct string_list mimetypes;

View File

@ -345,8 +345,8 @@ void cgit_print_diff_ctrls()
html("</tr><tr>"); html("</tr><tr>");
html("<td class='label'>mode:</td>"); html("<td class='label'>mode:</td>");
html("<td class='ctrl'>"); html("<td class='ctrl'>");
html("<select name='ss' onchange='this.form.submit();'>"); html("<select name='dt' onchange='this.form.submit();'>");
curr = ctx.qry.has_ssdiff ? ctx.qry.ssdiff : ctx.cfg.ssdiff; curr = ctx.qry.has_difftype ? ctx.qry.difftype : ctx.cfg.difftype;
html_intoption(0, "unified", curr); html_intoption(0, "unified", curr);
html_intoption(1, "ssdiff", curr); html_intoption(1, "ssdiff", curr);
html("</select></td></tr>"); html("</select></td></tr>");
@ -362,6 +362,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev,
{ {
struct commit *commit, *commit2; struct commit *commit, *commit2;
const unsigned char *old_tree_sha1, *new_tree_sha1; const unsigned char *old_tree_sha1, *new_tree_sha1;
diff_type difftype;
if (!new_rev) if (!new_rev)
new_rev = ctx.qry.head; new_rev = ctx.qry.head;
@ -420,7 +421,8 @@ void cgit_print_diff(const char *new_rev, const char *old_rev,
return; 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) if (show_ctrls)
cgit_print_diff_ctrls(); cgit_print_diff_ctrls();

View File

@ -346,9 +346,9 @@ void cgit_commit_link(char *name, const char *title, const char *class,
html_url_arg(rev); html_url_arg(rev);
delim = "&amp;"; delim = "&amp;";
} }
if (ctx.qry.ssdiff) { if (ctx.qry.difftype) {
html(delim); html(delim);
html("ss=1"); htmlf("dt=%d", ctx.qry.difftype);
delim = "&amp;"; delim = "&amp;";
} }
if (ctx.qry.context > 0 && ctx.qry.context != 3) { if (ctx.qry.context > 0 && ctx.qry.context != 3) {
@ -402,9 +402,9 @@ void cgit_diff_link(const char *name, const char *title, const char *class,
html_url_arg(old_rev); html_url_arg(old_rev);
delim = "&amp;"; delim = "&amp;";
} }
if (ctx.qry.ssdiff) { if (ctx.qry.difftype) {
html(delim); html(delim);
html("ss=1"); htmlf("dt=%d", ctx.qry.difftype);
delim = "&amp;"; delim = "&amp;";
} }
if (ctx.qry.context > 0 && ctx.qry.context != 3) { if (ctx.qry.context > 0 && ctx.qry.context != 3) {