START: ptest-runner
2026-10-20T06:32
* patch < a.diff -- ok
* patch < a.diff -- ok
* patch < a.diff -- ok
* patch < a.diff -- ok
4 tests (4 passed, 0 failed)
PASS: asymmetric-hunks
* patch -b -p1 < ab.diff -- ok
* cat f.orig -- ok
* patch -b -B prefix. -p1 < ab.diff -- ok
* cat prefix.f -- ok
* patch -b -z .suffix -p1 < ab.diff -- ok
* cat f.suffix -- ok
* patch -b -B prefix. -z .suffix -p1 < ab.diff -- ok
* cat prefix.f.suffix -- ok
* patch -b -p1 < ab.diff -- ok
* cat f.bak -- ok
* patch -b -p1 < ab.diff -- ok
* cat f.~2~ -- ok
* patch -b -p1 < ab.diff -- ok
* cat f.~3~ -- ok
* patch -b -p1 < ab.diff -- ok
* cat d/f.orig -- ok
* patch -b -B orig/ -p1 < ab.diff -- ok
* cat orig/d/f -- ok
* patch -b -B orig/ -z .orig -p1 < ab.diff -- ok
* cat orig/d/f.orig -- ok
* patch -b -Y .orig/ -p1 < ab.diff -- ok
* cat d/.orig/f -- ok
* patch -b -Y .orig/ -z .orig -p1 < ab.diff -- ok
* cat d/.orig/f.orig -- ok
24 tests (24 passed, 0 failed)
PASS: backup-prefix-suffix
* emit_patch ../z | patch -f -p1 --dry-run || echo status: $? -- ok
* emit_patch /absolute/path | patch -f -p0 --dry-run || echo status: $? -- ok
* emit_patch $filename | (cd / && patch -f -p0 --dry-run) || echo status: $? -- ok
* emit_patch a/../z | patch -f -p0 --dry-run || echo status: $? -- ok
* emit_patch a/../z | patch -f -p1 --dry-run || echo status: $? -- ok
* emit_patch ../z | patch -f -p0 --dry-run || echo status: $? -- ok
* patch -f -p0 --dry-run < d.diff || echo status: $? -- ok
* patch -f -p0 --dry-run < d.diff || echo status: $? -- ok
* patch -f -p1 --dry-run < d.diff || echo status: $? -- ok
* 
    emit_patch '"a\nb"' | patch   >patch.out 2>&1
    status=$?
    sed "$fixup" patch.out
    echo status: $status
   -- ok
* 
    emit_patch 'foo' | patch 'a
b'  >patch.out 2>&1
    status=$?
    sed "$fixup" patch.out
    echo status: $status
   -- ok
* 
    emit_patch 'foo' | patch '-o' 'a
b' >patch.out 2>&1
    status=$?
    sed "$fixup" patch.out
    echo status: $status
   -- ok
