UZER2006
@UZER2006

Сравнение и объединение кода?

Есть в проекте некоторый функционал, который реализовали через copy-paste. В зависимости от конкретного ID функционал чуть отличается, но в целом похож. Почему те, кто разрабатывал это до меня, сделали через копии – не знаю. Это из области индокода. Решил зарефакторить.

Соответственно, после объединения уникальный код будет заключен в ifы и выполняться в зависимости от ID.

Итак. Есть 20 файлов с JS-кодом. Структура в целом одинакова, многие файлы идентичны, некоторые отличаются лишь немного, некоторые до уровня отсутствия некоторых функций. Соответственно, для объединения их в один надо проходить по каждому и смотреть, есть ли те или иные функции или даже строчки в каждом из файлов. Кстати, возможно, что позже так же придётся сравнивать серверный код.

Пока начал всё делать вручную, но остался не очень в восторге.
Вопрос. Возможно ли как-то упростить и автоматизировать эту задачу? И если да, то какими средствами и методами?

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

Отрицательный ответ – тоже ответ, если вы в нём уверены.
  • Вопрос задан
  • 4421 просмотр
Решения вопроса 1
UZER2006
@UZER2006 Автор вопроса
В итоге всё сделал вручную, пользуясь привычным инструментом сравнения текстов, ибо иначе нереально.
Спасибо всем за ответы, в т.ч. за Araxis Merge.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
AgentSIB
@AgentSIB
Вообще практически любая IDE умеет сравнивать файлы (NetBeans, WebStorm точно умеют). Так же можно заюзать сторонние diff tools.
Ответ написан
Комментировать
@zednight
diff,
vim -d
Ответ написан
Комментировать
Araxis Merge имеет режим сравнения трех файлов. Исходного, и двух правок, и можно сливать правки в один. Очень удобно при мерджу.
Ответ написан
Комментировать
@1x1
Решал похожую задачу, находил перловый модуль по ключевым словам n-way diff. В результате оказалось, что
1) запускать дифф попарно намного удобнее и
2) количество if-ов и case-ов зашкалило, поэтому в итоге делал всё классами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы