Ламо-вопрос по созданию патчей, включающих бинарники

ustas

Короче задача:
есть некая структура вложенных папок, которая содержит как текстовые файлы, так и бинарники.
Есть копия этой структуры, в которой некоторые файлы поменялись (включая бинарные некоторые - добавились.
Хочется следующего: построить патч, который будет включать в себя
а) обычные диффы для текстовых файлов, но только для тех, которые есть и там, и там. Файлы, которые есть во второй структуре, но нет в первой, в дифф входить не должны
б) бинарники в первой структуре будет при апплаении заменять соответствующими файлами из второй структуры.
Что я на данный момент знаю:
1) обычный diff не работает с бинарниками
2) есть тулза jdiff, но она не работает с директориями
3) патчи, которые умеет делать, например, Eclipse, включают в себя и добавленные по сравнению со структурой1 файлы. Как от этого избавиться - я пока не нашла.
Понятно, что по-хорошему надо писать скрипт. Но для меня как человека, не знакомого с перлом, это будет означать запариться.
Хотелось бы понять, может, кто-то уже озадачивался подобным и существует какое-то готовое средство....
Все это дело происходит в винде, есть сигвин.

kruzer25

Хотелось бы понять, может, кто-то уже озадачивался подобным и существует какое-то готовое средство....
Навряд ли - я вот просто не могу придумать, в какой ситуации нужен такой извращённый дифф.
Почему
Файлы, которые есть во второй структуре, но нет в первой, в дифф входить не должны
?

tipnote

Помимо diff, есть bindiff, elta (SVN). Ну и тыды. А в твоем случае, я так понимаю, все равно надо будет писать скрипт. Хотя хз, может, я не понял.

ustas

от чогт, может я аццки ступила...
Вообще говоря, во второй структуре по сравнению с первой за день образуется много мусора, который и весит много по сравнению с осмысленными изменениями, и размешан по этой структуре довольно однородно.
Включать его в патч как-то не хотелось.
С другой стороны, и фиг бы с ним, если это будет самое простое. Коммитить его никто не заставляет.
Ладно, спасибо, пошла думать )

ustas

Спасибо, посмотрю.

xronik111

> Файлы, которые есть во второй структуре, но нет в первой, в дифф входить не должны
Это поведение diff по умолчанию, для его переопределения есть ключ -N.
> 1) обычный diff не работает с бинарниками
Это не так, есть ключ -a. (По крайней мере, у меня удалось поменять a.out и получившийся diff скормить patch, в итоге файлы стали одинаковыми).
Итого: diff -uar <first-folder> <second-folder> должен помочь.

ustas

-а пробовала, в моем случае с ним не сработало.
Если без этой опции в патчфайле есть строки вида 'Files dir1/file and dir2/file differ', то с ней нет вообще никакого упоминания об этих файлах.
А у тебя что написалось про a.out, если не секрет? Без -а он не пропатчился?

xronik111

Да, без -a diff выдает сообщение, что бинарные файлы различаются.
C -a все работает, т.е. выдается текст, который понимает patch.
У меня diff (GNU diffutils) 2.8.1.
Оставить комментарий
Имя или ник:
Комментарий: