Вариант №6
Задание №2
Разработать инструмент командной строки для визуализации графа зависимостей, включая транзитивные зависимости. Сторонние средства для получения зависимостей использовать нельзя.
Зависимости определяются для git-репозитория. Для описания графа зависимостей используется представление Mermaid. Визуализатор должен выводить результат на экран в виде кода.
Построить граф зависимостей для коммитов, в узлах которого содержатся номера коммитов в хронологическом порядке.
Ключами командной строки задаются:
- Путь к программе для визуализации графов.
- Путь к анализируемому репозиторию.
- Путь к файлу-результату в виде кода.
Все функции визуализатора зависимостей должны быть покрыты тестами.
Данный инструмент анализирует Git репозиторий, строит граф зависимостей между коммитами и генерирует его представление в формате Mermaid. В узлах графа отображается хэш коммита и дата его создания.
Для работы программы не требуется установка дополнительных библиотек, кроме стандартной библиотеки Python.
python visualizer.py <path_to_repo> <output_file>
<path_to_repo>
: Путь к анализируемому Git репозиторию.<output_file>
: Путь к файлу, в который будет сохранен сгенерированный Mermaid код.
Пример:
python visualizer.py my-repo output.mmd
python -m unittest test_visualizer.py
Важно: Перед запуском тестов убедитесь, что в файле test_visualizer.py
корректно настроены пути к временной директории, в которой тесты создают тестовый репозиторий. По умолчанию используется tempfile.mkdtemp()
, который создает временную директорию, удаляемую после завершения тестов.
visualizer.py
: Основной файл с кодом визуализатора.test_visualizer.py
: Модульные тесты дляvisualizer.py
.my-repo
: Пример репозитория для тестирования (необязательный, можно использовать любой свой).__pycache__
: Директория с кэшированными файлами.pyc
(генерируется автоматически).
- Чтение HEAD коммита: Программа определяет хэш HEAD коммита репозитория.
- Обход коммитов: Начиная с HEAD коммита, программа рекурсивно обходит все родительские коммиты, используя алгоритм обхода в глубину.
- Парсинг объектов Git: Для каждого коммита извлекается информация об объекте коммита из
.git/objects
. - Извлечение данных коммита: Из объекта коммита извлекаются хэш, список родительских коммитов и дата создания.
- Построение графа: На основе полученных данных строится граф зависимостей коммитов.
- Генерация Mermaid кода: Граф зависимостей преобразуется в код на языке Mermaid.
- Сохранение результата: Сгенерированный Mermaid код сохраняется в указанный выходной файл.