summaryrefslogtreecommitdiffstats
path: root/usr.bin/patch
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2015-08-15 00:42:33 +0000
committerdelphij <delphij@FreeBSD.org>2015-08-15 00:42:33 +0000
commitd47d0c107187fca9965346606d70000542f92cd8 (patch)
tree18ce7f617e81f20f59fa1b183f5a90a1139721b7 /usr.bin/patch
parent90cb8019dfa4d9b02d75edd12a7e2e1214778746 (diff)
downloadFreeBSD-src-d47d0c107187fca9965346606d70000542f92cd8.zip
FreeBSD-src-d47d0c107187fca9965346606d70000542f92cd8.tar.gz
Remove automatic checkout feature.
Obtained from: DragonFly via OpenBSD Relnotes: yes MFC: never
Diffstat (limited to 'usr.bin/patch')
-rw-r--r--usr.bin/patch/common.h6
-rw-r--r--usr.bin/patch/inp.c97
-rw-r--r--usr.bin/patch/patch.119
-rw-r--r--usr.bin/patch/pch.c35
-rw-r--r--usr.bin/patch/util.c28
-rw-r--r--usr.bin/patch/util.h1
6 files changed, 19 insertions, 167 deletions
diff --git a/usr.bin/patch/common.h b/usr.bin/patch/common.h
index f33abcf..2cdeaff 100644
--- a/usr.bin/patch/common.h
+++ b/usr.bin/patch/common.h
@@ -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"
diff --git a/usr.bin/patch/inp.c b/usr.bin/patch/inp.c
index f4daeae..19536da 100644
--- a/usr.bin/patch/inp.c
+++ b/usr.bin/patch/inp.c
@@ -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);
diff --git a/usr.bin/patch/patch.1 b/usr.bin/patch/patch.1
index 25adf5f..e8478fc 100644
--- a/usr.bin/patch/patch.1
+++ b/usr.bin/patch/patch.1
@@ -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 to have the
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, the
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.
diff --git a/usr.bin/patch/pch.c b/usr.bin/patch/pch.c
index 5fadf62..cae7bf4 100644
--- a/usr.bin/patch/pch.c
+++ b/usr.bin/patch/pch.c
@@ -1501,17 +1501,8 @@ posix_name(const struct file_name *names, bool assume_exists)
}
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, bool assume_exists)
}
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 *names, bool assume_exists, int phase)
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, bool assume_exists)
{
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;
}
diff --git a/usr.bin/patch/util.c b/usr.bin/patch/util.c
index 1859e17..39a2eed 100644
--- a/usr.bin/patch/util.c
+++ b/usr.bin/patch/util.c
@@ -399,36 +399,10 @@ fetchname(const char *at, bool *exists, int strip_leading)
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);
}
diff --git a/usr.bin/patch/util.h b/usr.bin/patch/util.h
index ff2feab..2ef6b2f 100644
--- a/usr.bin/patch/util.h
+++ b/usr.bin/patch/util.h
@@ -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 *);
OpenPOWER on IntegriCloud