Может ли `patch` быть идемпотентным?

Может ли `patch` быть идемпотентным?

Может patchбыть вызван с идемпотентностью; т. е. существует ли некая комбинация опций, которая приведет к тому, что повторные вызовы будут patchиметь тот же эффект, что и одиночный вызов patch(для непустого diff)?

решение1

Некоторые исправления¹ можно применять несколько раз, поэтому это не может быть гарантировано; но

patch -N -r- -i your.patch

будет применен your.patch, игнорируя любые уже примененные фрагменты.

-Nпозволяет избежать попыток отменить уже примененный патч и -r-пропускает сохранение неудачных фрагментов в .rejфайлы.

Эквивалентная команда с длинными параметрами:

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

При запуске таким образом, если patchигнорируются куски, это будет означать сбой. Если единственной «ошибкой» являются проигнорированные куски, это завершится с кодом 1 (по крайней мере один кусок не удался или были конфликты слияния); более серьезные ошибки обозначаются кодом выхода 2.


¹ Патчи или фрагменты без контекста или в которых добавленные строки соответствуют контексту (напримерпатч, добавляющий полиморфную функцию, где первые несколько строк объявления соответствуют следующей функции).

Связанный контент