Download raw body.
fix tog diff view with "Binary files differ"
When a diff contains a line of the form: Binary files A and B differ then scrolling across that line with tog can mess up the display. In cases I have observed, the first two lines of the tog diff view change from something like this: [22/81] diff $commithash1 $commithash2 Binary files a/b/c and d/e/f differ blob - $blob_hash1 To this after scrolling down one line: [23/81] diff $commithash1 $commithash2 /e/f differ blob - $blob_hash1 Scrolling down further now has a funny effect where the first line of the display keeps showing a portion of the former line. The reason for this is in the diff code. This code is supposed to mark the offset of every line written to the diff output, but we forget to do this in case we print a "Binary files differ" style line. The patch below fixes the problem. ok? (As usual for files derived from diff.git, I would commit this change to diff.git first and then sync it to got.git) diff dbe266a4450f73d753bf746c8343ca4c7dc41d18 /home/stsp/src/got blob - 5fc87f7b15b8e6a3c41ccc01901815d9d52b741a file + lib/diff_output_unidiff.c --- lib/diff_output_unidiff.c +++ lib/diff_output_unidiff.c @@ -425,7 +425,8 @@ diff_output_unidiff(struct diff_output_info **output_i bool show_function_prototypes = (flags & DIFF_FLAG_SHOW_PROTOTYPES); bool force_text = (flags & DIFF_FLAG_FORCE_TEXT_DATA); bool have_binary = (atomizer_flags & DIFF_ATOMIZER_FOUND_BINARY_DATA); - int i; + off_t outoff = 0, *offp; + int rc, i; if (!result) return EINVAL; @@ -447,9 +448,23 @@ diff_output_unidiff(struct diff_output_info **output_i if (t != CHUNK_MINUS && t != CHUNK_PLUS) continue; - fprintf(dest, "Binary files %s and %s differ\n", + if (outinfo && outinfo->line_offsets.len > 0) { + unsigned int idx = + outinfo->line_offsets.len - 1; + outoff = outinfo->line_offsets.head[idx]; + } + + rc = fprintf(dest, "Binary files %s and %s differ\n", diff_output_get_label_left(info), diff_output_get_label_right(info)); + if (outinfo) { + ARRAYLIST_ADD(offp, outinfo->line_offsets); + if (offp == NULL) + return ENOMEM; + outoff += rc; + *offp = outoff; + + } break; }
fix tog diff view with "Binary files differ"