diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Export.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Export.os" index 642c1145..4e6eda41 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Export.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Export.os" @@ -29,6 +29,7 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -42,6 +43,7 @@ МаксВерсия = ПараметрыКоманды["-maxversion"]; Лимит = ПараметрыКоманды["-limit"]; ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"]; + ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"]; Если ЛокальныйКаталогГит = Неопределено Тогда @@ -73,6 +75,12 @@ КонецЕсли; + Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда + + ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; + + КонецЕсли; + МаксВерсия = Число(МаксВерсия); МинВерсия = Число(МинВерсия); Лимит = Число(Лимит); @@ -82,7 +90,16 @@ Распаковщик.ДоменПочтыДляGitПоУмолчанию = ПараметрыКоманды["-email"]; Распаковщик.ПереименовыватьФайлМодуляОбычнойФормы = ПереименовыватьФайлМодуляОбычнойФормы; ДополнительныеПараметры.Лог.Информация("Начинаю выгрузку исходников"); - РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, ПараметрыКоманды["ПутьКХранилищу"], ЛокальныйКаталогГит, МинВерсия, МаксВерсия, Формат,,, Лимит); + РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, + ПараметрыКоманды["ПутьКХранилищу"], + ЛокальныйКаталогГит, + МинВерсия, + МаксВерсия, + Формат, + , + , + Лимит, + ПрерватьВыполнениеБезКомментарияКВерсии); ДополнительныеПараметры.Лог.Информация("Выгрузка завершена"); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" index b1c3d481..d32b1345 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" @@ -30,6 +30,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений"); Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); + Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -47,6 +48,7 @@ Парсер.ДобавитьИменованныйПараметр("-tempdir", "<Путь к каталогу временных файлов>"); Парсер.ДобавитьИменованныйПараметр("-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер"); Парсер.ДобавитьПараметрФлаг ("-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); + Парсер.ДобавитьПараметрФлаг ("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); КонецПроцедуры // ЗарегистрироватьКоманду @@ -67,6 +69,7 @@ Лимит = ПараметрыКоманды["-limit"]; КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"]; ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"]; + ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"]; Если НачальнаяВерсия = Неопределено Тогда @@ -92,6 +95,12 @@ КонецЕсли; + Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда + + ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; + + КонецЕсли; + НачальнаяВерсия = Число(НачальнаяВерсия); КонечнаяВерсия = Число(КонечнаяВерсия); Лимит = Число(Лимит); @@ -149,7 +158,8 @@ Формат, КоличествоКоммитовДоPush, URLРепозитория, - Лимит); + Лимит, + ПрерватьВыполнениеБезКомментарияКВерсии); Лог.Информация("Отправка изменений на удаленный узел"); КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 64acbb7b..ad64651d 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -918,8 +918,8 @@ Знач Формат = Неопределено, Знач КоличествоКоммитовДоPush = 0, Знач URLРепозитория = Неопределено, - Знач Лимит = 0 - ) Экспорт + Знач Лимит = 0, + Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь) Экспорт Лог.Информация("Начало синхронизации с git"); ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ФайлХранилища); @@ -952,6 +952,10 @@ Формат = РежимВыгрузкиФайлов.Авто; КонецЕсли; + Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда + ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; + КонецЕсли; + Лог.Отладка("Используется формат выгрузки " + Формат); МаксимальнаяВерсияДляРазбора = ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(ТаблицаИсторииХранилища, ТекущаяВерсия, КонечнаяВерсия); @@ -969,6 +973,11 @@ ВызватьИсключение "Нашли следующую версию, а автор не прописан "+СледующаяВерсия + " автор "+СтрокаВерсии.Автор; КонецЕсли; + Если ПустаяСтрока(СтрокаВерсии.Комментарий) + И ПрерватьВыполнениеБезКомментарияКВерсии Тогда + ВызватьИсключение СтрШаблон("Нашли следующую версию %1, а комментарий не задан! Автор %2.", СледующаяВерсия, СтрокаВерсии.Автор);; + КонецЕсли; + Попытка Лог.Информация("Получаем исходники для версии " + СледующаяВерсия + ", " + ТекущаяДата()); diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index cf905875..1921654d 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -78,7 +78,8 @@ Знач Формат = Неопределено, Знач КоличествоКоммитовДоPush = 0, Знач URLРепозитория = Неопределено, - Знач Лимит = 0) Экспорт + Знач Лимит = 0, + Знач ПрерватьВыполнениеБезКомментарияКВерсии) Экспорт ФайлБазыДанныхХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу); Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, @@ -88,7 +89,8 @@ Формат, КоличествоКоммитовДоPush, URLРепозитория, - Лимит); + Лимит, + ПрерватьВыполнениеБезКомментарияКВерсии); КонецПроцедуры // ВыполнитьЭкспортИсходников diff --git a/src/xml-config.os b/src/xml-config.os index c9eaf0b5..13c57fdf 100644 --- a/src/xml-config.os +++ b/src/xml-config.os @@ -96,6 +96,8 @@ Ключ = "ПутьGit"; ИначеЕсли КлючИЗначение.Ключ = "push-every-n-commits" Тогда Ключ = "КоличествоКоммитовДоPush"; + ИначеЕсли КлючИЗначение.Ключ = "stop-if-empty-comment" Тогда + Ключ = "ПрерватьВыполнениеБезКомментарияКВерсии"; Иначе ВызватьИсключение НекорректнаяСтруктураНастроек(); КонецЕсли; diff --git a/tests/git-sync-test.os b/tests/git-sync-test.os index c55b65a8..cdc1ffc2 100644 --- a/tests/git-sync-test.os +++ b/tests/git-sync-test.os @@ -9,6 +9,7 @@ Перем юТест; Перем Распаковщик; Перем Лог; +Перем ЭтоWindows; Процедура Инициализация() @@ -129,7 +130,7 @@ Распаковщик.РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(КаталогПлоскойВыгрузки, КаталогИерархическойВыгрузки, РежимВыгрузкиФайлов.Плоский); - ФайлПереименований = Новый Файл(КаталогИерархическойВыгрузки + "\renames.txt"); + ФайлПереименований = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки,"renames.txt")); Утверждения.ПроверитьИстину(ФайлПереименований.Существует(), "Не удалось разложим модули 1С по иерархии - не существует файл <"+ФайлПереименований.ПолноеИмя+">"); МассивФайлов = НайтиФайлы(КаталогИерархическойВыгрузки,"*.*"); @@ -355,7 +356,7 @@ ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); Батник = Новый КомандныйФайл; - Батник.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + Батник.ДобавитьКоманду(СтрШаблон("cd %1 %2",?(ЭтоWindows, "/d", ""), ОбернутьВКавычки(КаталогИсходников))); Батник.ДобавитьКоманду("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); КодВозврата = Батник.Исполнить(); @@ -426,7 +427,7 @@ ВременныйРепо = ВыполнитьКлонированиеТестовогоРепо(); СоздатьФайлАвторовГит_ДляТестов(ВременныйРепо.ЛокальныйРепозиторий); - Утверждения.ПроверитьИстину(Новый Файл(ВременныйРепо.ЛокальныйРепозиторий+"\AUTHORS").Существует()); + Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(ВременныйРепо.ЛокальныйРепозиторий,"AUTHORS")).Существует()); Распаковщик.ВыполнитьКоммитГит(ВременныйРепо.ЛокальныйРепозиторий, "test commit", "Администратор "); @@ -440,7 +441,7 @@ ВременныйРепо = ВыполнитьКлонированиеТестовогоРепо(); СоздатьФайлАвторовГит_ДляТестов(ВременныйРепо.ЛокальныйРепозиторий); - Утверждения.ПроверитьИстину(Новый Файл(ВременныйРепо.ЛокальныйРепозиторий+"\AUTHORS").Существует()); + Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(ВременныйРепо.ЛокальныйРепозиторий,"AUTHORS")).Существует()); Распаковщик.ВыполнитьКоммитГит(ВременныйРепо.ЛокальныйРепозиторий, "test commit", "Администратор "); @@ -472,19 +473,25 @@ ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); Батник = Новый КомандныйФайл(); Батник.Создать(); - Батник.ДобавитьКоманду("chcp 1251 > nul"); - Батник.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйКаталог)); + Если ЭтоWindows Тогда + Батник.ДобавитьКоманду("chcp 1251 > nul"); + КонецЕсли; + Батник.ДобавитьКоманду(СтрШаблон("cd %1 ""%2""",?(ЭтоWindows, "/d", ""), ЛокальныйКаталог)); ПараметрыКоманды = Новый Массив; ПараметрыКоманды.Добавить("git clone"); ПараметрыКоманды.Добавить(URLРепозитария); - ПараметрыКоманды.Добавить(ОбернутьВКавычки("%CD%")); + ПараметрыКоманды.Добавить(ОбернутьВКавычки(ЛокальныйКаталог)); ПараметрыКоманды.Добавить(СуффиксПеренаправленияВывода(ФайлЛога, Истина)); КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); Лог.Отладка("Командная строка git clone:" + Символы.ПС + КоманднаяСтрока); Батник.ДобавитьКоманду(КоманднаяСтрока); - Батник.ДобавитьКоманду("exit /b %ERRORLEVEL%"); + Если Не ЭтоWindows Тогда + Батник.ДобавитьКоманду("exit $#"); + Иначе + Батник.ДобавитьКоманду("exit /b %ERRORLEVEL%"); + КонецЕсли; РезультатКлонирования = Батник.Исполнить(); // вывод всех сообщений от Git @@ -537,5 +544,7 @@ КонецПроцедуры ////////////////////////////////////////////////////////////////////////////// +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Инициализация(); \ No newline at end of file diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os index 7396f66f..ba6ce857 100644 --- a/tests/test-export_with_min_max_versions.os +++ b/tests/test-export_with_min_max_versions.os @@ -9,6 +9,7 @@ Перем юТест; Перем Распаковщик; Перем Лог; +Перем ЭтоWindows; Процедура Инициализация() @@ -89,7 +90,7 @@ ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); Батник = Новый КомандныйФайл; - Батник.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + Батник.ДобавитьКоманду(СтрШаблон("cd %1 %2",?(ЭтоWindows, "/d", ""), ОбернутьВКавычки(КаталогИсходников))); Батник.ДобавитьКоманду("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); КодВозврата = Батник.Исполнить(); @@ -153,5 +154,7 @@ КонецФункции ////////////////////////////////////////////////////////////////////////////// +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Инициализация(); \ No newline at end of file