svn commit: r286795 - head/usr.bin/patch

Xin LI delphij at FreeBSD.org
Sat Aug 15 00:42:35 UTC 2015


Author: delphij
Date: Sat Aug 15 00:42:33 2015
New Revision: 286795
URL: https://svnweb.freebsd.org/changeset/base/286795

Log:
  Remove automatic checkout feature.
  
  Obtained from:	DragonFly via OpenBSD
  Relnotes:	yes
  MFC:		never

Modified:
  head/usr.bin/patch/common.h
  head/usr.bin/patch/inp.c
  head/usr.bin/patch/patch.1
  head/usr.bin/patch/pch.c
  head/usr.bin/patch/util.c
  head/usr.bin/patch/util.h

Modified: head/usr.bin/patch/common.h
==============================================================================
--- head/usr.bin/patch/common.h	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/common.h	Sat Aug 15 00:42:33 2015	(r286795)
@@ -42,12 +42,6 @@
 #define	BUFFERSIZE 4096
 #define	LINENUM_MAX LONG_MAX
 
-#define	SCCSPREFIX "s."
-
-#define	RCSSUFFIX ",v"
-#define	CHECKOUT "/usr/bin/co"
-#define	RCSDIFF "/usr/bin/rcsdiff"
-
 #define	ORIGEXT ".orig"
 #define	REJEXT ".rej"
 

