Executando “patch” sem gerar arquivos * .orig e * .rej

15

É possível dizer a patch para não gerar .orig e .rej arquivos? Eu acho extremamente irritante que o patch crie isso.

    
por TheLegassis 25.09.2012 / 08:50

6 respostas

11

Se você não está dando nenhuma opção para patch diferente de -pN , ele cria apenas esses arquivos quando um patch não se aplica corretamente.

Então, uma opção é parar de criar (ou aceitar) patches ruins. :)

De volta ao mundo real, isso é uma característica. Quando patch(1) não aplica um segmento de correção ao arquivo original, ele salva a cópia do arquivo original temporário como *.orig , copia o segmento rejeitado para *.rej e continua tentando aplicar segmentos de correção. A ideia é que você possa abrir o arquivo *.rej e concluir o processo de correção manualmente, copiando os bits e as peças para o arquivo corrigido. O arquivo *.orig também pode ser útil quando o processo de patch acidentalmente destrói algo, e você precisa consultar a versão original para corrigi-lo.

Nem sempre corrijo um patch ruim com o texto dos arquivos *.rej e *.orig , mas é bom tê-los, caso eu precise deles.

Depois de corrigir um patch incorreto, eu corro o script a seguir na raiz do projeto para limpar rapidamente as coisas:

#!/bin/bash
find . '(' \
    -name \*-baseline -o \
    -name \*-merge -o \
    -name \*-original -o \
    -name \*.orig -o \
    -name \*.rej \
')' -delete

Eu o chamo de cleanup-after-bad-patch porque o nome longo garante parcialmente a execução deste acidentalmente, já que ele pode remover arquivos que você ainda precisa. Para ser honesto, eu normalmente o executo digitando clean Tab Enter , sendo suficiente para encontrar este script no PATH em minhas máquinas de desenvolvimento. / p>

Os padrões adicionais verificados são para os arquivos produzidos pelo meu sistema de controle de versão escolha quando encontrar o mesmo problema durante uma operação de mesclagem. Você pode querer ajustá-lo para o seu VCS / Ferramentas SCM .

    
por 26.09.2012 / 00:58
6

Para dizer ao patch para não produzir backups, apenas omita as opções -b e --backup-... .

Para instruir para não criar arquivos .rej , adicione a opção -r - ao comando.

    
por 25.09.2012 / 11:59
2

A opção --no-backup-if-mismatch evitará os arquivos ".orig".

Você também pode tentar a opção --merge , que cria um conflito no arquivo.

Em todos os casos, você deve ter alguma maneira de retornar rapidamente a um bom estado se a mesclagem se tornar esmagadora.

    
por 31.01.2018 / 21:58
1

Estou preso ao patch v2.5.4, em que -r - faz com que ele crie arquivos rejeitados chamados - .

Descobri que --reject-file= , ou seja, o valor vazio faz com que o patch falhe com o código de saída 2 SE ele tenta gravar um arquivo rejeitado. Se não houver rejeições, isso funciona como esperado. Embora não seja uma solução completa para uma versão mais antiga do patch, em algumas circunstâncias isso pode ser aceitável ou desejado.

    
por 11.11.2015 / 16:17
0

O melhor que eu pude fazer (admitidamente uma maneira de varrer a sujeira debaixo do tapete) é usar -r <tmpfile> , ou seja:

# patch -r /tmp/deleteme.rej -i patchfile filetobepatched

já que na v2.5.8, -r - realmente cria o arquivo - .

    
por 22.11.2017 / 10:16
-3

patch -p1 -B / dev / null -r - < file.patch

    
por 19.03.2015 / 09:01