The path stripping directive '-p'
The -p argument directs patch to strip a certain number of leading directories from a diff generated path when applying the patch to the current working directory. The -p directive is immediately followed by a number representing the number of leading directories to strip when applying the patch. For instance, given the following diff line snippet from e.patch,
--- linux-2.6.15-rc5/include/asm-powerpc/hvconsole.h 2005-12-19 10:49:35.136173560 -0500 +++ linux-2.6.15-rc5-new/include/asm-powerpc/hvconsole.h 2005-12-19 10:57:35.101154584 -0500
And given the following directory structure,
«user@host»:~/kernels/linux-2.6.15-rc5§ ls arch Documentation init MAINTAINERS REPORTING-BUGS block drivers ipc Makefile scripts COPYING e.patch Kbuild mm security CREDITS fs kernel net sound crypto include lib README usr
The following 'patch' invocation:
«user@host»:~/kernels/linux-2.6.15-rc5§ patch -p1 < example.patch
will strip the leading directory linux-2.6.15-rc5-new from the diff string "linux-2.6.15-rc5-new/include/asm-powerpc/hvconsole.h" and apply the patch to the local include/ directory.
The Linux Kernel Mailing List and all other related Linux related mailing lists require that patches be created with a leading directory, such that patch -p1 applies the patch when the current working directory is in the kernel tree base directory, as indicated by the example.
Test apply with '--dry-run'
The --dry-run directive can be passed to the patch application on invocation to direct patch to simulate the apply. This is useful to determine whether the patch will apply cleanly to the directory tree presently in the current directory. It is invoked as follows:
«user@host»:~/kernels/linux-2.6.15-rc5§ patch --dry-run -p1 < example.patch