Como aplicar um patch simples (reverso detectado)

2

Estou tentando criar e aplicar um patch simples para corrigir um bug com gradle .

Eu copio o arquivo (/ usr / bin / gradle) para o meu diretório de trabalho e faço a alteração. Eu então crio o patch:

diff -u /usr/bin/gradle gradle > gradle.patch

Então eu tento aplicá-lo:

sudo patch < gradle.patch
Reversed (or previously applied) patch detected!  Assume -R? [n]

Se eu continuar de qualquer forma, isso falhará. Eu tentei gerar o patch com os arquivos invertidos e, neste caso, aplica-se "com sucesso", mas não faz nada.

O patch gerado é assim:

--- /usr/bin/gradle 2013-09-09 16:47:58.000000000 -0400
+++ gradle  2015-10-13 11:39:36.005269565 -0400
@@ -67,7 +67,8 @@

 CLASSPATH=$APP_HOME/lib/gradle-launcher-1.4.jar

-export JAVA_HOME=/usr/lib/jvm/default-java
+# commenting out as per (https://stackoverflow.com/a/22309017)
+# export JAVA_HOME=/usr/lib/jvm/default-java

 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then

Eu tentei editar os caminhos dos arquivos na parte superior do patch para ambos / usr / bin / gradle, mas isso não ajuda.

Eu também tentei passar -p0, caso em que ele dá:

Ignoring potentially dangerous file name /usr/bin/gradle
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- /usr/bin/gradle    2013-09-09 16:47:58.000000000 -0400
|+++ /usr/bin/gradle    2015-10-13 11:39:36.005269565 -0400
--------------------------
File to patch: /usr/bin/gradle
File /usr/bin/gradle is not a regular file -- refusing to patch
1 out of 1 hunk ignored -- saving rejects to file /usr/bin/gradle.rej

Quando eu especificar o arquivo neste caso, ele ainda falhará.

Isso parece uma tarefa simples, o que estou fazendo de errado?

    
por Alex 13.10.2015 / 17:45

1 resposta

2

Você precisa corrigir o arquivo correto.

A maneira como você o chama, ele tentará corrigir o novo arquivo e, assim, corretamente assume um patch invertido.

Tente copiar uma versão antiga do arquivo para o seu diretório atual e o patch será aplicado.

Em relação ao seu teste -p0 : você tem permissão para modificar / usr / bin / gradle? Você tem permissão para criar arquivos em / usr / bin?

Observe também que há regras divergentes para fazer com que o nome do arquivo seja corrigido.

As regras usadas por gpatch são diferentes do patch original e do padrão de patch POSIX.

Observe que a mensagem "não é um arquivo normal" é específica de gpatch . Por favor, liste o arquivo /usr/bin/gradle . A mensagem é impressa somente quando o arquivo não é um arquivo normal, então algo parece estranho.

Então a solução é:

patch apenas corrige arquivos simples, mas o arquivo que você deseja corrigir é um link simbólico.

Se você tiver uma cópia do arquivo simples (versão antiga) em seu diretório atual, o patch fará o que você espera.

BTW: a regra usual para obter o nome do arquivo para patch é procurar o nome mais curto como a convenção de nomenclatura usual é usar:

file.orig

e

file

    
por 13.10.2015 / 17:57

Tags