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'.
Unified · Split
| @@ -252,6 +252,8 @@ static void querystring_cb(const char *name, const char *value) · 251 unmodified lines | ||
| 252 | 252 | ctx.qry.ssdiff = atoi(value); |
| 253 | 253 | } else if (!strcmp(name, "context")) { |
| 254 | 254 | ctx.qry.context = atoi(value); |
| 255 | + } else if (!strcmp(name, "ignorews")) { | |
| 256 | + ctx.qry.ignorews = atoi(value); | |
| 255 | 257 | } |
| 256 | 258 | } |
| 257 | 259 | |
| @@ -146,6 +146,7 @@ struct cgit_query { · 145 unmodified lines | ||
| 146 | 146 | int showmsg; |
| 147 | 147 | int ssdiff; |
| 148 | 148 | int context; |
| 149 | + int ignorews; | |
| 149 | 150 | char *vpath; |
| 150 | 151 | }; |
| 151 | 152 | |
| @@ -275,11 +276,12 @@ extern void *cgit_free_commitinfo(struct commitinfo *info); · 123 unmodified lines | ||
| 275 | 276 | extern int cgit_diff_files(const unsigned char *old_sha1, |
| 276 | 277 | const unsigned char *new_sha1, |
| 277 | 278 | 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); | |
| 279 | 281 | |
| 280 | 282 | extern void cgit_diff_tree(const unsigned char *old_sha1, |
| 281 | 283 | const unsigned char *new_sha1, |
| 282 | − filepair_fn fn, const char *prefix); | |
| 284 | + filepair_fn fn, const char *prefix, int ignorews); | |
| 283 | 285 | |
| 284 | 286 | extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); |
| 285 | 287 | |
| @@ -263,7 +263,7 @@ int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf) · 262 unmodified lines | ||
| 263 | 263 | int cgit_diff_files(const unsigned char *old_sha1, |
| 264 | 264 | const unsigned char *new_sha1, unsigned long *old_size, |
| 265 | 265 | unsigned long *new_size, int *binary, int context, |
| 266 | − linediff_fn fn) | |
| 266 | + int ignorews, linediff_fn fn) | |
| 267 | 267 | { |
| 268 | 268 | mmfile_t file1, file2; |
| 269 | 269 | xpparam_t diff_params; |
| @@ -286,6 +286,8 @@ int cgit_diff_files(const unsigned char *old_sha1, · 16 unmodified lines | ||
| 286 | 286 | memset(&emit_params, 0, sizeof(emit_params)); |
| 287 | 287 | memset(&emit_cb, 0, sizeof(emit_cb)); |
| 288 | 288 | diff_params.flags = XDF_NEED_MINIMAL; |
| 289 | + if (ignorews) | |
| 290 | + diff_params.flags |= XDF_IGNORE_WHITESPACE; | |
| 289 | 291 | emit_params.ctxlen = context > 0 ? context : 3; |
| 290 | 292 | emit_params.flags = XDL_EMIT_FUNCNAMES; |
| 291 | 293 | emit_cb.outf = filediff_cb; |
| @@ -296,7 +298,7 @@ int cgit_diff_files(const unsigned char *old_sha1, · 4 unmodified lines | ||
| 296 | 298 | |
| 297 | 299 | void cgit_diff_tree(const unsigned char *old_sha1, |
| 298 | 300 | const unsigned char *new_sha1, |
| 299 | − filepair_fn fn, const char *prefix) | |
| 301 | + filepair_fn fn, const char *prefix, int ignorews) | |
| 300 | 302 | { |
| 301 | 303 | struct diff_options opt; |
| 302 | 304 | int ret; |
| @@ -307,6 +309,8 @@ void cgit_diff_tree(const unsigned char *old_sha1, · 4 unmodified lines | ||
| 307 | 309 | opt.detect_rename = 1; |
| 308 | 310 | opt.rename_limit = ctx.cfg.renamelimit; |
| 309 | 311 | DIFF_OPT_SET(&opt, RECURSIVE); |
| 312 | + if (ignorews) | |
| 313 | + DIFF_XDL_SET(&opt, IGNORE_WHITESPACE); | |
| 310 | 314 | opt.format_callback = cgit_diff_tree_cb; |
| 311 | 315 | opt.format_callback_data = fn; |
| 312 | 316 | if (prefix) { |
| @@ -331,7 +335,8 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn) · 18 unmodified lines | ||
| 331 | 335 | |
| 332 | 336 | if (commit->parents) |
| 333 | 337 | 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); | |
| 335 | 340 | } |
| 336 | 341 | |
| 337 | 342 | int cgit_parse_snapshots_mask(const char *str) |
| @@ -127,7 +127,7 @@ static void inspect_filepair(struct diff_filepair *pair) · 126 unmodified lines | ||
| 127 | 127 | lines_added = 0; |
| 128 | 128 | lines_removed = 0; |
| 129 | 129 | 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); | |
| 131 | 131 | if (files >= slots) { |
| 132 | 132 | if (slots == 0) |
| 133 | 133 | slots = 4; |
| @@ -174,7 +174,8 @@ void cgit_print_diffstat(const unsigned char *old_sha1, · 40 unmodified lines | ||
| 174 | 174 | html("</div>"); |
| 175 | 175 | html("<table summary='diffstat' class='diffstat'>"); |
| 176 | 176 | 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); | |
| 178 | 179 | for(i = 0; i<files; i++) |
| 179 | 180 | print_fileinfo(&items[i]); |
| 180 | 181 | html("</table>"); |
| @@ -296,7 +297,8 @@ static void filepair_cb(struct diff_filepair *pair) · 115 unmodified lines | ||
| 296 | 297 | return; |
| 297 | 298 | } |
| 298 | 299 | 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)) | |
| 300 | 302 | cgit_print_error("Error running diff"); |
| 301 | 303 | if (binary) { |
| 302 | 304 | 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 | ||
| 356 | 358 | html("<table summary='diff' class='diff'>"); |
| 357 | 359 | html("<tr><td>"); |
| 358 | 360 | } |
| 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); | |
| 360 | 363 | if (!use_ssdiff) |
| 361 | 364 | html("</td></tr>"); |
| 362 | 365 | html("</table>"); |
| @@ -33,7 +33,8 @@ void inspect_files(struct diff_filepair *pair) · 32 unmodified lines | ||
| 33 | 33 | files++; |
| 34 | 34 | if (ctx.repo->enable_log_linecount) |
| 35 | 35 | 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); | |
| 37 | 38 | } |
| 38 | 39 | |
| 39 | 40 | void show_commit_decorations(struct commit *commit) |
| @@ -71,7 +71,7 @@ static void filepair_cb(struct diff_filepair *pair) · 70 unmodified lines | ||
| 71 | 71 | return; |
| 72 | 72 | } |
| 73 | 73 | 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)) | |
| 75 | 75 | html("Error running diff"); |
| 76 | 76 | if (binary) |
| 77 | 77 | html("Binary files differ\n"); |
| @@ -124,7 +124,7 @@ void cgit_print_patch(char *hex, const char *prefix) · 46 unmodified lines | ||
| 124 | 124 | html("---\n"); |
| 125 | 125 | if (prefix) |
| 126 | 126 | 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); | |
| 128 | 128 | html("--\n"); |
| 129 | 129 | htmlf("cgit %s\n", CGIT_VERSION); |
| 130 | 130 | cgit_free_commitinfo(info); |