* emit_patch_with_NUL | patch; echo status: $? -- ok
* patch -f -p0 < d.diff || echo status: $? -- ok
14 tests (14 passed, 0 failed)
PASS: bad-filenames
* patch -px || echo "status: $?" -- ok
1 tests (1 passed, 0 failed)
PASS: bad-usage
* patch -p1 < concatenated.diff || echo "Status: $?" -- ok
* cat f -- ok
* patch -p1 < concat2.diff || echo "Status: $?" -- ok
* cat f -- ok
* patch -p1 < concat3.diff || echo "Status: $?" -- ok
* cat f -- ok
6 tests (6 passed, 0 failed)
PASS: concat-git-diff
* patch < ab.diff -- ok
* patch < ab.diff -- ok
* patch < ab.diff -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-patching file a
+/usr/bin/patch: **** replacement text or line numbers mangled in hunk at line 4
* echo `cat a` -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-a a a a a a a a a a
+a a a a a b a a a a a
* patch < ba.diff -- ok
* echo `cat a` -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-a a a a a b a a a a a
+a a a a a b b a a a a a
* patch < ab.diff -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-patching file a
+/usr/bin/patch: **** replacement text or line numbers mangled in hunk at line 4
* echo `cat a` -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-a a a a a a a a a a
+a a a a a a a a a a b
* patch < ba.diff -- ok
* echo `cat a` -- FAILED
--- expected
+++ got
@@ -1 +1 @@
-a a a a a a a a a a b
+a a a a a a a a a a b b
10 tests (4 passed, 6 failed)
PASS: context-format (expected failure)
* patch -p1 < copy.diff || echo "Status: $?" -- ok
* cat f -- ok
* cat g -- ok
* patch -p1 < rename.diff || echo "Status: $?" -- ok
* test ! -e f -- ok
* cat h -- ok
* patch -p1 < rename.diff || echo "Status: $?" -- ok
* test ! -e f -- ok
* cat h -- ok
* patch -p1 -R < rename.diff || echo "Status: $?" -- ok
* test ! -e h -- ok
* cat f -- ok
* patch -p1 < copy.diff || echo "Status: $?" -- ok
* cat f -- ok
* cat g -- ok
* patch -p1 < rename.diff || echo "Status: $?" -- ok
* test ! -e f -- ok
* cat h -- ok
* patch -p1 --backup < copy.diff || echo "Status: $?" -- ok
* test ! -e f.orig -- ok
* cat g.orig -- ok
* patch -p1 --backup < rename.diff || echo "Status: $?" -- ok
* cat f.orig -- ok
* cat h.orig -- ok
24 tests (24 passed, 0 failed)
PASS: copy-rename
* patch -p1 -i test.diff -- ok
* cat test -- ok
2 tests (2 passed, 0 failed)
PASS: corrupt-patch
* patch a < ab.diff || echo "Status: $?" -- ok
* cat -ve a.rej -- ok
2 tests (2 passed, 0 failed)
PASS: corrupt-reject-files
* patch -f -p1 < f.diff || echo "Status: $?" -- ok
* patch -f < f.diff || echo "Status: $?" -- ok
* patch -p0 < f.diff || echo "Status: $?" -- ok
* patch -p0 -f < f.diff || echo "Status: $?" -- ok
* patch -f f < f.diff || echo "Status: $?" -- ok
* ! test -s f.orig -- ok
* patch -f < f.diff || echo "Status: $?" -- ok
* patch -p0 -t < f.diff || echo "Status: $?" -- ok
* cat f -- ok
* patch -p0 -t < f.diff || echo "Status: $?" -- ok
* cat f -- ok
* patch -p0 < p.diff || echo status: $? -- ok
* cat target -- ok
* patch -p0 < p.diff || echo status: $? -- ok
* cat target -- ok
* patch -p1 -b < p.diff || echo status: $? -- ok
* test -e target -- ok
* test -e target.orig -- ok
* patch -p0 < p.diff || echo status: $? -- ok
* cat target -- ok
* patch -p0 -E < p.diff || echo status: $? -- ok
* test ! -e target -- ok
* patch -p1 -b -f < p.diff || echo status: $? -- ok
* test ! -e target -- ok
* cat target.orig -- ok
* patch -p1 -b --posix -f < p.diff || echo status: $? -- ok
* cat target -- ok
* cat target.orig -- ok
28 tests (28 passed, 0 failed)
PASS: create-delete
* patch -p0 < f.diff -- ok
* patch -p0 --dry-run < f.diff -- ok
2 tests (2 passed, 0 failed)
PASS: create-directory
* patch -p1 < criss-cross-rename.diff || echo "Status: $?" -- ok
* cat f -- ok
* cat g -- ok
* seq 1 1000 > a -- ok
* patch -p1 < modified-twice.diff || echo "Status: $?" -- ok
* cat a -- ok
* cat b -- ok
7 tests (7 passed, 0 failed)
PASS: criss-cross
* patch c < ab.diff -- ok
* patch c < ab.diff -- ok
* patch c < ab.diff -- ok
The ed utility is not available; skipping ed related tests
* patch c < ab.diff -- ok
* cat -ve c -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
The ed utility is not available; skipping ed related tests
* cat -ve c -- ok
* patch --binary c < ab.diff || echo status: $? -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
* patch --binary c < ab.diff -- ok
* cat -ve c -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
* patch --binary c < ab.diff -- ok
* cat -ve c -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
* patch --binary c < ab.diff -- ok
* cat -ve c -- ok
* patch c < ab.diff -- ok
* cat -ve c -- ok
25 tests (25 passed, 0 failed)
PASS: crlf-handling
* patch -o a.new a < a.diff -- FAILED
--- expected
+++ got
@@ -1,2 +1,4 @@
 patching file a.new (read from a)
 patching file a.new (read from a)
