diff --git a/commands.os b/commands.os deleted file mode 100644 index f30ec76..0000000 --- a/commands.os +++ /dev/null @@ -1,80 +0,0 @@ - -#Использовать cmdline -#Использовать tempfiles - -Функция НастроитьПарсер() - - Парсер = Новый ПарсерАргументовКоманднойСтроки(); - Команда = Парсер.ОписаниеКоманды("install", "Установка precommit1c в текущий git репозиторий"); - Парсер.ДобавитьКоманду(Команда); - - Возврат Парсер; - -КонецФункции // НастроитьПарсер() - -Процедура ВыполнитьОбработку(Знач Парсер, Знач МассивАргументов) - - Успех = Ложь; - - Результат = Парсер.Разобрать(МассивАргументов); - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Если Результат.Команда = "install" Тогда - УстановитьВКаталог(ТекущийКаталог()); - Успех = Истина; - КонецЕсли; - КонецЕсли; - - Если Не Успех Тогда - Сообщить("Не удалось выполнить команду. Обратитесь к разработчикам"); - ЗавершитьРаботу(1); - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьВКаталог(Знач Каталог) - - КаталогПрекоммита = ТекущийСценарий().Каталог; - ФайлЛога = ВременныеФайлы.НовоеИмяФайла(); - ФайлСкрипта = ВременныеФайлы.НовоеИмяФайла("cmd"); - - ЗаписьТекста = Новый ЗаписьТекста(ФайлСкрипта, "cp866"); - ЗаписьТекста.ЗаписатьСтроку("@echo off"); - ЗаписьТекста.ЗаписатьСтроку("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"); - ЗаписьТекста.ЗаписатьСтроку("xcopy """ + КаталогПрекоммита + """\v8files-extractor.os """+Каталог+"""\.git\hooks\ /Y /F"); - ЗаписьТекста.ЗаписатьСтроку("mkdir """+Каталог+"""\.git\hooks\tools"); - ЗаписьТекста.ЗаписатьСтроку("xcopy """ + КаталогПрекоммита + """\tools\v8unpack.exe """+Каталог+"""\.git\hooks\tools\ /Y /F"); - ЗаписьТекста.ЗаписатьСтроку("xcopy """ + КаталогПрекоммита + """\tools\v8unpack.exe """+Каталог+"""\.git\hooks\tools\ /Y /F"); - ЗаписьТекста.ЗаписатьСтроку("cd """+Каталог+"""\"); - ЗаписьТекста.ЗаписатьСтроку("git config --local core.quotepath false"); - ЗаписьТекста.ЗаписатьСтроку("git config --local core.longpaths true"); - ЗаписьТекста.Закрыть(); - - КомандаЗапуска = СтрШаблон("cmd /C ""%1"" > %2 2>&1", - ФайлСкрипта, - ФайлЛога); - - ЗапуститьПриложение(КомандаЗапуска,,Истина); - - ЧтениеТекста = Новый ЧтениеТекста(ФайлЛога, "cp866"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - Сообщить(Текст); - - Сообщить("Установка завершена"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////// - -Попытка - Парсер = НастроитьПарсер(); - ВыполнитьОбработку(Парсер, АргументыКоманднойСтроки); -Исключение - ВременныеФайлы.Удалить(); - ВызватьИсключение; -КонецПопытки; - -ВременныеФайлы.Удалить(); 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 bb32941..2867a8b 100644 --- a/create-links-in-hooks.bat +++ b/create-links-in-hooks.bat @@ -4,7 +4,6 @@ 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/ibService" "%~dp0ibService" 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 index 3761d73..efa513f 100644 --- a/packagedef +++ b/packagedef @@ -1,13 +1,13 @@  Описание.Имя("precommit1c") - .Версия("2.0.4") + .Версия("2.0.5") .ЗависитОт("logos") .ЗависитОт("cmdline") .ЗависитОт("tempfiles") .ЗависитОт("asserts") .ЗависитОт("v8runner") .ЗависитОт("strings") - .ИсполняемыйФайл("commands.os"); + .ИсполняемыйФайл("v8files-extractor.os"); ФайлыКаталога = НайтиФайлы(ТекущийСценарий().Каталог, ПолучитьМаскуВсеФайлы()); Для Каждого Файл Из ФайлыКаталога Цикл 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..156bdf4 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"); КонецЕсли; Возврат мВозможныеКоманды; @@ -100,6 +101,8 @@ Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--recursive"] ); + ИначеЕсли Команда = ВозможныеКоманды().Установить Тогда + УстановитьВКаталог(ТекущийКаталог()); КонецЕсли; Исключение @@ -297,6 +300,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 +350,18 @@ КонецПроцедуры +Процедура ОбеспечитьКаталог(Знач Путь) + + ФайлОбъектКаталога = Новый Файл(Путь); + Если Не ФайлОбъектКаталога.Существует() Тогда + Лог.Отладка("Создаем новый каталог " + ФайлОбъектКаталога.ПолноеИмя); + СоздатьКаталог(ФайлОбъектКаталога.ПолноеИмя); + ИначеЕсли Не ФайлОбъектКаталога.ЭтоКаталог() Тогда + ВызватьИсключение "Путь " + ФайлОбъектКаталога.ПолноеИмя + " не является каталогом. Выгрузка невозможна"; + КонецЕсли; + +КонецПроцедуры + Процедура ВывестиСправку() Сообщить("Утилита сборки/разборки внешних файлов 1С"); @@ -328,6 +379,8 @@ Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); + Сообщить(" --install"); + Сообщить(" Установить precommit1c для текущего репозитория git"); КонецПроцедуры