Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/patch patch: add --backup-if-mismatch and --no-backu...
details: https://anonhg.NetBSD.org/src/rev/a3168b5ffd7c
branches: trunk
changeset: 376401:a3168b5ffd7c
user: wiz <wiz%NetBSD.org@localhost>
date: Fri Jun 16 11:27:00 2023 +0000
description:
patch: add --backup-if-mismatch and --no-backup-if-mismatch for GNU patch compatibility
These options only make sense in POSIX mode, since NetBSD's patch
has --backup enabled by default and GNU patch doesn't.
In POSIX mode, GNU patch and NetBSD patch now behave the same for these
two options.
diffstat:
usr.bin/patch/patch.1 | 23 ++++++++++++++++++-----
usr.bin/patch/patch.c | 21 +++++++++++++++++----
2 files changed, 35 insertions(+), 9 deletions(-)
diffs (168 lines):
diff -r eae0fdb766e4 -r a3168b5ffd7c usr.bin/patch/patch.1
--- a/usr.bin/patch/patch.1 Fri Jun 16 09:25:13 2023 +0000
+++ b/usr.bin/patch/patch.1 Fri Jun 16 11:27:00 2023 +0000
@@ -1,6 +1,6 @@
.\" $OpenBSD: patch.1,v 1.22 2008/06/06 20:44:00 jmc Exp $
.\" $DragonFly: src/usr.bin/patch/patch.1,v 1.10 2008/08/18 19:15:55 joerg Exp $
-.\" $NetBSD: patch.1,v 1.21 2017/07/03 21:34:20 wiz Exp $
+.\" $NetBSD: patch.1,v 1.22 2023/06/16 11:27:00 wiz Exp $
.\" Copyright 1986, Larry Wall
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd November 7, 2015
+.Dd June 16, 2023
.Dt PATCH 1
.Os
.Sh NAME
@@ -41,6 +41,8 @@
.Op Fl V Cm t | nil | never | none
.Op Fl x Ar number
.Op Fl z Ar backup-ext
+.Op Fl Fl backup-if-mismatch
+.Op Fl Fl no-backup-if-mismatch
.Op Fl Fl posix
.Op Ar origfile Op Ar patchfile
.Nm
@@ -100,8 +102,15 @@ backup is made.
This is equivalent to specifying
.Qo Fl V Cm existing Qc .
This option is currently the default, unless
-.Fl -posix
+.Fl Fl posix
is specified.
+.It Fl Fl backup-if-mismatch
+Create a backup file if the patch doesn't apply cleanly.
+This option only makes sense when
+.Fl Fl backup
+is disabled, i.e. when in
+.Fl Fl posix
+mode.
.It Fl C , Fl Fl check
Checks that the patch would apply cleanly, but does not modify anything.
.It Fl c , Fl Fl context
@@ -177,6 +186,10 @@ See also
Forces
.Nm
to interpret the patch file as a normal diff.
+.It Fl Fl no-backup-if-mismatch
+Turn off
+.Fl Fl backup-if-mismatch .
+This option exists mostly for compatibility with GNU patch.
.It Fl o Ar out-file , Fl Fl output Ar out-file
Causes the next argument to be interpreted as the output file name.
.It Fl p Ar strip-count , Fl Fl strip Ar strip-count
@@ -604,7 +617,7 @@ utility is compliant with the
.St -p1003.1-2004
specification
(except as detailed above for the
-.Fl -posix
+.Fl Fl posix
option),
though the presence of
.Nm
@@ -613,7 +626,7 @@ itself is optional.
The flags
.Op Fl CEfstuvBFVxz
and
-.Op Fl -posix
+.Op Fl Fl posix
are extensions to that specification.
.Sh AUTHORS
.An Larry Wall
diff -r eae0fdb766e4 -r a3168b5ffd7c usr.bin/patch/patch.c
--- a/usr.bin/patch/patch.c Fri Jun 16 09:25:13 2023 +0000
+++ b/usr.bin/patch/patch.c Fri Jun 16 11:27:00 2023 +0000
@@ -1,7 +1,7 @@
/*
* $OpenBSD: patch.c,v 1.45 2007/04/18 21:52:24 sobrado Exp $
* $DragonFly: src/usr.bin/patch/patch.c,v 1.10 2008/08/10 23:39:56 joerg Exp $
- * $NetBSD: patch.c,v 1.33 2021/09/20 23:22:36 dholland Exp $
+ * $NetBSD: patch.c,v 1.34 2023/06/16 11:27:00 wiz Exp $
*/
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: patch.c,v 1.33 2021/09/20 23:22:36 dholland Exp $");
+__RCSID("$NetBSD: patch.c,v 1.34 2023/06/16 11:27:00 wiz Exp $");
#include <sys/types.h>
#include <sys/stat.h>
@@ -91,6 +91,7 @@ int diff_type = 0;
char *revision = NULL; /* prerequisite revision, if any */
LINENUM input_lines = 0; /* how long is input file in lines */
int posix = 0; /* strict POSIX mode? */
+int backup_if_mismatch = -1;/* create backup file when patch doesn't apply cleanly */
static void reinitialize_almost_everything(void);
static void get_some_switches(void);
@@ -374,12 +375,17 @@ main(int argc, char *argv[])
char *realout = outname;
if (!check_only) {
+ /* handle --backup-if-mismatch */
+ enum backup_type saved = backup_type;
+ if (failed > 0 && backup_if_mismatch > 0 && backup_type == none)
+ backup_type = simple;
if (move_file(TMPOUTNAME, outname) < 0) {
toutkeep = true;
realout = TMPOUTNAME;
chmod(TMPOUTNAME, filemode);
} else
chmod(outname, filemode);
+ backup_type = saved;
if (remove_empty_files &&
stat(realout, &statbuf) == 0 &&
@@ -410,7 +416,7 @@ main(int argc, char *argv[])
say("%d out of %d hunks ignored--saving rejects to %s\n",
failed, hunk, rejname);
} else {
- say("%d out of %d hunks failed--saving rejects to %s\n",
+ say("%d out of %d hunks FAILED -- saving rejects to %s\n",
failed, hunk, rejname);
}
if (!check_only && move_file(TMPREJNAME, rejname) < 0)
@@ -462,6 +468,7 @@ get_some_switches(void)
const char *options = "b::B:cCd:D:eEfF:i:lnNo:p:r:RstuvV:x:z:";
static struct option longopts[] = {
{"backup", no_argument, 0, 'b'},
+ {"backup-if-mismatch", no_argument, &backup_if_mismatch, 1},
{"batch", no_argument, 0, 't'},
{"check", no_argument, 0, 'C'},
{"context", no_argument, 0, 'c'},
@@ -474,6 +481,7 @@ get_some_switches(void)
{"ifdef", required_argument, 0, 'D'},
{"input", required_argument, 0, 'i'},
{"ignore-whitespace", no_argument, 0, 'l'},
+ {"no-backup-if-mismatch", no_argument, &backup_if_mismatch, 0},
{"normal", no_argument, 0, 'n'},
{"output", required_argument, 0, 'o'},
{"prefix", required_argument, 0, 'B'},
@@ -620,6 +628,10 @@ get_some_switches(void)
if (getenv("POSIXLY_CORRECT") != NULL)
posix = 1;
+
+ if (backup_if_mismatch == -1) {
+ backup_if_mismatch = posix ? 0 : 1;
+ }
}
static void
@@ -629,7 +641,8 @@ usage(void)
"usage: patch [-bCcEeflNnRstuv] [-B backup-prefix] [-D symbol] [-d directory]\n"
" [-F max-fuzz] [-i patchfile] [-o out-file] [-p strip-count]\n"
" [-r rej-name] [-V t | nil | never] [-x number] [-z backup-ext]\n"
-" [--posix] [origfile [patchfile]]\n"
+" [--backup-if-mismatch] [--no-backup-if-mismatch] [--posix]\n"
+" [origfile [patchfile]]\n"
" patch <patchfile\n");
my_exit(EXIT_FAILURE);
}
Home |
Main Index |
Thread Index |
Old Index