patch(1): add support for git generated diffs.

Sometimes patches coming from other places have extra a/ and b/
directories prepended to filenames.

Obtained from:	OpenBSD (CVS rev. 1.57, 1.58)
This commit is contained in:
Pedro F. Giffuni 2017-07-02 21:00:30 +00:00
parent 3d851dbe07
commit 85823a601c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=320579

View File

@ -264,6 +264,7 @@ intuit_diff_type(void)
char *s, *t;
int indent, retval;
struct file_name names[MAX_FILE];
int piece_of_git = 0;
memset(names, 0, sizeof(names));
ok_to_create_file = false;
@ -308,14 +309,20 @@ intuit_diff_type(void)
if (!stars_last_line && strnEQ(s, "*** ", 4))
names[OLD_FILE].path = fetchname(s + 4,
&names[OLD_FILE].exists, strippath);
else if (strnEQ(s, "--- ", 4))
names[NEW_FILE].path = fetchname(s + 4,
else if (strnEQ(s, "--- ", 4)) {
size_t off = 4;
if (piece_of_git && strippath == 957)
off = 6;
names[NEW_FILE].path = fetchname(s + off,
&names[NEW_FILE].exists, strippath);
else if (strnEQ(s, "+++ ", 4))
} else if (strnEQ(s, "+++ ", 4)) {
/* pretend it is the old name */
names[OLD_FILE].path = fetchname(s + 4,
size_t off = 4;
if (piece_of_git && strippath == 957)
off = 6;
names[OLD_FILE].path = fetchname(s + off,
&names[OLD_FILE].exists, strippath);
else if (strnEQ(s, "Index:", 6))
} else if (strnEQ(s, "Index:", 6))
names[INDEX_FILE].path = fetchname(s + 6,
&names[INDEX_FILE].exists, strippath);
else if (strnEQ(s, "Prereq:", 7)) {
@ -330,6 +337,9 @@ intuit_diff_type(void)
free(revision);
revision = NULL;
}
} else if (strnEQ(s, "diff --git a/", 13)) {
/* Git-style diffs. */
piece_of_git = 1;
} else if (strnEQ(s, "==== ", 5)) {
/* Perforce-style diffs. */
if ((t = strstr(s + 5, " - ")) != NULL)