+Hunk #1 FAILED at 1.
+1 out of 1 hunk FAILED -- saving rejects to file a.new.rej
* cat a.new -- FAILED
--- expected
+++ got
@@ -1,2 +1,2 @@
 two
-three
+one
2 tests (0 passed, 2 failed)
PASS: dash-o-append (expected failure)
* patch -p1 < ab.diff || echo Status: $? -- ok
1 tests (1 passed, 0 failed)
PASS: deep-directories
This test requires the ed utility
SKIP: ed-style
* patch < create-empty.diff || echo "Status: $?" -- ok
* test -e f && test ! -s f -- ok
* patch < empty-out.diff || echo "Status: $?" -- ok
* test -e f && test ! -s f -- ok
* patch -E < empty-out.diff || echo "Status: $?" -- ok
* test ! -e f -- ok
* patch < delete-empty.diff || echo "Status: $?" -- ok
* test ! -e f -- ok
8 tests (8 passed, 0 failed)
PASS: empty-files
* patch < a.diff || echo status: $? -- ok
1 tests (1 passed, 0 failed)
PASS: false-match
* patch --dry-run < f.diff -- ok
* patch --dry-run -i f.diff -- ok
* patch --dry-run < fifo -- ok
* patch --dry-run -i fifo -- ok
4 tests (4 passed, 0 failed)
PASS: fifo
* patch -p1 < f.diff -- ok
* ls -l f g | sed "s,\(..........\).*,\1," -- ok
* patch -p1 -R < f.diff -- ok
* ! test -e f -o -e g || echo fail -- ok
4 tests (4 passed, 0 failed)
PASS: file-create-modes
* patch -p1 < f.diff -- ok
* ls -l f g | sed "s,\(..........\).*,\1," -- ok
* patch -p1 -R < f.diff -- ok
* ls -l f g | sed "s,\(..........\).*,\1," -- ok
* patch -p1 < g.diff || echo "Status: $?" -- ok
* ls -l f g | sed "s,\(..........\).*,\1," -- ok
6 tests (6 passed, 0 failed)
PASS: file-modes
* patch -p0 < f.diff -- ok
* cat f -- ok
2 tests (2 passed, 0 failed)
PASS: filename-choice
* patch foo -i bad.diff || echo "Status: $?" -- ok
1 tests (1 passed, 0 failed)
PASS: garbage
* patch -p1 < f.diff || echo "Status: $?" -- ok
1 tests (1 passed, 0 failed)
PASS: git-binary-diff
* patch -f -i 1.diff || echo status: $? -- ok
* cat f -- ok
* cat f.rej -- ok
* cat g -- ok
* cat g.rej -- ok
5 tests (5 passed, 0 failed)
PASS: git-cleanup
* patch -p0 < ab.diff -- ok
* patch -p0 -f < ab.diff || echo "Status: $?" -- ok
* cat a.rej -- ok
* cat b.rej -- ok
* patch -p0 -f -r ab.rej < ab.diff || echo "Status: $?" -- ok
* cat ab.rej -- ok
6 tests (6 passed, 0 failed)
PASS: global-reject-files
* patch -p0 < fg.diff -- ok
* cat f.orig -- ok
* cat g.orig -- ok
3 tests (3 passed, 0 failed)
PASS: hardlinks
* patch x < f.diff -- ok
* cat x -- ok
* patch ../file1 < g.diff -- ok
3 tests (3 passed, 0 failed)
PASS: inname
* patch -f --verbose a < a.diff | grep ^Hunk -- ok
* cat a -- ok
* patch -f --verbose a < a.diff | grep ^Hunk -- ok
* cat a -- ok
4 tests (4 passed, 0 failed)
PASS: line-numbers
* patch a < bogus.diff; echo "Status: $?" -- ok
1 tests (1 passed, 0 failed)
PASS: mangled-numbers-abort
* x 3 -- ok
* x 3  2d -- ok
* x 2  2i\\ b -- ok
* x 3  2i\\ b -- 3i\\ c -- ok
* x 3  2c\\ 2b -- 2c\\ 2c -- ok
* x 3  2d -- 2d -- ok
* x 2  2i\\ bc -- 2i\\ bc -- ok
* x 4  2a\\ a 2a\\ a -- 2a\\ a 2a\\ a -- ok
* x 2  1i\\ a 1i\\ b -- 1i\\ a 1i\\ b -- ok
* x 2  2a\\ a 2a\\ b -- 2a\\ a 2a\\ b -- ok
* x 4  2d -- 3d -- ok
* x 4  3d -- 2d -- ok
* x 3  3i\\ b -- 2d -- ok
* x 3  2d -- 3i\\ b -- ok
* x 1  1c\\ b -- 1c\\ c -- ok
* x 4  2c\\ a 3c\\ b -- 2c\\ a 3c\\ c -- ok
* x 6  3c\\ 3b 4c\\ 4b -- 3c\\ 3c 4c\\ 4c -- ok
* x 4  2c\\ b 3c\\ a -- 2c\\ c 3c\\ a -- ok
* x 3  2i\\ b 3i\\ b -- 2i\\ c -- ok
* x 3  2i\\ b 3i\\ b 3i\\ b -- 2i\\ c -- ok
* x 9  4c\\ a 5c\\ b 6c\\ a -- 4c\\ a 5c\\ c 6c\\ a -- ok
* x 3  2i\\ b 3i\\ b -- 1i\\ 0 -- ok
* x 4  2i\\ b 4i\\ b -- 1i\\ 0 3i\\ c -- ok
* x 5  2,4d -- 3c\\ 3c -- ok
* x 5  3c\\ 3c -- 2,4d -- ok
* x 3  1,2d -- 2i\\ c -- ok
* x 3  2i\\ c -- 1,2d -- ok
27 tests (27 passed, 0 failed)
PASS: merge
* patch --dry-run < mixed1.diff || echo "Status: $?" -- ok
* patch --dry-run < mixed2.diff || echo "Status: $?" -- ok
2 tests (2 passed, 0 failed)
PASS: mixed-patch-types
* patch < ab.diff -- ok
* patch < c.diff -- ok
2 tests (2 passed, 0 failed)
PASS: munged-context-format
* patch < n.diff || echo "Status: $?" -- ok
* patch -f -n < n.diff || echo "Status: $?" -- ok
* patch f < n.diff -- ok
The ed utility is not available; skipping ed related tests
* patch < h+c.diff -- ok
* cat f -- ok
* patch < c.diff || echo "Status: $?" -- ok
* patch f < c.diff -- ok
* cat f -- ok
* patch < h+u.diff -- ok
* cat f -- ok
* patch < u.diff || echo "Status: $?" -- ok
* patch f < u.diff -- ok
* cat f -- ok
13 tests (13 passed, 0 failed)
PASS: need-filename
* patch -N --no-backup-if-mismatch <my_file.patch || echo "Status: $?" -- ok
* test ! -f my_file.orig -- ok
2 tests (2 passed, 0 failed)
PASS: no-backup
* patch -p1 < simple.diff || echo "Status:  $?" -- ok
* ls -l f | sed "s,\(..........\).*,\1," -- ok
2 tests (2 passed, 0 failed)
PASS: no-mode-change-git-diff
* patch -p0 < f.diff -- ok
1 tests (1 passed, 0 failed)
PASS: no-newline-triggers-assert
* patch c < ab.diff || cat c.rej -- ok
1 tests (1 passed, 0 failed)
PASS: preserve-c-function-names
* patch -p1 --backup --set-utc < f.diff -- ok
* test ! \( f -ot f.compare -o f -nt f.compare \) || echo "timestamp differs" -- ok
* ls -l f.orig | sed "s,\(..........\).*,\1," -- ok
* patch -p1 --backup --set-utc < f.diff || echo "Status: $?" -- ok
* ls -l f.rej | sed "s,\(..........\).*,\1," -- ok
* patch -p1 --backup --set-utc < f.diff || echo "Status: $?" -- ok
* ls -l f.rej | sed "s,\(..........\).*,\1," -- ok
* patch -p1 --backup --set-utc < f.diff -- ok
* test ! \( f -ot f.compare -o f -nt f.compare \) || echo "timestamp differs" -- ok
9 tests (9 passed, 0 failed)
PASS: preserve-mode-and-timestamp
* echo one > "	  " -- ok
* patch -s -p0 < d.diff -- ok
* cat "	  " -- ok
* patch -f < e.diff; echo status: $? -- ok
4 tests (4 passed, 0 failed)
PASS: quoted-filenames
Files with read-only permissions are writable (probably running as superuser)
SKIP: read-only-files
* patch f < f.diff -- ok
* cat f -- ok
2 tests (2 passed, 0 failed)
PASS: regression-abe92e8010ab
* patch -f -F0 --no-backup-if-mismatch --dry-run f < f.diff || echo "Status: $?" -- ok
* patch -f -F0 --no-backup-if-mismatch f < f.diff || echo "Status: $?" -- ok
* cat f.rej -- ok
* patch -f -F0 --no-backup-if-mismatch f < f1.diff || echo "Status: $?" -- ok
* cat f.rej -- ok
* patch -f -F0 --no-backup-if-mismatch --reject-format=unified f < f.diff || echo "Status: $?" -- ok
* cat f.rej -- ok
* patch -f -F0 --no-backup-if-mismatch --reject-format=context f < f1.diff || echo "Status: $?" -- ok
* cat f.rej -- ok
* patch -f < ab.diff || echo "Status: $?" -- ok
* cat a.rej -- ok
11 tests (11 passed, 0 failed)
PASS: reject-format
* patch -p0 < f.diff -- ok
* cat f.orig -- ok
* patch --backup -p0 < f.diff -- ok
* cat f.orig -- ok
* cat f -- ok
5 tests (5 passed, 0 failed)
PASS: remember-backup-files
* patch -p0 < f.diff || echo "Status: $?" -- ok
* cat f.rej -- ok
2 tests (2 passed, 0 failed)
PASS: remember-reject-files
* patch -p0 -E < apatch -- ok
* ! test -e dir -- ok
2 tests (2 passed, 0 failed)
PASS: remove-directories
* ln -s f l -- ok
* patch < create.diff || echo "Status: $?" -- ok
* cat f -- ok
* ln -s f l -- ok
* patch < modify.diff || echo "Status: $?" -- ok
* patch --follow-symlinks < modify.diff || echo "Status: $?" -- ok
* cat f -- ok
* cat l -- ok
* ln -s f l -- ok
* patch < delete.diff || echo "Status: $?" -- ok
* patch -p1 < create-symlink.diff || echo "Status: $?" -- ok
* echo a > target1 && cat symlink -- ok
* echo b > target1 && cat symlink -- ok
* patch -p1 < modify-symlink.diff || echo "Status: $?" -- ok
* echo a > target2 && cat symlink -- ok
* echo b > target2 && cat symlink -- ok
* patch -p1 < delete-symlink.diff || echo "Status: $?" -- ok
* test ! -L symlink -- ok
* patch -p0 < f.diff || echo "Status: $?" -- ok
* mkdir abc -- ok
* mkdir abc/def -- ok
* patch -p0 < retraverse.diff || echo "Status: $?" -- ok
* patch -p0 < ld.diff -- ok
* patch -p0 < eld.diff -- ok
* patch -p0 -R < eld.diff -- ok
* patch -p0 < follow-bad-symlink.diff || echo "Status: $?" -- ok
* patch -p1 < symlink-target.diff || echo "Status: $?" -- ok
* patch -f -p1 < follow-symlink.diff || echo "Status: $?" -- ok
* cat bar -- ok
* patch -p1 < bad-symlink-target1.diff || echo "Status: $?" -- ok
* patch -p1 < bad-symlink-target2.diff || echo "Status: $?" -- ok
* patch -p0 < good-absolute.diff -- ok
* patch -p1 --backup < create-symlink.diff || echo "Status: $?" -- ok
* test -f symlink.orig && test ! -s symlink.orig -- ok
* patch -p1 --backup < modify-symlink.diff || echo "Status: $?" -- ok
* echo a > symlink.orig && cat target1 -- ok
* echo b > symlink.orig && cat target1 -- ok
* patch -p1 --backup < delete-symlink.diff || echo "Status: $?" -- ok
* echo a > symlink.orig && cat target2 -- ok
* echo b > symlink.orig && cat target2 -- ok
* mkdir d -- ok
* ln -sf d l -- ok
* patch -p1 -i l/ab.diff -- ok
43 tests (43 passed, 0 failed)
PASS: symlinks
* patch -b -B backup/ a < a.diff || echo "Status: $?" -- ok
* test a -ef a.first -- ok
* cat backup/a -- ok
* patch -o b a < a.diff -- ok
* cat b -- ok
5 tests (5 passed, 0 failed)
PASS: unmodified-files
* patch -p1 -i test.diff -- ok
* cat test -- ok
2 tests (2 passed, 0 failed)
PASS: unusual-blanks
DURATION: 26
