Commit Diff


commit - 05b5f01fe731ec1197dbb90d6b0c98cd7dd3b465
commit + f374e91343146fc0584d53f4b767a3ebfe7bc49e
blob - 51cb9c7966c778bceaaaf06691252cd4887e5e63
blob + 04a49ba79b9040e95c57a38b6aea04ef38ad3fde
--- include/diff/diff_output.h
+++ include/diff/diff_output.h
@@ -20,11 +20,23 @@ struct diff_input_info {
 	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
@@ -27,19 +27,14 @@
 
 #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];
@@ -53,7 +48,7 @@ chunk_context_get(struct chunk_context *cc, const stru
 	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,
@@ -70,8 +65,8 @@ chunk_context_get(struct chunk_context *cc, const stru
 }
 
 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)
@@ -79,19 +74,19 @@ chunk_contexts_touch(const struct chunk_context *cc,
 }
 
 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;
@@ -165,14 +160,14 @@ diff_output_unidiff(FILE *dest, const struct diff_inpu
 	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;
@@ -182,7 +177,7 @@ diff_output_unidiff(FILE *dest, const struct diff_inpu
 			 * 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,
@@ -193,7 +188,7 @@ diff_output_unidiff(FILE *dest, const struct diff_inpu
 
 		/* 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,