Modified: head/usr.bin/patch/inp.c
==============================================================================
--- head/usr.bin/patch/inp.c	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/inp.c	Sat Aug 15 00:42:33 2015	(r286795)
@@ -137,13 +137,12 @@ reallocate_lines(size_t *lines_allocated
 static bool
 plan_a(const char *filename)
 {
-	int		ifd, statfailed, pstat;
-	char		*p, *s, lbuf[INITLINELEN];
+	int		ifd, statfailed;
+	char		*p, *s;
 	struct stat	filestat;
 	ptrdiff_t	sz;
 	size_t		i;
 	size_t		iline, lines_allocated;
-	pid_t		pid;
 
 #ifdef DEBUGGING
 	if (debug & 8)
@@ -169,96 +168,8 @@ plan_a(const char *filename)
 		close(creat(filename, 0666));
 		statfailed = stat(filename, &filestat);
 	}
-	if (statfailed && check_only)
-		fatal("%s not found, -C mode, can't probe further\n", filename);
-	/* For nonexistent or read-only files, look for RCS versions.  */
-
-	if (statfailed ||
-	    /* No one can write to it.  */
-	    (filestat.st_mode & 0222) == 0 ||
-	    /* I can't write to it.  */
-	    ((filestat.st_mode & 0022) == 0 && filestat.st_uid != getuid())) {
-		char	*filebase, *filedir;
-		struct stat	cstat;
-		char	*tmp_filename1, *tmp_filename2;
-		char	*argp[4] = { NULL };
-		posix_spawn_file_actions_t file_actions;
-
-		tmp_filename1 = strdup(filename);
-		tmp_filename2 = strdup(filename);
-		if (tmp_filename1 == NULL || tmp_filename2 == NULL)
-			fatal("strdupping filename");
-
-		filebase = basename(tmp_filename1);
-		filedir = dirname(tmp_filename2);
-
-		memset(argp, 0, sizeof(argp));
-
-#define try(f, a1, a2, a3) \
-	(snprintf(lbuf, sizeof(lbuf), f, a1, a2, a3), stat(lbuf, &cstat) == 0)
-
-		/*
-		 * else we can't write to it but it's not under a version
-		 * control system, so just proceed.
-		 */
-		if (try("%s/RCS/%s%s", filedir, filebase, RCSSUFFIX) ||
-		    try("%s/RCS/%s%s", filedir, filebase, "") ||
-		    try("%s/%s%s", filedir, filebase, RCSSUFFIX)) {
-			if (!statfailed) {
-				if ((filestat.st_mode & 0222) != 0)
-					/* The owner can write to it.  */
-					fatal("file %s seems to be locked "
-					    "by somebody else under RCS\n",
-					    filename);
-				/*
-				 * It might be checked out unlocked.  See if
-				 * it's safe to check out the default version
-				 * locked.
-				 */
-				if (verbose)
-					say("Comparing file %s to default "
-					    "RCS version...\n", filename);
-
-				argp[0] = __DECONST(char *, RCSDIFF);
-				argp[1] = __DECONST(char *, filename);
-				posix_spawn_file_actions_init(&file_actions);
-				posix_spawn_file_actions_addopen(&file_actions,
-				    STDOUT_FILENO, _PATH_DEVNULL, O_WRONLY, 0);
-				if (posix_spawn(&pid, RCSDIFF, &file_actions,
-				    NULL, argp, NULL) == 0) {
-					pid = waitpid(pid, &pstat, 0);
-					if (pid == -1 || WEXITSTATUS(pstat) != 0)
-						fatal("can't check out file %s: "
-						    "differs from default RCS version\n",
-						    filename);
-				} else
-					fatal("posix_spawn: %s\n", strerror(errno));
-				posix_spawn_file_actions_destroy(&file_actions);
-			}
-
-			if (verbose)
-				say("Checking out file %s from RCS...\n",
-				    filename);
-
-			argp[0] = __DECONST(char *, CHECKOUT);
-			argp[1] = __DECONST(char *, "-l");
-			argp[2] = __DECONST(char *, filename);
-			if (posix_spawn(&pid, CHECKOUT, NULL, NULL, argp,
-			    NULL) == 0) {
-				pid = waitpid(pid, &pstat, 0);
-				if (pid == -1 || WEXITSTATUS(pstat) != 0 ||
-				    stat(filename, &filestat))
-					fatal("can't check out file %s from RCS\n",
-					    filename);
-			} else
-				fatal("posix_spawn: %s\n", strerror(errno));
-		} else if (statfailed) {
-			fatal("can't find %s\n", filename);
-		}
-		free(tmp_filename1);
-		free(tmp_filename2);
-	}
-
+	if (statfailed)
+		fatal("can't find %s\n", filename);
 	filemode = filestat.st_mode;
 	if (!S_ISREG(filemode))
 		fatal("%s is not a normal file--can't patch\n", filename);

Modified: head/usr.bin/patch/patch.1
==============================================================================
--- head/usr.bin/patch/patch.1	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/patch.1	Sat Aug 15 00:42:33 2015	(r286795)
@@ -21,7 +21,7 @@
 .\"
 .\" $OpenBSD: patch.1,v 1.27 2014/04/15 06:26:54 jmc Exp $
 .\" $FreeBSD$
-.Dd July 21, 2015
+.Dd August 15, 2015
 .Dt PATCH 1
 .Os
 .Sh NAME
@@ -175,7 +175,7 @@ for that.
 .Fl Fl input Ar patchfile
 .Xc
 Causes the next argument to be interpreted as the input file name
-(i.e. a patchfile).
+(i.e., a patchfile).
 This option may be specified multiple times.
 .It Fl l , Fl Fl ignore-whitespace
 Causes the pattern matching to be done loosely, in case the tabs and
@@ -245,7 +245,7 @@ option.
 Tells
 .Nm
 that this patch was created with the old and new files swapped.
-(Yes, I'm afraid that does happen occasionally, human nature being what it
+(Yes, I am afraid that does happen occasionally, human nature being what it
 is.)
 .Nm
 will attempt to swap each hunk around before applying it.
@@ -263,7 +263,7 @@ If it can, you will be asked if you want
 option set.
 If it cannot, the patch will continue to be applied normally.
 (Note: this method cannot detect a reversed patch if it is a normal diff
-and if the first command is an append (i.e. it should have been a delete)
+and if the first command is an append (i.e., it should have been a delete)
 since appends always succeed, due to the fact that a null context will match
 anywhere.
 Luckily, most patches add or change lines rather than delete them, so most
@@ -387,7 +387,7 @@ given in the hunk.
 First
 .Nm
 looks for a place where all lines of the context match.
-If no such place is found, and it's a context diff, and the maximum fuzz factor
+If no such place is found, and it is a context diff, and the maximum fuzz factor
 is set to 1 or more, then another scan takes place ignoring the first and last
 line of context.
 If that fails, and the maximum fuzz factor is set to 2 or more,
@@ -483,15 +483,6 @@ file names or, for a non-context diff, t
 file name, and choose the file name with the fewest path components,
 the shortest basename, and the shortest total file name length (in that order).
 .It
-If no file exists,
-.Nm
-checks for the existence of the files in an SCCS or RCS directory
-(using the appropriate prefix or suffix) using the criteria specified
-above.
-If found,
-.Nm
-will attempt to get or check out the file.
-.It
 If no suitable file was found to patch, the patch file is a context or
 unified diff, and the old file was zero length, the new file name is
 created and used.

Modified: head/usr.bin/patch/pch.c
==============================================================================
--- head/usr.bin/patch/pch.c	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/pch.c	Sat Aug 15 00:42:33 2015	(r286795)
@@ -1501,17 +1501,8 @@ posix_name(const struct file_name *names
 	}
 	if (path == NULL && !assume_exists) {
 		/*
-		 * No files found, look for something we can checkout from
-		 * RCS/SCCS dirs.  Same order as above.
-		 */
-		for (i = 0; i < MAX_FILE; i++) {
-			if (names[i].path != NULL &&
-			    (path = checked_in(names[i].path)) != NULL)
-				break;
-		}
-		/*
-		 * Still no match?  Check to see if the diff could be creating
-		 * a new file.
+		 * No files found, check to see if the diff could be
+		 * creating a new file.
 		 */
 		if (path == NULL && ok_to_create_file &&
 		    names[NEW_FILE].path != NULL)
@@ -1522,7 +1513,7 @@ posix_name(const struct file_name *names
 }
 
 static char *
-compare_names(const struct file_name *names, bool assume_exists, int phase)
+compare_names(const struct file_name *names, bool assume_exists)
 {
 	size_t min_components, min_baselen, min_len, tmp;
 	char *best = NULL;
@@ -1539,9 +1530,7 @@ compare_names(const struct file_name *na
 	min_components = min_baselen = min_len = SIZE_MAX;
 	for (i = INDEX_FILE; i >= OLD_FILE; i--) {
 		path = names[i].path;
-		if (path == NULL ||
-		    (phase == 1 && !names[i].exists && !assume_exists) ||
-		    (phase == 2 && checked_in(path) == NULL))
+		if (path == NULL || (!names[i].exists && !assume_exists))
 			continue;
 		if ((tmp = num_components(path)) > min_components)
 			continue;
@@ -1572,17 +1561,11 @@ best_name(const struct file_name *names,
 {
 	char *best;
 
-	best = compare_names(names, assume_exists, 1);
-	if (best == NULL) {
-		best = compare_names(names, assume_exists, 2);
-		/*
-		 * Still no match?  Check to see if the diff could be creating
-		 * a new file.
-		 */
-		if (best == NULL && ok_to_create_file &&
-		    names[NEW_FILE].path != NULL)
-			best = names[NEW_FILE].path;
-	}
+	best = compare_names(names, assume_exists);
+
+	/* No match?  Check to see if the diff could be creating a new file. */
+	if (best == NULL && ok_to_create_file)
+		best = names[NEW_FILE].path;
 
 	return best ? xstrdup(best) : NULL;
 }

Modified: head/usr.bin/patch/util.c
==============================================================================
--- head/usr.bin/patch/util.c	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/util.c	Sat Aug 15 00:42:33 2015	(r286795)
@@ -399,36 +399,10 @@ fetchname(const char *at, bool *exists, 
 	return name;
 }
 
-/*
- * Takes the name returned by fetchname and looks in RCS/SCCS directories
- * for a checked in version.
- */
-char *
-checked_in(char *file)
-{
-	char		*filebase, *filedir, tmpbuf[PATH_MAX];
-	struct stat	filestat;
-
-	filebase = basename(file);
-	filedir = dirname(file);
-
-#define try(f, a1, a2, a3) \
-(snprintf(tmpbuf, sizeof tmpbuf, f, a1, a2, a3), stat(tmpbuf, &filestat) == 0)
-
-	if (try("%s/RCS/%s%s", filedir, filebase, RCSSUFFIX) ||
-	    try("%s/RCS/%s%s", filedir, filebase, "") ||
-	    try("%s/%s%s", filedir, filebase, RCSSUFFIX) ||
-	    try("%s/SCCS/%s%s", filedir, SCCSPREFIX, filebase) ||
-	    try("%s/%s%s", filedir, SCCSPREFIX, filebase))
-		return file;
-
-	return NULL;
-}
-
 void
 version(void)
 {
-	printf("patch 2.0-12u10 FreeBSD\n");
+	printf("patch 2.0-12u11 FreeBSD\n");
 	my_exit(EXIT_SUCCESS);
 }
 

Modified: head/usr.bin/patch/util.h
==============================================================================
--- head/usr.bin/patch/util.h	Fri Aug 14 22:58:32 2015	(r286794)
+++ head/usr.bin/patch/util.h	Sat Aug 15 00:42:33 2015	(r286795)
@@ -28,7 +28,6 @@
  */
 
 char		*fetchname(const char *, bool *, int);
-char		*checked_in(char *);
 int		backup_file(const char *);
 int		move_file(const char *, const char *);
 int		copy_file(const char *, const char *);


More information about the svn-src-head mailing list