# [RFC/PATCH] interpolate '\n' as newline

2 messages from 2007-07-06 to 2007-07-07. Participants: Johannes Schindelin, Junio C Hamano.
Thread: https://gitlist.dev/t/8903

## Johannes Schindelin, 2007-07-06 20:02

Subject: [RFC/PATCH] interpolate '\n' as newline
Message-ID: <Pine.LNX.4.64.0707062100360.4093@racer.site>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0707062100360.4093%40racer.site

```

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(-)

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, 2007-07-07 02:13

Subject: Re: [RFC/PATCH] interpolate '\n' as newline
Message-ID: <7vy7htc65h.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vy7htc65h.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <Pine.LNX.4.64.0707062100360.4093@racer.site>

```
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> 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.

```
