svn commit: r196459 - head/gnu/usr.bin/patch

Ed Schouten ed at FreeBSD.org
Sun Aug 23 12:23:25 UTC 2009


Author: ed
Date: Sun Aug 23 12:23:24 2009
New Revision: 196459
URL: http://svn.freebsd.org/changeset/base/196459

Log:
  Add support for diffs generated by Perforce.
  
  It basically picks the filenames from the "====" line and strips off the
  # revision number.

Modified:
  head/gnu/usr.bin/patch/pch.c

Modified: head/gnu/usr.bin/patch/pch.c
==============================================================================
--- head/gnu/usr.bin/patch/pch.c	Sun Aug 23 11:33:46 2009	(r196458)
+++ head/gnu/usr.bin/patch/pch.c	Sun Aug 23 12:23:24 2009	(r196459)
@@ -211,6 +211,25 @@ there_is_another_patch(void)
 	return TRUE;
 }
 
+static char *
+p4_savestr(char *str)
+{
+	char *t, *h;
+
+	/* Leading whitespace. */
+	while (isspace((unsigned char)*str))
+		str++;
+
+	/* Remove the file revision number. */
+	for (t = str, h = NULL; *t != '\0' && !isspace((unsigned char)*t); t++)
+		if (*t == '#')
+			h = t;
+	if (h != NULL)
+		*h = '\0';
+
+	return savestr(str);
+}
+
 /*
  * Determine what kind of diff is in the remaining part of the patch file.
  */
@@ -298,6 +317,11 @@ intuit_diff_type(void)
 				free(revision);
 				revision = Nullch;
 			}
+		} else if (strnEQ(s, "==== ", 5)) {
+			/* Perforce-style diffs. */
+			if ((t = strstr(s + 5, " - ")) != NULL)
+				newtmp = p4_savestr(t + 3);
+			oldtmp = p4_savestr(s + 5);
 		}
 		if ((!diff_type || diff_type == ED_DIFF) &&
 		    first_command_line >= 0L &&


More information about the svn-src-head mailing list