threads / rfc / 8903

RFC patchinterpolate '\n' as newline

Subject: [RFC/PATCH] interpolate '\n' as newline

## tl;dr

2 messages between Jul 6, 2007 and Jul 7, 2007. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Johannes Schindelin· Jul 6, 2007, 20:02 UTC · lore
All places which call interpolate() get this interpolation for free.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
	In the back of my head, I remembered that a few people
	were interested in this.
	Judging by the diffstat, it really escapes me why these people
	did not implement it.
	However, there is a chance that this change is not liked by
	all places that call interpolate(). merge-recursive can live
	with it, I guess. But daemon interpolates the path... However,
	it seems only the command line of daemon can change the string,
	so this change should be safe. There is only one other place in 
	git.git, the --pretty=format: stuff, and that is where the idea
	was born first.
 interpolate.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
Show changes to interpolate.c +6 −0
diff --git a/interpolate.c b/interpolate.c
index 0082677..b322503 100644
--- a/interpolate.c
+++ b/interpolate.c
@@ -87,6 +87,12 @@ unsigned long interpolate(char *result, unsigned long reslen,
 				src += namelen;
 				continue;
 			}
+		} else if (c == '\\' && src[1] == 'n') {
+			if (newlen + 1 < reslen)
+				*dest++ = '\n';
+			src += 2;
+			newlen++;
+			continue;
 		}
 		/* Straight copy one non-interpolation character. */
 		if (newlen + 1 < reslen)
Junio C Hamano· Jul 7, 2007, 02:13 UTC · re: Johannes Schindelin · lore

Re: [RFC/PATCH] interpolate '\n' as newline

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 15 quoted lines
> All places which call interpolate() get this interpolation for free.
>
> Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
>
> ---
>
> 	In the back of my head, I remembered that a few people
> 	were interested in this.
>
> 	Judging by the diffstat, it really escapes me why these people
> 	did not implement it.
>
> 	However, there is a chance that this change is not liked by
> 	all places that call interpolate(). merge-recursive can live
> 	with it, I guess.

I actually think merge-recursive has much bigger chance of getting broken than git-daemon, but only _if_ people are already using custom merge programs this becomes an issue. It is much more common to see two letter sequence '\n' as a string literal in a script than in a pathname.

>       But daemon interpolates the path... However,
> 	it seems only the command line of daemon can change the string,
> 	so this change should be safe.

The command line needs to say --interpolated-path="...\n..." and expect that '\n' would come out as two characters backslash and en in the _pathname_ to get broken, and it is very unlikely that anybody is insane enough to have such a path.

← back to recent threads