Removendo a barra raiz com '-p1' e assim por diante [duplicada]

0

Entendo que patch permite o patch de aplicativos quando alguns componentes do caminho são removidos.

Enquanto o argumento -p0 tratará um caminho como é :

/var/www/html/example.com

-p1 removerá a barra raiz, então o caminho com o qual trabalhamos se torna:

var/www/html/example.com

Por que alguém iria querer remover a barra raiz (ou qualquer componente anterior de um caminho), e não apenas corrigir um caminho completo?

Eu posso ver uma lógica de aprofundamento em uma árvore de diretórios por um caminho relativo, mas sinto falta de ser prático ou útil na grande maioria dos casos.

    
por JohnDoea 27.10.2018 / 17:00

2 respostas

4

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 gives

u/howard/src/blurfl/blurfl.c

without the leading slash.

-p4 gives

blurfl/blurfl.c

Ele continua dizendo:

Not specifying -p at all just gives you blurfl.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).

    
por 29.10.2018 / 12:46
0

O comando patch lê as instruções de um arquivo de origem sobre como alterar um arquivo e, em seguida, aplica as mudanças (para mais detalhes ). E passar a flag -pN pular N as barras iniciais dos nomes de arquivos presentes no arquivo de patch.
É sobre uma parte do diretório no cabeçalho diff . No seu caso, o cabeçalho diff contan esta string: /var/www/html/example.com . Se você usar o sinalizador -p1, o utilitário de correção removerá esse diretório principal de string e obterá um var/www/html/example.com , o qual você deseja corrigir. Com o parâmetro -p0, o patch não tira nada dessa string e não funcionará corretamente.

Por exemplo:
Para o patch de invocação adequada do arquivo SSH2.xs (arquivo de patch localizado aqui: rt.cpan.org/Public /Bug/Display.html?id=36614 ):

patch -p1 < net-ssh2-0.18-perl5.10.patch

arquivo de correção contém um diretório Net-SSH-0.18.orig que você remove antes do patch e acima deve ser executado a partir do diretório onde o arquivo SSH2.x2 está lá.

Referência:
1. -p0 vs -p1
2. Página do manual - IBM

    
por 30.10.2018 / 14:14

Tags