git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/7] Add a prefix output callback to diff output.

From
Bo Yang <struggleyb.nku@gmail.com>
Date
May 15, 2010, 11:02 UTC
Message-ID
<1273921331-32702-2-git-send-email-struggleyb.nku@gmail.com>
In-Reply-To
<1273921331-32702-1-git-send-email-struggleyb.nku@gmail.com>

The callback allow to output some prefix string for each line of diff output.

Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
---
 diff.c |   11 ++++++++---
 diff.h |    5 +++++
 2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/diff.c b/diff.c
index e49f14a..2a38bef 100644
--- a/diff.c
+++ b/diff.c
@@ -282,11 +282,16 @@ static void check_blank_at_eof(mmfile_t *mf1, mmfile_t *mf2,
 	ecbdata->blank_at_eof_in_postimage = (at - l2) + 1;
 }
 
-static void emit_line_0(FILE *file, const char *set, const char *reset,
+static void emit_line_0(struct diff_options *o, const char *set, const char *reset,
 			int first, const char *line, int len)
 {
 	int has_trailing_newline, has_trailing_carriage_return;
 	int nofirst;
+	FILE *file = o->file;
+
+	if (o->output_prefix) {
+		o->output_prefix(file, 1, o->output_prefix_data);
+	}
 
 	if (len == 0) {
 		has_trailing_newline = (first == '\n');
@@ -316,10 +321,10 @@ static void emit_line_0(FILE *file, const char *set, const char *reset,
 		fputc('\n', file);
 }
 
-static void emit_line(FILE *file, const char *set, const char *reset,
+static void emit_line(struct diff_options *o, const char *set, const char *reset,
 		      const char *line, int len)
 {
-	emit_line_0(file, set, reset, line[0], line+1, len-1);
+	emit_line_0(o, set, reset, line[0], line+1, len-1);
 }
 
 static int new_blank_line_at_eof(struct emit_callback *ecbdata, const char *line, int len)
diff --git a/diff.h b/diff.h
index 6a71013..0031dd8 100644
--- a/diff.h
+++ b/diff.h
@@ -9,6 +9,7 @@
 struct rev_info;
 struct diff_options;
 struct diff_queue_struct;
+struct strbuf;
 
 typedef void (*change_fn_t)(struct diff_options *options,
 		 unsigned old_mode, unsigned new_mode,
@@ -25,6 +26,8 @@ typedef void (*add_remove_fn_t)(struct diff_options *options,
 typedef void (*diff_format_fn_t)(struct diff_queue_struct *q,
 		struct diff_options *options, void *data);
 
+typedef struct strbuf *(*diff_prefix_fn_t)(FILE *file, int print, void *data);
+
 #define DIFF_FORMAT_RAW		0x0001
 #define DIFF_FORMAT_DIFFSTAT	0x0002
 #define DIFF_FORMAT_NUMSTAT	0x0004
@@ -122,6 +125,8 @@ struct diff_options {
 	add_remove_fn_t add_remove;
 	diff_format_fn_t format_callback;
 	void *format_callback_data;
+	diff_prefix_fn_t output_prefix;
+	void *output_prefix_data;
 };
 
 enum color_diff {
-- 
1.7.1.94.gc3269
Previous: Bo YangNext: Bo Yang
Message 2 of 12 in “Make git log --graph looks better with -p and other diff options”
  1. 0/7 Make git log --graph looks better with -p and other diff optionsBo Yang, May 15, 2010
  2. 1/7 Add a prefix output callback to diff output.Bo Yang, May 15, 2010
  3. 2/7 Change to call the new emit_line.Bo Yang, May 15, 2010
  4. 3/7 Output the graph columns at the end of the commit message.Bo Yang, May 15, 2010
  5. 4/7 diff.c: Output the text graph padding before each diff line.Bo Yang, May 15, 2010
  6. 5/7 Emit a whole line once a time.Bo Yang, May 15, 2010
  7. 6/7 Register a callback for graph output.Bo Yang, May 15, 2010
  8. 7/7 Make --color-words work well with --graph.Bo Yang, May 15, 2010
  9. Thomas RastMay 17, 2010
  10. Thomas RastMay 17, 2010
  11. Thomas RastMay 17, 2010
  12. Thomas RastMay 17, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.