Задание №2 (5 вариант) Разработать инструмент командной строки для визуализации графа зависимостей, включая транзитивные зависимости. Сторонние средства для получения зависимостей использовать нельзя. Зависимости определяются для git-репозитория. Для описания графа зависимостей используется представление PlantUML. Визуализатор должен выводить результат на экран в виде графического изображения графа. Построить граф зависимостей для коммитов, в узлах которого содержатся дата, время и автор коммита. Граф необходимо строить для тега с заданным именем.
Конфигурационный файл имеет формат json и содержит: • Путь к программе для визуализации графов. • Путь к анализируемому репозиторию. • Имя тега в репозитории. Все функции визуализатора зависимостей должны быть покрыты тестами.
Описание функций
-
load_config(config_path: str) -> Dict[str, str]
• Загружает конфигурацию из JSON-файла по указанному пути.
• Возвращает словарь с настройками.
-
get_commits(repo_path: str, tag_name: str, previous_tag: str = None) -> List[Tuple[str, str, str]]
• Извлекает список коммитов между текущим тегом и предыдущим тегом (если он указан).
• Возвращает список кортежей с хешем коммита, датой, автором и сообщением коммита.
-
get_commit_message(repo_path: str, commit_hash: str) -> str
• Получает сообщение коммита по его хешу.
• Возвращает строку с сообщением.
-
build_plantuml_graph(commits_per_tag: Dict[str, List[Tuple[str, str, str]]]) -> str
• Создает код PlantUML для визуализации графа коммитов.
• Возвращает строку с кодом PlantUML.
-
visualize_graph(plantuml_code: str, visualization_tool: str)
• Записывает код PlantUML в файл и вызывает инструмент визуализации для генерации графа.
• Удаляет временный файл после завершения.
-
get_commits_for_tags(repo_path: str, tag_names: List[str]) -> Dict[str, List[Tuple[str, str, str]]
• Получает коммиты для списка тегов.
• Возвращает словарь, где ключи — это имена тегов, а значения — списки коммитов.
-
main(config_path: str)
• Основная функция, которая загружает конфигурацию, получает коммиты для тегов и визуализирует граф.
• Конфигурация:
• Скрипт ожидает наличие файла config.json, который должен содержать следующие ключи:
путь к репозиторию Git
список тегов для анализа
путь к инструменту визуализации (например, JAR-файл PlantUML)
Пример файла connfig.json:
{
"visualization_tool": "C:\visualizer\plantuml-mit-1.2024.7.jar",
"repository_path": "C:\gittest",
"tag_names": [ "v1.0", "v2.0" ]
}
Для начала, чтобы запустить выизализатор, надо находиться в директории с визуализаторм и прописать команду:

После запуска программы будет выведено следующее:
для каждого тега ищутся коммиты и выводтся в формате - "хэш, дата и время, автор, текст коммита". После вывода информации появляется сообще о том, что граф успешно построен.

Также создается файл, в котором изображены зависимости для разных тегов:

Для данноого кода были еще создан файл с тестами функций. Ниже прикреплен скриншот работы файла:
