diff --git a/.gitignore b/.gitignore index 58b9ce9..4fd9035 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ docs/_build/ # PyBuilder target/ + +*.ospx diff --git a/README.md b/README.md index 74fb154..be085b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ ## Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git [![Join the chat at https://gitter.im/xDrivenDevelopment/precommit1c](https://badges.gitter.im/xDrivenDevelopment/precommit1c.svg)](https://gitter.im/xDrivenDevelopment/precommit1c?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам +[![GitHub release](https://img.shields.io/github/release/xDrivenDevelopment/precommit1c.svg)](https://github.com/xDrivenDevelopment/precommit1c/releases) ### Что к чему ---- diff --git a/copy-to-hook.cmd b/copy-to-hook.cmd index bcb45f9..82ce741 100644 --- a/copy-to-hook.cmd +++ b/copy-to-hook.cmd @@ -2,7 +2,6 @@ @echo copy current version repo -xcopy .\ibService .\..\..\.git\hooks\ibService\ /Y /E /F xcopy .\pre-commit .\..\..\.git\hooks\ /Y /F mkdir .\..\..\.git\hooks\v8Reader xcopy .\v8Reader\V8Reader.epf .\..\..\.git\hooks\v8Reader\ /Y /F diff --git a/create-links-in-hooks.bat b/create-links-in-hooks.bat index 6f31b7c..2867a8b 100644 --- a/create-links-in-hooks.bat +++ b/create-links-in-hooks.bat @@ -1,6 +1,9 @@ -mklink ".git/hooks/pre-commit" "%~dp0pre-commit" -mklink ".git/hooks/v8files-extractor.os" "%~dp0v8files-extractor.os" -mklink /J ".git/hooks/ibService" "%~dp0ibService" +pushd .git +md hooks +popd + +mklink /D /H ".git/hooks/pre-commit" "%~dp0pre-commit" +mklink /D /H ".git/hooks/v8files-extractor.os" "%~dp0v8files-extractor.os" mklink /J ".git/hooks/v8Reader" "%~dp0v8Reader" mklink /J ".git/hooks/tools" "%~dp0tools" git config --local core.quotepath false diff --git a/ibService/1Cv8.1CD b/ibService/1Cv8.1CD deleted file mode 100644 index 44394c3..0000000 Binary files a/ibService/1Cv8.1CD and /dev/null differ diff --git a/packagedef b/packagedef new file mode 100644 index 0000000..efa513f --- /dev/null +++ b/packagedef @@ -0,0 +1,17 @@ + +Описание.Имя("precommit1c") + .Версия("2.0.5") + .ЗависитОт("logos") + .ЗависитОт("cmdline") + .ЗависитОт("tempfiles") + .ЗависитОт("asserts") + .ЗависитОт("v8runner") + .ЗависитОт("strings") + .ИсполняемыйФайл("v8files-extractor.os"); + +ФайлыКаталога = НайтиФайлы(ТекущийСценарий().Каталог, ПолучитьМаскуВсеФайлы()); +Для Каждого Файл Из ФайлыКаталога Цикл + Если Лев(Файл.Имя,1) <> "." Тогда + Описание.ВключитьФайл(Файл.Имя); + КонецЕсли; +КонецЦикла; diff --git a/tests/v8files-extractor-test.os b/tests/v8files-extractor-test.os index a34dd8e..a924d7b 100644 --- a/tests/v8files-extractor-test.os +++ b/tests/v8files-extractor-test.os @@ -25,6 +25,7 @@ ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогами"); ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша"); ВсеТесты.Добавить("Тест_ДолженСобратьФайлОбработкиИзЗаданнойПапки"); + ВсеТесты.Добавить("Тест_ДолженПроверитьЧтоПрекоммит1СУстановленВХуки"); Возврат ВсеТесты; @@ -315,21 +316,8 @@ Лог.Отладка("КаталогHooks.ПолноеИмя " + КаталогHooks.ПолноеИмя); - КаталогСервиснойИБ = Новый Файл(ОбъединитьПути(КаталогПроекта, "ibService")); Каталог_v8Reader = Новый Файл(ОбъединитьПути(КаталогПроекта, "v8Reader")); - Лог.Отладка("КаталогСервиснойИБ.ПолноеИмя " + КаталогСервиснойИБ.ПолноеИмя); - - КаталогСервиснойИБ_конечный = Новый Файл(ОбъединитьПути(КаталогHooks.ПолноеИмя, "ibService")); - ПересоздатьКаталог(КаталогСервиснойИБ_конечный); - Лог.Отладка("КаталогСервиснойИБ_конечный.ПолноеИмя " + КаталогСервиснойИБ_конечный.ПолноеИмя); - - КопироватьДеревоФайлов(КаталогСервиснойИБ.ПолноеИмя, КаталогСервиснойИБ_конечный.ПолноеИмя); - Ожидаем.Что(КаталогСервиснойИБ_конечный.Существует(), "Должен существовать конечный каталог сервисной ИБ, а это не так").ЭтоИстина(); - - ФайлСервиснойИБ = Новый Файл(ОбъединитьПути(КаталогСервиснойИБ_конечный.ПолноеИмя, "1Cv8.1CD")); - Лог.Отладка("ФайлСервиснойИБ.ПолноеИмя " + ФайлСервиснойИБ.ПолноеИмя); - Ожидаем.Что(ФайлСервиснойИБ.Существует(), "Должен существовать файл сервисной ИБ, а это не так").ЭтоИстина(); - + Каталог_v8Reader_конечный = Новый Файл(ОбъединитьПути(КаталогHooks.ПолноеИмя, "v8Reader")); ПересоздатьКаталог(Каталог_v8Reader_конечный); @@ -349,6 +337,32 @@ Ожидаем.Что(Файл_сценария_конечный.Существует(), "Должен существовать Файл_сценария_конечный, а это не так").ЭтоИстина(); КонецПроцедуры +Процедура Тест_ДолженПроверитьЧтоПрекоммит1СУстановленВХуки() Экспорт + + КаталогПроекта = КаталогПроекта(); + КаталогРепо = ВременныеФайлы.СоздатьКаталог(); + УстановитьТекущийКаталог(КаталогРепо); + ВыполнитьКомандуГит("git init"); + Исполнитель = ЗагрузитьИсполнителя(); + Исполнитель.УстановитьВКаталог(КаталогРепо); + + КаталогHooks = Новый Файл(ОбъединитьПути(КаталогРепо, ".git", "hooks")); + Ожидаем.Что(КаталогHooks.Существует(), "Должен существовать исходный каталог сервисной ИБ, а это не так").ЭтоИстина(); + + Каталог_v8Reader_конечный = Новый Файл(ОбъединитьПути(КаталогHooks.ПолноеИмя, "v8Reader")); + Файл_v8Reader_конечный = Новый Файл(ОбъединитьПути(Каталог_v8Reader_конечный.ПолноеИмя, "V8Reader.epf")); + Ожидаем.Что(Файл_v8Reader_конечный.Существует(), "Должен существовать Файл_v8Reader_конечный, а это не так").ЭтоИстина(); + + Файл_pre_commit_конечный = Новый Файл(ОбъединитьПути(КаталогHooks.ПолноеИмя, "pre-commit")); + Ожидаем.Что(Файл_pre_commit_конечный.Существует(), "Должен существовать Файл_pre_commit_конечный, а это не так").ЭтоИстина(); + + Лог.Отладка("Файл_pre_commit_конечный.ПолноеИмя " + Файл_pre_commit_конечный); + Файл_сценария_исходный = Новый Файл(ОбъединитьПути(КаталогПроекта, "v8files-extractor.os")); + Файл_сценария_конечный = Новый Файл(ОбъединитьПути(КаталогHooks.ПолноеИмя, Файл_сценария_исходный.Имя)); + Ожидаем.Что(Файл_сценария_конечный.Существует(), "Должен существовать Файл_сценария_конечный, а это не так").ЭтоИстина(); + +КонецПроцедуры + Функция КаталогСодержитИсходникиОбработки(Знач Каталог) ВыгруженныеФайлы = НайтиФайлы(Каталог, ПолучитьМаскуВсеФайлы()); ИменаВыгруженныхФайлов = РазвернутьМассивФайловВИменаФайлов(ВыгруженныеФайлы); diff --git a/v8files-extractor.os b/v8files-extractor.os index 7d4b8e8..f6cad2d 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -26,7 +26,7 @@ Функция Версия() Экспорт - Версия = "2.0.4"; + Версия = "2.0.5"; Возврат "v" + Версия; @@ -40,6 +40,7 @@ мВозможныеКоманды.Вставить("Помощь", "--help"); мВозможныеКоманды.Вставить("ОбработатьИзмененияИзГит", "--git-precommit"); мВозможныеКоманды.Вставить("Компилировать", "--compile"); + мВозможныеКоманды.Вставить("Установить", "--install"); КонецЕсли; Возврат мВозможныеКоманды; @@ -74,6 +75,7 @@ ДобавитьОписаниеКомандыПомощь(Парсер); ДобавитьОписаниеКомандыИзмененияПоЖурналуГит(Парсер); ДобавитьОписаниеКомандыКомпилировать(Парсер); + ДобавитьОписаниеКомандыУстановить(Парсер); Аргументы = Парсер.РазобратьКоманду(АргументыКоманднойСтроки); Лог.Отладка("ТипЗнч(Аргументы)= "+ТипЗнч(Аргументы)); @@ -100,6 +102,8 @@ Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--recursive"] ); + ИначеЕсли Команда = ВозможныеКоманды().Установить Тогда + УстановитьВКаталог(ТекущийКаталог()); КонецЕсли; Исключение @@ -145,6 +149,11 @@ Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры +Процедура ДобавитьОписаниеКомандыУстановить(Знач Парсер) + ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().Установить); + Парсер.ДобавитьКоманду(ОписаниеКоманды); +КонецПроцедуры + Процедура Инициализация() СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; @@ -297,6 +306,42 @@ КонецПроцедуры +Процедура УстановитьВКаталог(Знач Каталог) Экспорт + + КаталогГит = Новый Файл(ОбъединитьПути(Каталог, ".git")); + Если Не КаталогГит.Существует() Тогда + ВызватьИсключение "Каталог не является репозиторием GIT"; + КонецЕсли; + + КаталогПрекоммита = ТекущийСценарий().Каталог; + КаталогХуков = ОбъединитьПути(Каталог, ".git", "hooks"); + ОбеспечитьКаталог(КаталогХуков); + + КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "pre-commit"); + КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "v8Reader"); + КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "v8files-extractor.os"); + КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "tools"); + + ЗапуститьПриложение("git config --local core.quotepath false", Каталог, Истина); + ЗапуститьПриложение("git config --local core.longpaths true", Каталог, Истина); + + Лог.Информация("Установка завершена"); + +КонецПроцедуры + +Процедура КопироватьВКаталог(Знач КаталогИсточник, Знач КаталогПриемник, Знач ОбъектКопирования) + + Лог.Информация("Копирую: " + ОбъектКопирования); + ФайлИсточник = Новый Файл(ОбъединитьПути(КаталогИсточник, ОбъектКопирования)); + ФайлПриемник = Новый Файл(ОбъединитьПути(КаталогПриемник, ОбъектКопирования)); + Если ФайлИсточник.ЭтоКаталог() Тогда + КопироватьСодержимоеКаталога(ФайлИсточник.ПолноеИмя, ФайлПриемник.ПолноеИмя); + Иначе + КопироватьФайл(ФайлИсточник.ПолноеИмя, ФайлПриемник.ПолноеИмя); + КонецЕсли; + +КонецПроцедуры + Процедура ОбеспечитьПустойКаталог(Знач ФайлОбъектКаталога) Если Не ФайлОбъектКаталога.Существует() Тогда @@ -311,6 +356,18 @@ КонецПроцедуры +Процедура ОбеспечитьКаталог(Знач Путь) + + ФайлОбъектКаталога = Новый Файл(Путь); + Если Не ФайлОбъектКаталога.Существует() Тогда + Лог.Отладка("Создаем новый каталог " + ФайлОбъектКаталога.ПолноеИмя); + СоздатьКаталог(ФайлОбъектКаталога.ПолноеИмя); + ИначеЕсли Не ФайлОбъектКаталога.ЭтоКаталог() Тогда + ВызватьИсключение "Путь " + ФайлОбъектКаталога.ПолноеИмя + " не является каталогом. Выгрузка невозможна"; + КонецЕсли; + +КонецПроцедуры + Процедура ВывестиСправку() Сообщить("Утилита сборки/разборки внешних файлов 1С"); @@ -328,6 +385,8 @@ Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); + Сообщить(" --install"); + Сообщить(" Установить precommit1c для текущего репозитория git"); КонецПроцедуры