Страница 1 из 2
Нужна устанавливалка патчей / решение: diff/patch
Добавлено: Пт июн 08, 2007 1:18 pm
piroJOKE
"Нужна устанавливалка патчей исходников, желательно на Перле."
Подробности:
Патчить чужой продукт, и пускать его "в оборот" дальше - плохая идея.
Именно поэтому наш дистрибутив представляет собой почти (не совсем) чистый слепок оригинальной OpenKore SVN.
Однако, иногда нужно распространять патчи.
Как бы нам так сделать, чтобы некий модуль/утилита, после запуска скрипта/батника подхватит лежащие рядом diff-ы (не обязательно стандартного формата), и внес их в исходники?
Какие-нибудь идеи есть?
_________________
(позже: изменил заголовок темы)
Добавлено: Пт июн 08, 2007 1:23 pm
Jerry
ээ сам diff ?
Добавлено: Пт июн 08, 2007 2:00 pm
piroJOKE
Непонятный вопрос.

diff - wtf в данном случае?
Добавлено: Пт июн 08, 2007 2:13 pm
Jerry
ои, то есть patch
Добавлено: Пт июн 08, 2007 2:22 pm
Jerry
Добавлено: Пт июн 08, 2007 2:22 pm
Click
если, чтоб патчить опенкор, то зачем на перле?
это наипростейшая программа, реализуема легко и на дельфи.
прога ищет в текстовом файле определёный фрагмент и заменяет его другим куском, тоесть патчем.
Добавлено: Пт июн 08, 2007 8:35 pm
piroJOKE
Мда.... насчет "на перле", это я пожалуй прогнал, он ведь и вправду не у всех есть.
* * *
А вот с patch'ем у меня проблемы.

Скачал эти, "нативные"
UnxUtils - так в них patch какой-то шибанутый. Если его запустить без параметров - просто висит, по Ctrl-C выходит; и
patch -i мойфайл.patch тоже самое.

Может у кого есть живая версия этой команды?...
* * *
А diff - жесть!!!

Я с ним в чистом виде раньше не работал, но это круто, это именно то, что нужно. Натравливаешь его на каталоги - и получаешь единый .patch для всех файлов - это как раз ОНО.
Пример:
diff -U 2 -r dir1 dir2 > мойпатч.patch
Результат:
diff -U 2 -r dir1\aba\otchot.txt dir2\aba\otchot.txt
--- dir1\aba\otchot.txt Fri Jun 08 20:39:18 2007
+++ dir2\aba\otchot.txt Fri Jun 08 20:39:12 2007
@@ -1,2 +1,7 @@
bla bla bla
-bla bla bla!!!
+bla bla bla
+megablast
+cooooooool
+suxxx!
+end
+
* * *
Ага! Хоть patch без параметров и ведет себя странно, тем не менее - он работает. Короче, отлично. Теперь заживем, как белые люди!
Применить патч:
patch -i мойпатч.patch -p0
Jerry - большое спасибо за сцылку!
ЗЫ: Как любят говорить нупы - "тему можно закрывать!"

Добавлено: Пт июн 08, 2007 9:35 pm
Jerry
обычно юзают так
patch -p0 <patchfile
т.е. патч по умолчанию читает ввод с stdin
Добавлено: Пт июн 08, 2007 10:13 pm
piroJOKE
Хех, так я ж -i в твоей же доке вычитал. =) Но, бум знать.
* * *
Типо модный инсталлер (ггг)(ну правда оконного интерфейса нету, извините парти, это вам не Рио!):
@echo off
echo [1] Начало установки патча.
echo.
echo Этот патч установит новый модный апдейт. Типо тест.
echo bla-bla-bla, тут типо подробности для нупов lie-lie-lie.
echo.
echo Нажмите любую кнопку, чтобы началась установка патча,
echo или закройте это окно, чтобы оставить все без изменений.
echo.
pause
echo ----------------------------------------------------------------
utils\patch -i diff.patch -p0
if %errorlevel%==0 goto skipmat
echo.
echo *** ОШИБКА! Патч, вероятно, не установлен! ***
echo *** Пролистайте подробности, они выше. ***
:skipmat
echo.
echo [2] Патчинг завершен.
echo Нажмите любую кнопку для удаления .orig- и .rej- файлов,
echo или закройте это окно, если хотите оставить их на диске.
echo.
echo Справка:
echo .orig - файлы возникают, когда то, на что вы ставите патч,
echo немного отличается от ожидаемого - но патч всё-таки применен.
echo .rej - файлы возникают при попытке повторного внесения патча,
echo либо, когда то, на что ставится патч, имеет большие отличия
echo от ожидаемого - и патч не вносится.
echo Если патч прошел полностью успешно - эти файлы не создаются.
echo.
pause
echo ----------------------------------------------------------------
del /q /s ..\*.orig
del /q /s ..\*.rej
echo.
echo [3] Процесс завершен.
pause
Добавлено: Сб июн 09, 2007 8:24 pm
4epT
Цветную менюшку сделать не удалось, но по оформлению круто получилось..
Только для выбора пункта меню, необходимо будет прикладывать файлик Choice.com (5кБ).
Можно Пачт запихать в самораспаковывающийся архивчиГ ну чтобы он в темп распаковался выполнил своё дело и стёрся..
..ну не мне вас учить.
ЗЫ: у меня менюшка на загрузочной дискетке сделана ещё и в цвете, а вот в винде чёт "цвета" не понимает. Там синий цвет состоял из символов: [34;1m (квадратик это на самом деле стрелоска влево)
Добавлено: Сб июн 09, 2007 8:47 pm
piroJOKE
цвет состоял из символов: [34;1m
Это Esc-последовательности, они под чистым DOSом тоже не держатся. Их держал драйвер ansi.sys.
(Дополнение: коллекция ansi-графики:
http://ansiart.org.ua/gallery.php?folder=1
Вот, всё думаю наш комментарий в дистрибутиве "раскрасить", да ноги не доходят. Да, WinRAR это понимает!)
PS: На рамочки наверно забъем... Имхо, это не тот случай, когда они нужны. Хотя... посмотрим.
Добавлено: Сб июн 09, 2007 8:59 pm
4epT
ыыыыы, у меня так и написано в Config.sys: (Device=A:\ANSI.sys)
piroJOKE, рамочки - более читаемый вид
не

эту идею
Добавлено: Сб июн 09, 2007 9:09 pm
piroJOKE
Уговорил, "откапывать" эту идею не буду!

Добавлено: Сб июн 09, 2007 9:20 pm
4epT
это смайлик не той системы оказался

Добавлено: Вт июн 12, 2007 11:38 am
piroJOKE
БЛЯ! До чего ж тупой этот патчер, это писец какой-то!
Ему, видите ли, не всё равно, пробелы или табуляторы у меня стоят в начале строки...
Более того. Я не могу поставить юниховый патч! Из-за отсутствующих CR+LF возникает "малформед бла бла бла".
