threads / patch / 1725

patchMake git-apply understand "\ No newline at end of file" in non-english locales

Subject: [PATCH] Make git-apply understand "\ No newline at end of file" in non-english locales

## tl;dr

4 messages between Sep 4, 2005 and Sep 5, 2005. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Fredrik Kuivinen· Sep 4, 2005, 17:29 UTC · lore

The message "\ No newline at end of file" which sometimes is produced by diff(1) is locale dependent. We can't assume more than that it begins with "\ ".

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
---

For example, given two files, "foo" and "bar", with appropriate contents 'diff -u foo bar' will produce the following output on my system.

--- foo 2005-09-04 18:59:38.000000000 +0200 +++ bar 2005-09-04 18:59:16.000000000 +0200

Show changes to apply.c +8 −4
@@ -1 +1 @@
-foobar
+foo
\ Ingen nyrad vid filslut


 apply.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

18d17c911a200c9d45414af403a145c7ac4f9317
diff --git a/apply.c b/apply.c
--- a/apply.c
+++ b/apply.c
@@ -672,9 +672,13 @@ static int parse_fragment(char *line, un
 			added++;
 			newlines--;
 			break;
-		/* We allow "\ No newline at end of file" */
+
+                /* We allow "\ No newline at end of file". Depending
+                 * on locale settings when the patch was produced we
+                 * don't know what this line looks like. The only
+                 * thing we do know is that it begins with "\ ". */
 		case '\\':
-			if (len < 12 || memcmp(line, "\\ No newline", 12))
+			if (len < 12 || memcmp(line, "\\ ", 2))
 				return -1;
 			break;
 		}
@@ -683,7 +687,7 @@ static int parse_fragment(char *line, un
 	 * it in the above loop because we hit oldlines == newlines == 0
 	 * before seeing it.
 	 */
-	if (12 < size && !memcmp(line, "\\ No newline", 12))
+	if (12 < size && !memcmp(line, "\\ ", 2))
 		offset += linelen(line, size);
 
 	patch->lines_added += added;
Fredrik Kuivinen· Sep 4, 2005, 18:46 UTC · re: Fredrik Kuivinen · lore

Re: [PATCH] Make git-apply understand "\ No newline at end of file" in non-english locales

The message "\ No newline at end of file" which sometimes is produced by diff(1) is locale dependent. We can't assume more than that it begins with "\ ".

Signed-off-by: Fredrik Kuivinen <freku@ida.liu.se>
---

The previous patch wasn't doing the right thing. Hopefully I have managed to get it right this time.

 apply.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
b94e5e845c241fff14334001aa5d418d22cd115e
Show changes to apply.c +7 −3
diff --git a/apply.c b/apply.c
--- a/apply.c
+++ b/apply.c
@@ -672,9 +672,13 @@ static int parse_fragment(char *line, un
 			added++;
 			newlines--;
 			break;
-		/* We allow "\ No newline at end of file" */
+
+		/* We allow "\ No newline at end of file". Depending
+		 * on locale settings when the patch was produced we
+		 * don't know what this line looks like. The only
+		 * thing we do know is that it begins with "\ ". */
 		case '\\':
-			if (len < 12 || memcmp(line, "\\ No newline", 12))
+			if (len < 2 || line[1] != ' ')
 				return -1;
 			break;
 		}
@@ -683,7 +687,7 @@ static int parse_fragment(char *line, un
 	 * it in the above loop because we hit oldlines == newlines == 0
 	 * before seeing it.
 	 */
-	if (12 < size && !memcmp(line, "\\ No newline", 12))
+	if (2 < size && !memcmp(line, "\\ ", 2))
 		offset += linelen(line, size);
 
 	patch->lines_added += added;
Junio C Hamano· Sep 4, 2005, 19:25 UTC · re: Fredrik Kuivinen · lore

Re: [PATCH] Make git-apply understand "\ No newline at end of file" in non-english locales

Fredrik Kuivinen <freku045@student.liu.se> writes:
Show 9 quoted lines
> The message "\ No newline at end of file" which sometimes is produced
> by diff(1) is locale dependent. We can't assume more than that it
> begins with "\ ".
>
> Signed-off-by: Fredrik Kuivinen <freku@ida.liu.se>
> ---
>
> The previous patch wasn't doing the right thing. Hopefully I have
> managed to get it right this time.

I noticed that you left 12 in the previous patch, and thought it was a sane safety measure to make sure that the incomplete line marker is of reasonably length, not just any line that starts with '\ ' (i.e. "\ foobar\n", which is a tad short).

Fredrik Kuivinen· Sep 5, 2005, 05:25 UTC · re: Junio C Hamano · lore

Re: [PATCH] Make git-apply understand "\ No newline at end of file" in non-english locales

On Sun, Sep 04, 2005 at 12:25:16PM -0700, Junio C Hamano wrote:
Show 17 quoted lines
> Fredrik Kuivinen <freku045@student.liu.se> writes:
> 
> > The message "\ No newline at end of file" which sometimes is produced
> > by diff(1) is locale dependent. We can't assume more than that it
> > begins with "\ ".
> >
> > Signed-off-by: Fredrik Kuivinen <freku@ida.liu.se>
> > ---
> >
> > The previous patch wasn't doing the right thing. Hopefully I have
> > managed to get it right this time.
> 
> I noticed that you left 12 in the previous patch, and thought it
> was a sane safety measure to make sure that the incomplete line
> marker is of reasonably length, not just any line that starts
> with '\ ' (i.e. "\ foobar\n", which is a tad short).
> 
Maybe the first patch wasn't that bad after all :)

In the current diffutils package the Swedish translation is one of the shortest ones, so 12 is ok for now at least.

- Fredrik

← back to recent threads