O utilitário patch
é um utilitário POSIX e a seção Rationale no padrão especificação do utilitário dá um exemplo do uso da opção -p
:
The
-p
option makes it possible to customize a patch file to local user directory structures without manually editing the patch file. For example, if the filename in the patch file was:/curds/whey/src/blurfl/blurfl.c
Setting
-p 0
gives the entire pathname unmodified;-p 1
gives:curds/whey/src/blurfl/blurfl.c
without the leading
<slash>
,-p 4
gives:blurfl/blurfl.c
and not specifying -p at all gives:
blurfl.c
O manual do OpenBSD também tem um exemplo similar, mas ligeiramente expandido, de quando usar -p
pode ser útil (minha ênfase):
-p strip-count
,--strip strip-count
Sets the pathname strip count, which controls how pathnames found in the patch file are treated, in case you keep your files in a different directory than the person who sent out the patch. The strip count specifies how many slashes are to be stripped from the front of the pathname. (Any intervening directory names also go away.) For example, supposing the file name in the patch file was
/u/howard/src/blurfl/blurfl.c
:Setting
-p0
gives the entire pathname unmodified.
-p1
givesu/howard/src/blurfl/blurfl.c
without the leading slash.
-p4
givesblurfl/blurfl.c
Ele continua dizendo:
Not specifying
-p
at all just gives youblurfl.c
, unless all of the directories in the leading path (u/howard/src/blurfl
) exist and that path is relative, in which case you get the entire pathname unmodified. Whatever you end up with is looked for either in the current directory, or the directory specified by the-d
option.
Ou seja, se você receber um patch com caminhos absolutos para os arquivos aos quais ele se aplica e manter esses arquivos em um diretório diferente, poderá usar -p
com o número apropriado para "compensar" o caminhos no patch do diretório especificado por -d
(ou o diretório atual).