From owner-svn-src-head@freebsd.org Sat Aug 15 00:42:35 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D1769B72E1; Sat, 15 Aug 2015 00:42:35 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7A75F1D6D; Sat, 15 Aug 2015 00:42:35 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7F0gZvO055834; Sat, 15 Aug 2015 00:42:35 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7F0gXbY055825; Sat, 15 Aug 2015 00:42:33 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201508150042.t7F0gXbY055825@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Sat, 15 Aug 2015 00:42:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r286795 - head/usr.bin/patch X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2015 00:42:35 -0000 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 *);