В настоящее время я работаю над программой, которая обновляет исходный код большой программы. Моя программа написана на Java, а исходный код, который нужно обновить, написан на C, а исходный исходный код изменен, поэтому невозможно просто заменить старую версию версией, которая выходит, потому что измененный код исчезнет.
Итак, я понял, что необходимо обновить старую модифицированную версию с изменениями между старой исходной версией и новой исходной версией. На основе различий между двумя версиями следует создать исправление и применить его к старой модифицированной версии, что, как мы надеемся, приведет к обновленной версии с измененным исходным кодом. Я попытался сделать небольшую блок-схему, чтобы было понятнее.
https://i.stack.imgur.com/og0kI.png
Для моей программы необходимо только найти различия между исходниками .c и .h.
И вот я ищу подходящий инструмент, чтобы найти отличия между новой версией программы и старой версией с оригинальным исходным кодом, сохранить отличия и применить их к старой, модифицированной версии.
В настоящее время я экспериментирую с java-версией инструмента diff-match-patch (http://code.google.com/p/google-diff-match-patch/), который изначально был разработан для обычного текста. Он находит различия между файлами красивыми и простыми, а также дает возможность отображать их как простую HTML-страницу. Но, похоже, есть некоторые проблемы с объединением кода позже, в основном потому, что он изначально предназначен для открытого текста.
Я также пытался использовать git, но я не очень разбираюсь в этом, и я просто посмотрел, как объединить два отдельных файла прямо здесь (запустить алгоритм git merge на двух отдельных файлах), объединяя старую, модифицированную версию с новой версией, используя старую исходную версию в качестве общего предка. Это команда, которую я использовал:
git merge-file -p <current> <common> <other> > <dest>
git merge-file -p old_mod old_original new_original > new_mod
Но, к сожалению, результат был еще хуже, чем раньше. В заключение я ищу инструмент, основанный на командной строке или исполняемый из инструмента Java, чтобы найти различия между файлами и применить различия к другому файлу, максимально разрешая конфликты. Модифицированная версия отличается от исходной версии форматом и добавленными кодовыми блоками в некоторых файлах.
Я также открыт для предложений и альтернативных подходов, как обновить эту модифицированную программу с изменениями нового выпуска программы.
Программа обновления будет запускаться на ПК с Windows, поэтому используемые инструменты должны быть доступны там.