commit - 05b5f01fe731ec1197dbb90d6b0c98cd7dd3b465
commit + f374e91343146fc0584d53f4b767a3ebfe7bc49e
blob - 51cb9c7966c778bceaaaf06691252cd4887e5e63
blob + 04a49ba79b9040e95c57a38b6aea04ef38ad3fde
--- include/diff/diff_output.h
+++ include/diff/diff_output.h
const char *right_path;
};
+struct diff_chunk_context {
+ struct diff_range chunk;
+ struct diff_range left, right;
+};
+
int diff_output_plain(FILE *dest, const struct diff_input_info *info,
const struct diff_result *result);
int diff_output_unidiff(FILE *dest, const struct diff_input_info *info,
const struct diff_result *result,
unsigned int context_lines);
+void diff_chunk_context_get(struct diff_chunk_context *cc,
+ const struct diff_result *r,
+ int chunk_idx, int context_lines);
+void diff_output_unidiff_chunk(FILE *dest, bool *header_printed,
+ const struct diff_input_info *info,
+ const struct diff_result *result,
+ const struct diff_chunk_context *cc);
int diff_output_info(FILE *dest, const struct diff_input_info *info);
int diff_output_lines(FILE *dest, const char *prefix,
struct diff_atom *start_atom, unsigned int count);
blob - 24f7b9467dcfdd013e03242d59c02551eddfc875
blob + 63d712dc89458bd762fad94e1d01c418d4887d19
--- lib/diff_output_unidiff.c
+++ lib/diff_output_unidiff.c
#include "diff_debug.h"
-struct chunk_context {
- struct diff_range chunk;
- struct diff_range left, right;
-};
-
static bool
-chunk_context_empty(const struct chunk_context *cc)
+chunk_context_empty(const struct diff_chunk_context *cc)
{
return diff_range_empty(&cc->chunk);
}
-static void
-chunk_context_get(struct chunk_context *cc, const struct diff_result *r,
+void
+diff_chunk_context_get(struct diff_chunk_context *cc, const struct diff_result *r,
int chunk_idx, int context_lines)
{
const struct diff_chunk *c = &r->chunks.head[chunk_idx];
left_start = MAX(0, left_start - context_lines);
right_start = MAX(0, right_start - context_lines);
- *cc = (struct chunk_context){
+ *cc = (struct diff_chunk_context){
.chunk = {
.start = chunk_idx,
.end = chunk_idx + 1,
}
static bool
-chunk_contexts_touch(const struct chunk_context *cc,
- const struct chunk_context *other)
+chunk_contexts_touch(const struct diff_chunk_context *cc,
+ const struct diff_chunk_context *other)
{
return diff_ranges_touch(&cc->chunk, &other->chunk)
|| diff_ranges_touch(&cc->left, &other->left)
}
static void
-chunk_contexts_merge(struct chunk_context *cc,
- const struct chunk_context *other)
+chunk_contexts_merge(struct diff_chunk_context *cc,
+ const struct diff_chunk_context *other)
{
diff_ranges_merge(&cc->chunk, &other->chunk);
diff_ranges_merge(&cc->left, &other->left);
diff_ranges_merge(&cc->right, &other->right);
}
-static void
+void
diff_output_unidiff_chunk(FILE *dest, bool *header_printed,
const struct diff_input_info *info,
const struct diff_result *result,
- const struct chunk_context *cc)
+ const struct diff_chunk_context *cc)
{
if (diff_range_empty(&cc->left) && diff_range_empty(&cc->right))
return;
if (result->rc != DIFF_RC_OK)
return result->rc;
- struct chunk_context cc = {};
+ struct diff_chunk_context cc = {};
bool header_printed = false;
int i;
for (i = 0; i < result->chunks.len; i++) {
struct diff_chunk *c = &result->chunks.head[i];
enum diff_chunk_type t = diff_chunk_type(c);
- struct chunk_context next;
+ struct diff_chunk_context next;
if (t != CHUNK_MINUS && t != CHUNK_PLUS)
continue;
* Note down the start point, any number of subsequent
* chunks may be joined up to this unidiff chunk by
* context lines or by being directly adjacent. */
- chunk_context_get(&cc, result, i, context_lines);
+ diff_chunk_context_get(&cc, result, i, context_lines);
debug("new chunk to be printed:"
" chunk %d-%d left %d-%d right %d-%d\n",
cc.chunk.start, cc.chunk.end,
/* There already is a previous chunk noted down for being
* printed. Does it join up with this one? */
- chunk_context_get(&next, result, i, context_lines);
+ diff_chunk_context_get(&next, result, i, context_lines);
debug("new chunk to be printed:"
" chunk %d-%d left %d-%d right %d-%d\n",
next.chunk.start, next.chunk.end,