1
0
mirror of https://github.com/git/git.git synced 2024-11-19 07:34:11 +01:00

[PATCH] Make git-apply understand incomplete lines in non-C locales

The message "\ No newline at end of file" used by diff(1) to mark
an incomplete line is locale dependent. We can't assume more than
that it begins with "\ ".

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
    @@ -1 +1 @@
    -foobar
    +foo
    \ Ingen nyrad vid filslut

[jc: the check for the marker still uses the line length being no less
than 12 bytes for a sanity check, but I think it is safe to assume
that in other locales. I haven't checked the .po files from diff, tho'.]

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Fredrik Kuivinen 2005-09-04 19:29:02 +02:00 committed by Junio C Hamano
parent 07a95d0ed3
commit 433ef8a2fb

10
apply.c

@ -672,9 +672,13 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
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, unsigned long size, struct patch *patch, s
* 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;