Как стать автором
Обновить

Как преобразовать правило .gitignore в регулярное выражение

Время на прочтение2 мин
Количество просмотров4.6K

Введение

Возникла идея сделать свою систему контроля версий. А чтобы всё было по взрослому, то она должна поддерживать систему исключений. Для чего было бы очень полезно использовать синтаксис git, а именно его правила в файлах .gitignore.

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

Поэтому решил что сделаю свою реализацию и выложу в открытый доступ. Однако в результате реализации стал замечать, что этот функционал я уже к своему коду "прибиваю гвоздями". Поэтому вместо готового кода решил выложить алгоритм преобразования правила .gitignore в регулярное выражение. Это позволит любому сделать реализацию на нужном ему языке программирования.

Правила замены

Правило состоит из следующих полей[значение по умолчанию]:

  • bool is_not - Отрицание

  • bool is_dir - Правило для директории

  • string re_str - Строка регулярного выражения

**line** - входная строка правила из файла .gitignore

Процесс разбора состоит из трех функций: **parse**, **parse2**, **parse3**.

Функция parse(line)

Функция parse2(line)

Функция parse3(line)

После вызова функции parse(line) переменная line Содержит текст регулярного выражения. После обработки файла .gitignore получаем список правил rules. Для проверки соответствия элемента файловой системы правилу используется функция test(filepath, filename), где:

  • filepath - полное имя файла

  • filename - имя файла относительно директории нахождения файла .gitignore с начальным слешем в начале.

Функция test(filepath, filename)

Если после выполнения функции ret = true значит элемент файловой системы нужно игнорировать.

Для тестирования функционала написал консольную программу для Windows. Вот ссылка на архив на архив. Файл содержит две команды:

* run_git - для генерации отчета со списком игнорирований

* run - для запуска тестов. Команда запускает тесты и выводит результаты в виде

Вывод результатов тестов
Вывод результатов тестов

Для каждого теста выводится результат отработки. Если игнорируется, то выводится правило из файла + регулярное выражение в которое это правило трансформировалось.

При добавлении новых/изменении существующих тестов необходимо запустить команду run_git (для чего необходимо наличие установленной git).

UPDATE: обновил ссылку для скачивания тестов. Раньше она не скачивалась так как сертификата на сайте не было. Точнее скачивалась, но только при дополнительном подтверждении так как была в виде http.

Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+5
Комментарии51

Публикации