O `patch` pode ser idempotente?

O `patch` pode ser idempotente?

Pode patchser invocado com idempotência; ou seja, existe alguma combinação de opções que fará com que invocações repetidas de patchtenham o mesmo efeito que uma única invocação de patch(para uma diferença não vazia)?

Responder1

Alguns patches¹ podem ser aplicados diversas vezes, então isso não pode ser garantido; mas

patch -N -r- -i your.patch

aplicará your.patch, ignorando quaisquer pedaços que já tenham sido aplicados.

-Nevita tentar reverter um patch já aplicado e -r-ignora o salvamento de pedaços com falha em .rejarquivos.

O comando equivalente com opções longas é

patch --forward --reject-file=- --input=your.patch

Quando executado desta forma, se patchignorar pedaços, indicará falha. Se o único “erro” for blocos ignorados, ele sairá com o código 1 (pelo menos um pedaço falhou ou houve conflitos de mesclagem); erros mais graves são indicados pelo código de saída 2.


¹ Patches ou pedaços sem contexto ou onde as linhas adicionadas correspondem ao contexto (por exemploum patch adicionando uma função polimórfica onde as primeiras linhas da declaração correspondem à próxima função).

informação relacionada