Мы переносим наш рабочий репозиторий, поэтому я хочу выполнить отсев всех файлов, на которые нет ссылок, которые существуют в дереве исходных текстов, прежде чем перемещать его в красивый свежий (пустой) репозиторий.
Пока что я просмотрел вручную и нашел все файлы без ссылок, о которых я знаю, но я хочу узнать, поймал ли я их все. Один из способов - вручную переместить файл проекта за файлом в новую папку и посмотреть, что останется при компиляции. Это займет всю неделю, поэтому мне нужен автоматизированный инструмент.
Что предлагают люди?
Разъяснения:
1) Это C++.
2) Файлы смешанные. Я ищу файлы, которые были заменены другими, но остались гнить в репозитории - например, file_iter.h не упоминается ни в каком другом файле в программе, но остается в репозитории на случай, если кто-то захочет скомпилировать версию из 1996 год! Теперь мы переходим в новый репозиторий и можем безопасно удалить все файлы, которые больше не используются.
3) Lint находит только неиспользуемые включения, а не неиспользуемые файлы (передо мной лежит руководство по 7.5).
Вы отметили этот пост C++, поэтому я предполагаю, что это именно тот язык, о котором идет речь. Если это единственное, что есть в репозитории, тогда не должно быть слишком сложно найти все файлы в репозитории для каждого имени файла, чтобы получить хорошую отправную точку. Если репозиторий содержит другие файлы (метаданные, файлы поддержки, ресурсы и т. д.), Вам, вероятно, придется сделать это вручную.
Инструмент статического анализа исходного кода, такой как lint, может сделать эту работу. Они скажут вам, если часть кода никогда не будет вызвана.
Вы смотрели Источник-навигатор? Его можно использовать как IDE, но я обнаружил, что он очень хорош в анализе структуры исходного кода. Например, он может узнать, где и используется ли определенный метод в вашем исходном коде.
Я не знаю, есть ли в нем сценарии, но это может быть хорошей отправной точкой для вас.
Я не могу предложить существующий инструмент для этого, но я ожидаю, что вы можете получить большую часть этой информации от своих инструментов сборки (возможно, с некоторыми усилиями). Обычно вы можете, по крайней мере, позволить инструменту сборки печатать команды, которые он будет запускать, не выполняя их на самом деле. (Например, опция -n
для make
и bjam
делает это.) Из нее вы должны иметь возможность извлекать по крайней мере используемые исходные файлы.
С -MM
из g++
вы можете получить все несистемные файлы заголовков для заданных исходных файлов. Вывод имеет форму правила make
, но с некоторой фильтрацией это не должно быть проблемой.
Не знаю, помогает ли это; это то, что я бы попробовал в вашей ситуации.
Фактически вы можете сделать это косвенно с помощью Lint, запустив «анализ всего проекта» (в котором все файлы анализируются вместе, а не по отдельности).
Настройте его так, чтобы он игнорировал все, кроме предупреждений о переменных, перечислениях, функциях и т.д.
Я сейчас в отпуске, и у меня нет под рукой руководства по линтам, но я вижу, как он покажет мне неиспользуемые файлы в папке с исходным кодом. Буду рад, если вы покажете мне, как это сделать ...
Привет, Грэм! Уловка состоит в том, чтобы сгенерировать файл .lnt, в котором перечислены все файлы в решении, и отключить все, кроме глобального обертывания. Если вы напишете мне личное письмо, когда вернетесь (anna AT riverblade. Co. Uk), я с радостью проведу вас через настройку и интерпретацию результатов.
Не могли бы вы подробнее рассказать о своей среде сборки. Например, у вас есть инструменты типа командной строки UNIX и сборка выполняется с помощью Make или чего-то подобного. Я мог бы описать решение на основе сценария, чтобы сделать это в этом случае ...