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

[PATCH v4] Teach diff machinery to display other prefixes than "a/" and "b/"

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 18, 2007, 19:32 UTC
Message-ID
<Pine.LNX.4.64.0712181930130.23902@racer.site>
In-Reply-To
<alpine.LFD.0.9999.0712181059220.21557@woody.linux-foundation.org>

With the new options "--src-prefix=<prefix>", "--dst-prefix=<prefix>" and "--no-prefix", you can now control the path prefixes of the diff machinery. These used to by hardwired to "a/" for the source prefix and "b/" for the destination prefix.

Initial patch by Pascal Obry.  Sane option names suggested by Linus.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	On Tue, 18 Dec 2007, Linus Torvalds wrote:
	> On Tue, 18 Dec 2007, Johannes Schindelin wrote:
	> > 
	> > With the new options "--src-prefix <prefix>", "--dst-prefix 
	> > <prefix>"
	> 
	> I really would prefer "--[src|dst]-prefix=<prefix>" as a single 
	> argument.
	> 
	> I think that's the more common form for long arguments, isn't it 
	> (with any short-format arguments usually using the "-L <prefix>" 
	> kind of form)?
	Incidentally, this fixes src-prefix and dst-prefix (I wrote av[1] 
	instead of arg + 1, but forgot to commit).
	So now, it is tested at least once per option.
 Documentation/diff-options.txt |    9 +++++++++
 diff.c                         |   25 +++++++++++++++++--------
 diff.h                         |    1 +
 3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 9ecc1d7..1a78635 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -211,5 +211,14 @@ endif::git-format-patch[]
 --no-ext-diff::
 	Disallow external diff drivers.
 
+--src-prefix=<prefix>::
+	Show the given source prefix instead of "a/".
+
+--dst-prefix=<prefix>::
+	Show the given destination prefix instead of "b/".
+
+--no-prefix::
+	Do not show any source or destination prefix.
+
 For more detailed explanation on these common options, see also
 link:diffcore.html[diffcore documentation].
diff --git a/diff.c b/diff.c
index e26584c..61fd492 100644
--- a/diff.c
+++ b/diff.c
@@ -290,9 +290,10 @@ static void emit_rewrite_diff(const char *name_a,
 			      const char *name_b,
 			      struct diff_filespec *one,
 			      struct diff_filespec *two,
-			      int color_diff)
+			      struct diff_options *o)
 {
 	int lc_a, lc_b;
+	int color_diff = DIFF_OPT_TST(o, COLOR_DIFF);
 	const char *name_a_tab, *name_b_tab;
 	const char *metainfo = diff_get_color(color_diff, DIFF_METAINFO);
 	const char *fraginfo = diff_get_color(color_diff, DIFF_FRAGINFO);
@@ -309,9 +310,9 @@ static void emit_rewrite_diff(const char *name_a,
 	diff_populate_filespec(two, 0);
 	lc_a = count_lines(one->data, one->size);
 	lc_b = count_lines(two->data, two->size);
-	printf("%s--- a/%s%s%s\n%s+++ b/%s%s%s\n%s@@ -",
-	       metainfo, name_a, name_a_tab, reset,
-	       metainfo, name_b, name_b_tab, reset, fraginfo);
+	printf("%s--- %s%s%s%s\n%s+++ %s%s%s%s\n%s@@ -",
+	       metainfo, o->a_prefix, name_a, name_a_tab, reset,
+	       metainfo, o->b_prefix, name_b, name_b_tab, reset, fraginfo);
 	print_line_count(lc_a);
 	printf(" +");
 	print_line_count(lc_b);
@@ -1212,8 +1213,8 @@ static void builtin_diff(const char *name_a,
 	const char *set = diff_get_color_opt(o, DIFF_METAINFO);
 	const char *reset = diff_get_color_opt(o, DIFF_RESET);
 
-	a_one = quote_two("a/", name_a + (*name_a == '/'));
-	b_two = quote_two("b/", name_b + (*name_b == '/'));
+	a_one = quote_two(o->a_prefix, name_a + (*name_a == '/'));
+	b_two = quote_two(o->b_prefix, name_b + (*name_b == '/'));
 	lbl[0] = DIFF_FILE_VALID(one) ? a_one : "/dev/null";
 	lbl[1] = DIFF_FILE_VALID(two) ? b_two : "/dev/null";
 	printf("%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
@@ -1242,8 +1243,7 @@ static void builtin_diff(const char *name_a,
 		if ((one->mode ^ two->mode) & S_IFMT)
 			goto free_ab_and_return;
 		if (complete_rewrite) {
-			emit_rewrite_diff(name_a, name_b, one, two,
-					DIFF_OPT_TST(o, COLOR_DIFF));
+			emit_rewrite_diff(name_a, name_b, one, two, o);
 			o->found_changes = 1;
 			goto free_ab_and_return;
 		}
@@ -2020,6 +2020,9 @@ void diff_setup(struct diff_options *options)
 	else
 		DIFF_OPT_CLR(options, COLOR_DIFF);
 	options->detect_rename = diff_detect_rename_default;
+
+	options->a_prefix = "a/";
+	options->b_prefix = "b/";
 }
 
 int diff_setup_done(struct diff_options *options)
@@ -2291,6 +2294,12 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
 		else if (40 < options->abbrev)
 			options->abbrev = 40;
 	}
+	else if (!prefixcmp(arg, "--src-prefix="))
+		options->a_prefix = arg + 13;
+	else if (!prefixcmp(arg, "--dst-prefix="))
+		options->b_prefix = arg + 13;
+	else if (!strcmp(arg, "--no-prefix"))
+		options->a_prefix = options->b_prefix = "";
 	else
 		return 0;
 	return 1;
diff --git a/diff.h b/diff.h
index 7e8000a..beccf85 100644
--- a/diff.h
+++ b/diff.h
@@ -69,6 +69,7 @@ struct diff_options {
 	const char *orderfile;
 	const char *pickaxe;
 	const char *single_follow;
+	const char *a_prefix, *b_prefix;
 	unsigned flags;
 	int context;
 	int break_opt;
-- 
1.5.4.rc0.70.g30f7
Previous: Linus TorvaldsNext: Linus Torvalds
Message 12 of 22 in “Add format-patch option --no-name-prefix.”
  1. Add format-patch option --no-name-prefix.Pascal Obry, Dec 18, 2007
  2. Pascal ObryDec 18, 2007
  3. Johannes SixtDec 18, 2007
  4. Pascal ObryDec 18, 2007
  5. Linus TorvaldsDec 18, 2007
  6. Pascal ObryDec 18, 2007
  7. Johannes SchindelinDec 18, 2007
  8. Pascal ObryDec 18, 2007
  9. Teach diff machinery to display other prefixes than "a/" and "b/"Johannes Schindelin, Dec 18, 2007
  10. Pascal ObryDec 18, 2007
  11. Linus TorvaldsDec 18, 2007
  12. Teach diff machinery to display other prefixes than "a/" and "b/"Johannes Schindelin, Dec 18, 2007
  13. Linus TorvaldsDec 18, 2007
  14. Junio C HamanoDec 18, 2007
  15. Andreas EricssonDec 18, 2007
  16. Pascal ObryDec 18, 2007
  17. Andreas EricssonDec 19, 2007
  18. Johannes SixtDec 19, 2007
  19. Teach diff machinery to display other prefixes than "a/" and "b/"Johannes Schindelin, Dec 18, 2007
  20. Pascal ObryDec 18, 2007
  21. Johannes SchindelinDec 18, 2007
  22. Matthieu MoyDec 18, 2007

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.