History

Add URL parameter 'ignorews' for optionally ignoring whitespace in diffs

The new ctx.qry.ignorews variable is passed via cgit_diff_files() and cgit_diff_tree() to Git's diff machinery. This is equivalent to passing --ignore-all-space to 'git diff'.

Johan Herland committed 16 years ago

Commit 2cc8b991 parent d20313e6 files · +25 −12Browse files

Unified · Split

6 files
  1. cgit.c +2 −0
  2. cgit.h +4 −2
  3. shared.c +8 −3
  4. ui-diff.c +7 −4
  5. ui-log.c +2 −1
  6. ui-patch.c +2 −2
cgit.c+2−0
@@ -252,6 +252,8 @@ static void querystring_cb(const char *name, const char *value) · 251 unmodified lines
252252 ctx.qry.ssdiff = atoi(value);
253253 } else if (!strcmp(name, "context")) {
254254 ctx.qry.context = atoi(value);
255+ } else if (!strcmp(name, "ignorews")) {
256+ ctx.qry.ignorews = atoi(value);
255257 }
256258 }
257259
cgit.h+4−2
@@ -146,6 +146,7 @@ struct cgit_query { · 145 unmodified lines
146146 int showmsg;
147147 int ssdiff;
148148 int context;
149+ int ignorews;
149150 char *vpath;
150151 };
151152
@@ -275,11 +276,12 @@ extern void *cgit_free_commitinfo(struct commitinfo *info); · 123 unmodified lines
275276 extern int cgit_diff_files(const unsigned char *old_sha1,
276277 const unsigned char *new_sha1,
277278 unsigned long *old_size, unsigned long *new_size,
278− int *binary, int context, linediff_fn fn);
279+ int *binary, int context, int ignorews,
280+ linediff_fn fn);
279281
280282 extern void cgit_diff_tree(const unsigned char *old_sha1,
281283 const unsigned char *new_sha1,
282− filepair_fn fn, const char *prefix);
284+ filepair_fn fn, const char *prefix, int ignorews);
283285
284286 extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
285287
shared.c+8−3
@@ -263,7 +263,7 @@ int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf) · 262 unmodified lines
263263 int cgit_diff_files(const unsigned char *old_sha1,
264264 const unsigned char *new_sha1, unsigned long *old_size,
265265 unsigned long *new_size, int *binary, int context,
266− linediff_fn fn)
266+ int ignorews, linediff_fn fn)
267267 {
268268 mmfile_t file1, file2;
269269 xpparam_t diff_params;
@@ -286,6 +286,8 @@ int cgit_diff_files(const unsigned char *old_sha1, · 16 unmodified lines
286286 memset(&emit_params, 0, sizeof(emit_params));
287287 memset(&emit_cb, 0, sizeof(emit_cb));
288288 diff_params.flags = XDF_NEED_MINIMAL;
289+ if (ignorews)
290+ diff_params.flags |= XDF_IGNORE_WHITESPACE;
289291 emit_params.ctxlen = context > 0 ? context : 3;
290292 emit_params.flags = XDL_EMIT_FUNCNAMES;
291293 emit_cb.outf = filediff_cb;
@@ -296,7 +298,7 @@ int cgit_diff_files(const unsigned char *old_sha1, · 4 unmodified lines
296298
297299 void cgit_diff_tree(const unsigned char *old_sha1,
298300 const unsigned char *new_sha1,
299− filepair_fn fn, const char *prefix)
301+ filepair_fn fn, const char *prefix, int ignorews)
300302 {
301303 struct diff_options opt;
302304 int ret;
@@ -307,6 +309,8 @@ void cgit_diff_tree(const unsigned char *old_sha1, · 4 unmodified lines
307309 opt.detect_rename = 1;
308310 opt.rename_limit = ctx.cfg.renamelimit;
309311 DIFF_OPT_SET(&opt, RECURSIVE);
312+ if (ignorews)
313+ DIFF_XDL_SET(&opt, IGNORE_WHITESPACE);
310314 opt.format_callback = cgit_diff_tree_cb;
311315 opt.format_callback_data = fn;
312316 if (prefix) {
@@ -331,7 +335,8 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn) · 18 unmodified lines
331335
332336 if (commit->parents)
333337 old_sha1 = commit->parents->item->object.sha1;
334− cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL);
338+ cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL,
339+ ctx.qry.ignorews);
335340 }
336341
337342 int cgit_parse_snapshots_mask(const char *str)
ui-diff.c+7−4
@@ -127,7 +127,7 @@ static void inspect_filepair(struct diff_filepair *pair) · 126 unmodified lines
127127 lines_added = 0;
128128 lines_removed = 0;
129129 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, &new_size,
130− &binary, 0, count_diff_lines);
130+ &binary, 0, ctx.qry.ignorews, count_diff_lines);
131131 if (files >= slots) {
132132 if (slots == 0)
133133 slots = 4;
@@ -174,7 +174,8 @@ void cgit_print_diffstat(const unsigned char *old_sha1, · 40 unmodified lines
174174 html("</div>");
175175 html("<table summary='diffstat' class='diffstat'>");
176176 max_changes = 0;
177− cgit_diff_tree(old_sha1, new_sha1, inspect_filepair, prefix);
177+ cgit_diff_tree(old_sha1, new_sha1, inspect_filepair, prefix,
178+ ctx.qry.ignorews);
178179 for(i = 0; i<files; i++)
179180 print_fileinfo(&items[i]);
180181 html("</table>");
@@ -296,7 +297,8 @@ static void filepair_cb(struct diff_filepair *pair) · 115 unmodified lines
296297 return;
297298 }
298299 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
299− &new_size, &binary, ctx.qry.context, print_line_fn))
300+ &new_size, &binary, ctx.qry.context,
301+ ctx.qry.ignorews, print_line_fn))
300302 cgit_print_error("Error running diff");
301303 if (binary) {
302304 if (use_ssdiff)
@@ -356,7 +358,8 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi · 53 unmodified lines
356358 html("<table summary='diff' class='diff'>");
357359 html("<tr><td>");
358360 }
359− cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix);
361+ cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix,
362+ ctx.qry.ignorews);
360363 if (!use_ssdiff)
361364 html("</td></tr>");
362365 html("</table>");
ui-log.c+2−1
@@ -33,7 +33,8 @@ void inspect_files(struct diff_filepair *pair) · 32 unmodified lines
3333 files++;
3434 if (ctx.repo->enable_log_linecount)
3535 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
36− &new_size, &binary, 0, count_lines);
36+ &new_size, &binary, 0, ctx.qry.ignorews,
37+ count_lines);
3738 }
3839
3940 void show_commit_decorations(struct commit *commit)
ui-patch.c+2−2
@@ -71,7 +71,7 @@ static void filepair_cb(struct diff_filepair *pair) · 70 unmodified lines
7171 return;
7272 }
7373 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
74− &new_size, &binary, 0, print_line))
74+ &new_size, &binary, 0, 0, print_line))
7575 html("Error running diff");
7676 if (binary)
7777 html("Binary files differ\n");
@@ -124,7 +124,7 @@ void cgit_print_patch(char *hex, const char *prefix) · 46 unmodified lines
124124 html("---\n");
125125 if (prefix)
126126 htmlf("(limited to '%s')\n\n", prefix);
127− cgit_diff_tree(old_sha1, sha1, filepair_cb, prefix);
127+ cgit_diff_tree(old_sha1, sha1, filepair_cb, prefix, 0);
128128 html("--\n");
129129 htmlf("cgit %s\n", CGIT_VERSION);
130130 cgit_free_commitinfo(info);