Редактирование уже существующего файла патча - PullRequest
0 голосов
/ 22 октября 2018

Является ли стандартной практикой редактирование .patch с использованием редактора?

Сценарий

Я использую .patch в приложениях Yocto, где я хочу адаптировать несколько небольших изменений к репозиториюкоторый я хочу перенести на мое встроенное устройство.

Один из патчей выглядит следующим образом (некоторые детали удалены для пивоварения):

From 85987c659762939241e4bdd4223e63eb5997b181 Mon Sep 17 00:00:00 2001

OE ships php5 as php

---
 airmar/airmar.php             | 2 +-
 n2kd/n2kd_monitor             | 2 +-
 send-message/format-message   | 2 +-
 util/list-product-information | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/airmar/airmar.php b/airmar/airmar.php
index ccd4b4d..46ed49d 100755
--- a/airmar/airmar.php
+++ b/airmar/airmar.php
@@ -1,4 +1,4 @@
-#!/usr/bin/php5
+#!/usr/bin/env php
 <?php
 if (!is_array($argv))
 {
diff --git a/n2kd/n2kd_monitor b/n2kd/n2kd_monitor
index f8cfd42..4cb4766 100755
--- a/n2kd/n2kd_monitor
+++ b/n2kd/n2kd_monitor
@@ -233,7 +233,7 @@ for (;;)
         open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
         open STDOUT, '>>', $MONITOR_LOGFILE or die "Can't write to $MONITOR_LOGFILE $!";
         open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
-        exec 'php5', '/usr/local/bin/n2k.php', '-monitor';
+        exec 'php', '/usr/bin/n2k.php', '-monitor';
       }
       if (!$monitor)
       {
diff --git a/send-message/format-message b/send-message/format-message
index 590a815..2d91185 100755
--- a/send-message/format-message
+++ b/send-message/format-message
@@ -1,4 +1,4 @@
-#!/usr/bin/php5
+#!/usr/bin/env php
 <?
 #
 # Format a particular N2K command
diff --git a/util/list-product-information b/util/list-product-information
index d958ae4..a54a0f2 100755
--- a/util/list-product-information
+++ b/util/list-product-information
@@ -1,4 +1,4 @@
-#!/usr/bin/php5
+#!/usr/bin/env php
 <?php
 #
 # A very limited script engine that sends and receives CAN messages.
-- 
2.17.0

Этот патч просто заменяет php5 на env php Где бы это ни происходило.

Однако основной репозиторий кода изменил один из своих файлов, где раньше был phbang для php, следующим образом:

   #!/usr/bin/php5

А теперь после нескольких коммитов он не't.

Насколько я понимаю, текущий патч не будет работать, так как он сначала попытается найти номер строки и удаляемый контент, но из-за ошибок, так как не сможет найти вышеуказанное.упомянутый Шебанг в файле больше.(уже опробовал)

Возможный путь

  • Очевидным способом является клонирование хранилища с обновленным кодом и добавление необходимого шебанга (env php, а не php5)к коду и используйте git format-patch -1, чтобы получить новый патч для восстановления.

Однако это требует больших усилий, и при изменении более чем определенного количества файлов эта процедура кажетсябыть утомительным.

Разумно ли редактировать патч с помощью редактора (я уверен, что это не так)?Или есть какие-то функции git, которые помогают модифицировать патч напрямую, а не соответствующий файл?

1 Ответ

0 голосов
/ 22 октября 2018

Существует еще один альтернативный способ использования quilt refresh.Вкратце, при использовании quilt все патчи будут скопированы в каталог с именем patches (IMO это можно настроить в quiltrc).

Файл с именем series внутри этого каталога патчей хранит все файлы патчейимена.Когда вы примените патч, используя

quilt push

или

quilt push -a

, вы выйдете с ошибкой.Предположим, у вас есть 10 патчей, и третий не может быть применен напрямую, так как у вас есть некоторые изменения, уже являющиеся частью репозитория.

Затем вы можете позвонить

quilt push -f

, который попытается применить все возможныепомещает и сохраняет строку, которая не может быть применена в файл .rej.Пример вывода,

Applying patch patches/0001-To-apply.patch
patching file README.md
Hunk #2 FAILED at 51.
1 out of 2 hunks FAILED -- saving rejects to file README.md.rej

, где у меня есть фрагменты в моем файле README.md.

Теперь вы можете проверить изменения, которые не применяются чисто, сравнив исходный файл.В указанном выше случае между README.md и README.md.rej.Вы можете устранить неисправные места и позвонить

quilt refresh

После обновления ваш оригинальный файл патча в patches будет обновлен с соответствующими изменениями, и теперь вы можете продолжать использовать quilt push или quilt push -a

Примечание: Yocto по умолчанию использует quilt до тех пор, пока не изменится, используя PATCHTOOL переменную.

...