From 88b8949502bf9cc91cabde785ebce6d07008bb4c Mon Sep 17 00:00:00 2001 From: Serg Ushakov Date: Fri, 20 Jan 2017 11:34:45 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20?= =?UTF-8?q?=D1=81=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC?= =?UTF-8?q?=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B8=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\267\320\260\321\206\320\270\320\270.os" | 17 +- src/gitsync.os | 8 +- tests/fixtures/TestStoreVer8.1CD | Bin 0 -> 610304 bytes tests/test-export_with_min_max_versions.os | 344 ++++++++++++++++++ 4 files changed, 361 insertions(+), 8 deletions(-) create mode 100644 tests/fixtures/TestStoreVer8.1CD create mode 100644 tests/test-export_with_min_max_versions.os 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 eef03264..6f9122d6 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" @@ -877,8 +877,13 @@ ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ФайлХранилища); ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии); ТекущаяВерсия = НомерСинхронизированнойВерсии(КаталогРабочейКопии); + Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия); СледующаяВерсия = ТекущаяВерсия + 1; + Если НачальнаяВерсия <> 0 Тогда + СледующаяВерсия = Число(НачальнаяВерсия); + КонецЕсли; + Если Формат = Неопределено Тогда Формат = РежимВыгрузкиФайлов.Авто; @@ -941,16 +946,18 @@ Если МаксимальнаяВерсия <> 0 Тогда Попытка - ЧислоВерсийПлюс = Число(МаксимальнаяВерсия); + МаксимальнаяВерсия = Число(МаксимальнаяВерсия); Исключение - ЧислоВерсийПлюс = 0; + МаксимальнаяВерсия = 0; КонецПопытки; КонецЕсли; - Если ЧислоВерсийПлюс>0 Тогда - МаксимальнаяВерсияДляРазбора = ТекущаяВерсия + ЧислоВерсийПлюс; + МаксВерсияВХранилище = ОпределитьМаксимальнуюВерсиюВХранилище(ТаблицаИсторииХранилища); + + Если МаксимальнаяВерсия > 0 Тогда + МаксимальнаяВерсияДляРазбора = Мин(МаксВерсияВХранилище, МаксимальнаяВерсия) ; Иначе - МаксимальнаяВерсияДляРазбора = ОпределитьМаксимальнуюВерсиюВХранилище(ТаблицаИсторииХранилища); + МаксимальнаяВерсияДляРазбора = МаксВерсияВХранилище; КонецЕсли; Возврат МаксимальнаяВерсияДляРазбора; diff --git a/src/gitsync.os b/src/gitsync.os index 52ce46bf..ff4323b8 100644 --- a/src/gitsync.os +++ b/src/gitsync.os @@ -128,6 +128,8 @@ Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-debug", ""); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-verbose", ""); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-format", ""); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-minversion", "<номер минимальной версии для выгрузки>"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-maxversion", "<номер максимальной версии для выгрузки>"); Парсер.ДобавитьКоманду(Команда); @@ -179,8 +181,8 @@ Параметры["ЛокальныйКаталогГит"], Параметры["-email"], Параметры["-v8version"], - , - , + Параметры["-minversion"], + Параметры["-maxversion"], Параметры["-format"], Параметры["-branch"]); @@ -408,7 +410,7 @@ Распаковщик.ВерсияПлатформы = Параметры["-v8version"]; Распаковщик.ДоменПочтыДляGitПоУмолчанию = Параметры["-email"]; Лог.Информация("Начинаю выгрузку исходников"); - ВыполнитьЭкспортИсходников(Распаковщик, Параметры["ПутьКХранилищу"], ЛокальныйКаталогГит,,,Формат); + ВыполнитьЭкспортИсходников(Распаковщик, Параметры["ПутьКХранилищу"], ЛокальныйКаталогГит, Параметры["-minversion"], Параметры["-maxversion"], Формат); Лог.Информация("Выгрузка завершена"); diff --git a/tests/fixtures/TestStoreVer8.1CD b/tests/fixtures/TestStoreVer8.1CD new file mode 100644 index 0000000000000000000000000000000000000000..4af6ae249e76c67f243f39f650bf11b9dc4d5477 GIT binary patch literal 610304 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 H3W5Itv~N4C literal 0 HcmV?d00001 diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os new file mode 100644 index 00000000..d01427b7 --- /dev/null +++ b/tests/test-export_with_min_max_versions.os @@ -0,0 +1,344 @@ +#Использовать tempfiles +#Использовать logos +#Использовать strings + +#Использовать ".." + +Перем юТест; +Перем Распаковщик; +Перем Лог; + +Процедура Инициализация() + + Распаковщик = Новый МенеджерСинхронизации(); + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); + Лог.УстановитьУровень(УровниЛога.Отладка); + +КонецПроцедуры + +Функция ПолучитьСписокТестов(Знач Контекст) Экспорт + + юТест = Контекст; + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура ПослеЗапускаТеста() Экспорт + ВременныеФайлы.Удалить(); +КонецПроцедуры + +Функция ПолучитьФайлКонфигурацииИзМакета(Знач ИмяМакета = "") + + Если ИмяМакета = "" Тогда + ИмяМакета = "TestStoreVer8"; + КонецЕсли; + + + ФайлТестовойКонфигурации = Новый Файл(ОбъединитьПути(КаталогFixtures(), ИмяМакета + ".cf")); + + юТест.Проверить(ФайлТестовойКонфигурации.Существует(), "Файл тестовой конфигурации <"+ФайлТестовойКонфигурации.ПолноеИмя+"> должен существовать"); + + Возврат ФайлТестовойКонфигурации.ПолноеИмя; + +КонецФункции + +Функция ПолучитьПутьКВременномуФайлуХранилища1С() + + ПутьКФайлуХранилища1С = ОбъединитьПути(КаталогFixtures(), "TestStoreVer8.1CD"); + юТест.ПроверитьИстину(ПроверитьСуществованиеФайлаКаталога(ПутьКФайлуХранилища1С, "Тест_ДолженПолучитьФайлВерсийХранилища - ПутьКФайлуХранилища1С")); + + Возврат ПутьКФайлуХранилища1С; + +КонецФункции + +Функция ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") + Если Не ЗначениеЗаполнено(парамПуть) Тогда + Сообщить("Не указан путь <"+допСообщениеОшибки+">"); + Возврат Ложь; + КонецЕсли; + + лфайл = Новый Файл(парамПуть); + Если Не лфайл.Существует() Тогда + Сообщить("Не существует файл <"+допСообщениеОшибки+">"); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; +КонецФункции + +Функция КаталогFixtures() + Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures"); +КонецФункции + +Процедура Тест_ДолженЭкспортироватьНачинаяСВерсии3() Экспорт + + ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); + + КаталогРепо = ВременныеФайлы.СоздатьКаталог(); + КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); + СоздатьКаталог(КаталогИсходников); + + РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); + юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); + + СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); + Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); + + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С, 3); + + ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); + + ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); + ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); + ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); + ЗаписьФайла.Закрыть(); + + КодВозврата = 0; + ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); + юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); + + ЛогГит = Новый ЧтениеТекста; + ЛогГит.Открыть(ИмяФайлаЛогаГит); + КоличествоКоммитов = 0; + Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл + КоличествоКоммитов = КоличествоКоммитов + 1; + КонецЦикла; + ЛогГит.Закрыть(); + юТест.ПроверитьРавенство(КоличествоКоммитов, 6, "Количество коммитов в git-хранилище"); + +КонецПроцедуры + +Процедура Тест_ДолженЭкспортироватьМаксимумВерсию5() Экспорт + + ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); + + КаталогРепо = ВременныеФайлы.СоздатьКаталог(); + КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); + СоздатьКаталог(КаталогИсходников); + + РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); + юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); + + СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); + Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); + + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С,,5); + + ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); + + ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); + ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); + ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); + ЗаписьФайла.Закрыть(); + + КодВозврата = 0; + ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); + юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); + + ЛогГит = Новый ЧтениеТекста; + ЛогГит.Открыть(ИмяФайлаЛогаГит); + КоличествоКоммитов = 0; + Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл + КоличествоКоммитов = КоличествоКоммитов + 1; + КонецЦикла; + ЛогГит.Закрыть(); + юТест.ПроверитьРавенство(КоличествоКоммитов, 5 , "Количество коммитов в git-хранилище"); + +КонецПроцедуры + +Процедура Тест_ДолженЭкспортироватьВерсииС3По7() Экспорт + + ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); + + КаталогРепо = ВременныеФайлы.СоздатьКаталог(); + КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); + СоздатьКаталог(КаталогИсходников); + + РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); + юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); + + СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); + Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); + ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); + + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С,,5); + + ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); + + ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); + ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); + ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); + ЗаписьФайла.Закрыть(); + + КодВозврата = 0; + ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); + юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); + + ЛогГит = Новый ЧтениеТекста; + ЛогГит.Открыть(ИмяФайлаЛогаГит); + КоличествоКоммитов = 0; + Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл + КоличествоКоммитов = КоличествоКоммитов + 1; + КонецЦикла; + ЛогГит.Закрыть(); + юТест.ПроверитьРавенство(КоличествоКоммитов, 5 , "Количество коммитов в git-хранилище"); + +КонецПроцедуры + + +Функция ОбернутьВКавычки(Знач Строка); + Возврат """" + Строка + """"; +КонецФункции + +Функция ИнициализироватьТестовоеХранилищеГит(Знач КаталогРепозитория, Знач КакЧистое = Ложь) + + КодВозврата = Неопределено; + ЗапуститьПриложение("git init" + ?(КакЧистое, " --bare", ""), КаталогРепозитория, Истина, КодВозврата); + + Возврат КодВозврата; + +КонецФункции + +Функция ПутьКВременномуФайлуХранилища1С() + + Возврат ОбъединитьПути(КаталогFixtures(), "TestStoreVer8.1CD"); + +КонецФункции + +Процедура СоздатьФайлАвторовГит_ДляТестов(Знач Каталог) + + ФайлАвторов = Новый ЗаписьТекста; + ФайлАвторов.Открыть(ОбъединитьПути(Каталог, "AUTHORS"), "utf-8"); + ФайлАвторов.ЗаписатьСтроку("Администратор=Администратор "); + ФайлАвторов.ЗаписатьСтроку("Отладка=Отладка "); + ФайлАвторов.Закрыть(); + +КонецПроцедуры + +Функция ВыполнитьКлонированиеТестовогоРепо() + + БазовыйКаталог = ВременныеФайлы.СоздатьКаталог(); + УдаленныйКаталог = ОбъединитьПути(БазовыйКаталог, "remote"); + ЛокальныйКаталог = ОбъединитьПути(БазовыйКаталог, "local"); + СоздатьКаталог(УдаленныйКаталог); + СоздатьКаталог(ЛокальныйКаталог); + + URLРепозитария = УдаленныйКаталог; + + Лог.Отладка("Инициализация репо в каталоге " + URLРепозитария); + Если ИнициализироватьТестовоеХранилищеГит(URLРепозитария, Истина) <> 0 Тогда + ВызватьИсключение "Не удалось инициализировать удаленный репо"; + КонецЕсли; + + ИмяВетки = "master"; + + ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); + Батник = СоздатьКомандныйФайл(); + ДобавитьВКомандныйФайл(Батник, "chcp 1251 > nul"); + ДобавитьВКомандныйФайл(Батник, СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйКаталог)); + + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("git clone"); + ПараметрыКоманды.Добавить(URLРепозитария); + ПараметрыКоманды.Добавить(ОбернутьВКавычки("%CD%")); + ПараметрыКоманды.Добавить(СуффиксПеренаправленияВывода(ФайлЛога, Истина)); + + КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); + Лог.Отладка("Командная строка git clone:" + Символы.ПС + КоманднаяСтрока); + ДобавитьВКомандныйФайл(Батник, КоманднаяСтрока); + ДобавитьВКомандныйФайл(Батник, "exit /b %ERRORLEVEL%"); + + РезультатКлонирования = ВыполнитьКомандныйФайл(Батник); + // вывод всех сообщений от Git + ВывестиТекстФайла(ФайлЛога); + юТест.ПроверитьРавенство(РезультатКлонирования, 0, "git clone должен отработать успешно"); + + Ответ = Новый Структура; + Ответ.Вставить("ЛокальныйРепозиторий", ЛокальныйКаталог); + Ответ.Вставить("URLРепозитария", URLРепозитария); + Ответ.Вставить("ИмяВетки", ИмяВетки); + + Возврат Ответ; + +КонецФункции + +////////////////////////////////////////////////////////////////////////// +// Работа с командными файлами + +Функция СоздатьКомандныйФайл(Знач Путь = "") + + Файл = Новый КомандныйФайл(); + Файл.Открыть(Путь); + + Возврат Файл; + +КонецФункции + +Процедура ДобавитьВКомандныйФайл(Знач ДескрипторКомандногоФайла, Знач Команда) + ДескрипторКомандногоФайла.Добавить(Команда); +КонецПроцедуры + +Функция ВыполнитьКомандныйФайл(Знач ДескрипторКомандногоФайла) + Возврат ДескрипторКомандногоФайла.Выполнить(); +КонецФункции + +Функция ЗакрытьКомандныйФайл(Знач ДескрипторКомандногоФайла) + + Возврат ДескрипторКомандногоФайла.Закрыть(); + +КонецФункции + +Функция СуффиксПеренаправленияВывода(Знач ИмяФайлаПриемника, Знач УчитыватьStdErr = Истина) + Возврат "> " + ИмяФайлаПриемника + ?(УчитыватьStdErr, " 2>&1", ""); +КонецФункции + +Функция СобратьКоманднуюСтроку(Знач ПереченьПараметров) + + СтрокаЗапуска = ""; + Для Каждого Параметр Из ПереченьПараметров Цикл + + СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; + + КонецЦикла; + + Возврат СтрокаЗапуска; + +КонецФункции + +Процедура ВывестиТекстФайла(Знач ИмяФайла, Знач Кодировка = Неопределено) + + Файл = Новый Файл(ИмяФайла); + Если НЕ Файл.Существует() Тогда + Возврат; + КонецЕсли; + + Если Кодировка = Неопределено Тогда + Кодировка = "utf-8"; + КонецЕсли; + + ЧТ = Новый ЧтениеТекста(ИмяФайла, Кодировка); + СтрокаФайла = ЧТ.Прочитать(); + ЧТ.Закрыть(); + + Лог.Информация(СтрокаФайла); + +КонецПроцедуры + +////////////////////////////////////////////////////////////////////////////// + +Инициализация(); \ No newline at end of file From d9f6a51cc5d0d75274b834193a880e057145beac Mon Sep 17 00:00:00 2001 From: Serg Ushakov Date: Fri, 20 Jan 2017 16:11:37 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BB=D1=8E=D1=87=20-limit.=20=D0=9F=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BB=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D0=B8=20=D0=B8=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\267\320\260\321\206\320\270\320\270.os" | 15 +- src/gitsync.os | 62 +++- tests/fixtures/TestStoreVer8.1CD | Bin 610304 -> 0 bytes ...\273\320\270\321\211\320\2601\320\241.1CD" | Bin 593920 -> 610304 bytes tests/git-sync-test.os | 6 +- tests/test-export_with_min_max_versions.os | 281 +++--------------- 6 files changed, 117 insertions(+), 247 deletions(-) delete mode 100644 tests/fixtures/TestStoreVer8.1CD 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 6f9122d6..a631e28b 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" @@ -870,7 +870,8 @@ Знач КонечнаяВерсия = 0, Знач Формат = Неопределено, Знач КоличествоКоммитовДоPush = 0, - Знач URLРепозитория = Неопределено + Знач URLРепозитория = Неопределено, + Знач Лимит = 0 ) Экспорт Лог.Информация("Начало синхронизации с git"); @@ -880,8 +881,18 @@ Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия); СледующаяВерсия = ТекущаяВерсия + 1; + + Если Лимит <> 0 Тогда + КонечнаяВерсия = ТекущаяВерсия + Лимит; + КонецЕсли; + Если НачальнаяВерсия <> 0 Тогда - СледующаяВерсия = Число(НачальнаяВерсия); + Если Лимит <> 0 Тогда + СледующаяВерсия = Число(НачальнаяВерсия); + КонечнаяВерсия = СледующаяВерсия + Лимит; + Иначе + СледующаяВерсия = Макс(СледующаяВерсия, Число(НачальнаяВерсия)); + КонецЕсли; КонецЕсли; diff --git a/src/gitsync.os b/src/gitsync.os index ff4323b8..cb286bd3 100644 --- a/src/gitsync.os +++ b/src/gitsync.os @@ -130,6 +130,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-format", ""); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-minversion", "<номер минимальной версии для выгрузки>"); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-maxversion", "<номер максимальной версии для выгрузки>"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-limit", "<выгрузить неболее limit версий от текущей выгруженной>"); Парсер.ДобавитьКоманду(Команда); @@ -184,7 +185,10 @@ Параметры["-minversion"], Параметры["-maxversion"], Параметры["-format"], - Параметры["-branch"]); + Параметры["-branch"], + 0, + Параметры["-limit"] + ); КонецЕсли; @@ -323,7 +327,8 @@ Знач КонечнаяВерсия = 0, Знач Формат = Неопределено, Знач ИмяВетки = Неопределено, - Знач КоличествоКоммитовДоPush = 0) Экспорт + Знач КоличествоКоммитовДоPush = 0, + Знач Лимит = 0) Экспорт Лог.Информация("Начинаю синхронизацию хранилища 1С и репозитария GIT"); @@ -339,6 +344,19 @@ КоличествоКоммитовДоPush = 0; КонецЕсли; + Если НачальнаяВерсия = "" Тогда + НачальнаяВерсия = 0; + КонецЕсли; + + Если КонечнаяВерсия = "" Тогда + КонечнаяВерсия = 0; + КонецЕсли; + + Если Лимит = "" Тогда + Лимит = 0; + КонецЕсли; + + Если ТипЗнч(КоличествоКоммитовДоPush) = Тип("Строка") Тогда КоличествоКоммитовДоPush = Число(КоличествоКоммитовДоPush); КонецЕсли; @@ -374,7 +392,8 @@ КонечнаяВерсия, Формат, КоличествоКоммитовДоPush, - URLРепозитория); + URLРепозитория, + Лимит); Лог.Информация("Отправка изменений на удаленный узел"); КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки); @@ -386,10 +405,25 @@ КонецПроцедуры -Процедура ВыполнитьЭкспортИсходников(Знач Распаковщик, Знач ПутьКХранилищу, Знач ЛокальныйКаталогГит, Знач НачальнаяВерсия = 0, Знач КонечнаяВерсия = 0, Знач Формат = Неопределено, Знач КоличествоКоммитовДоPush = 0, Знач URLРепозитория= Неопределено) +Процедура ВыполнитьЭкспортИсходников(Знач Распаковщик, + Знач ПутьКХранилищу, + Знач ЛокальныйКаталогГит, + Знач НачальнаяВерсия = 0, + Знач КонечнаяВерсия = 0, + Знач Формат = Неопределено, + Знач КоличествоКоммитовДоPush = 0, + Знач URLРепозитория= Неопределено, + Знач Лимит=0) ФайлБазыДанныхХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу); - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, ФайлБазыДанныхХранилища, НачальнаяВерсия, КонечнаяВерсия, Формат, КоличествоКоммитовДоPush, URLРепозитория); + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, + ФайлБазыДанныхХранилища, + НачальнаяВерсия, + КонечнаяВерсия, + Формат, + КоличествоКоммитовДоPush, + URLРепозитория, + Лимит); КонецПроцедуры @@ -397,6 +431,9 @@ ЛокальныйКаталогГит = Параметры["ЛокальныйКаталогГит"]; Формат = Параметры["-format"]; + МинВерсия = Параметры["-minversion"]; + МаксВерсия = Параметры["-maxversion"]; + Лимит = Параметры["-limit"]; Если ЛокальныйКаталогГит = Неопределено Тогда ЛокальныйКаталогГит = ТекущийКаталог(); @@ -405,12 +442,25 @@ Если Формат = Неопределено Тогда Формат = РежимВыгрузкиФайлов.Авто; КонецЕсли; + + Если МинВерсия = Неопределено Тогда + МинВерсия = 0; + КонецЕсли; + + Если МаксВерсия = Неопределено Тогда + МаксВерсия = 0; + КонецЕсли; + + Если Лимит = Неопределено Тогда + Лимит = 0; + КонецЕсли; + Распаковщик = ПолучитьИНастроитьРаспаковщик(Параметры); Распаковщик.ВерсияПлатформы = Параметры["-v8version"]; Распаковщик.ДоменПочтыДляGitПоУмолчанию = Параметры["-email"]; Лог.Информация("Начинаю выгрузку исходников"); - ВыполнитьЭкспортИсходников(Распаковщик, Параметры["ПутьКХранилищу"], ЛокальныйКаталогГит, Параметры["-minversion"], Параметры["-maxversion"], Формат); + ВыполнитьЭкспортИсходников(Распаковщик, Параметры["ПутьКХранилищу"], ЛокальныйКаталогГит, МинВерсия, МаксВерсия, Формат,,,Лимит); Лог.Информация("Выгрузка завершена"); diff --git a/tests/fixtures/TestStoreVer8.1CD b/tests/fixtures/TestStoreVer8.1CD deleted file mode 100644 index 4af6ae249e76c67f243f39f650bf11b9dc4d5477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610304 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 H3W5Itv~N4C diff --git "a/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\244\320\260\320\271\320\273\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\2601\320\241.1CD" "b/tests/fixtures/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\244\320\260\320\271\320\273\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\2601\320\241.1CD" index b9fca4b59834a79402f27054beb9f63f8a2202af..4af6ae249e76c67f243f39f650bf11b9dc4d5477 100644 GIT binary patch delta 9428 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 должен существовать"); - - Возврат ФайлТестовойКонфигурации.ПолноеИмя; - -КонецФункции - -Функция ПолучитьПутьКВременномуФайлуХранилища1С() - - ПутьКФайлуХранилища1С = ОбъединитьПути(КаталогFixtures(), "TestStoreVer8.1CD"); - юТест.ПроверитьИстину(ПроверитьСуществованиеФайлаКаталога(ПутьКФайлуХранилища1С, "Тест_ДолженПолучитьФайлВерсийХранилища - ПутьКФайлуХранилища1С")); - - Возврат ПутьКФайлуХранилища1С; - -КонецФункции - -Функция ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") - Если Не ЗначениеЗаполнено(парамПуть) Тогда - Сообщить("Не указан путь <"+допСообщениеОшибки+">"); - Возврат Ложь; - КонецЕсли; - - лфайл = Новый Файл(парамПуть); - Если Не лфайл.Существует() Тогда - Сообщить("Не существует файл <"+допСообщениеОшибки+">"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; -КонецФункции - -Функция КаталогFixtures() - Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures"); -КонецФункции +////////////////////////////////////////////////////////////////////////////// +// Реализация тестов Процедура Тест_ДолженЭкспортироватьНачинаяСВерсии3() Экспорт - - ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); - - КаталогРепо = ВременныеФайлы.СоздатьКаталог(); - КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); - СоздатьКаталог(КаталогИсходников); - - РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); - юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); - - СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); - Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); - - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С, 3); - - ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); - - ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); - ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); - ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); - ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); - ЗаписьФайла.Закрыть(); - - КодВозврата = 0; - ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); - юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); - - ЛогГит = Новый ЧтениеТекста; - ЛогГит.Открыть(ИмяФайлаЛогаГит); - КоличествоКоммитов = 0; - Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл - КоличествоКоммитов = КоличествоКоммитов + 1; - КонецЦикла; - ЛогГит.Закрыть(); - юТест.ПроверитьРавенство(КоличествоКоммитов, 6, "Количество коммитов в git-хранилище"); - + КоличествоКоммитов = ВыполнитьСинхронизацию(3); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 6, "Количество коммитов в git-хранилище"); КонецПроцедуры Процедура Тест_ДолженЭкспортироватьМаксимумВерсию5() Экспорт - - ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); - - КаталогРепо = ВременныеФайлы.СоздатьКаталог(); - КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); - СоздатьКаталог(КаталогИсходников); - - РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); - юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); - - СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); - Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); - - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С,,5); - - ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); - - ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); - ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); - ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); - ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); - ЗаписьФайла.Закрыть(); - - КодВозврата = 0; - ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); - юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); - - ЛогГит = Новый ЧтениеТекста; - ЛогГит.Открыть(ИмяФайлаЛогаГит); - КоличествоКоммитов = 0; - Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл - КоличествоКоммитов = КоличествоКоммитов + 1; - КонецЦикла; - ЛогГит.Закрыть(); - юТест.ПроверитьРавенство(КоличествоКоммитов, 5 , "Количество коммитов в git-хранилище"); - + КоличествоКоммитов = ВыполнитьСинхронизацию(0, 5); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); КонецПроцедуры Процедура Тест_ДолженЭкспортироватьВерсииС3По7() Экспорт - + КоличествоКоммитов = ВыполнитьСинхронизацию(3, 7); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); +КонецПроцедуры + +Процедура Тест_ДолженЭкспортироватьНеБолее2() Экспорт + КоличествоКоммитов = ВыполнитьСинхронизацию(0, 0, 2); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 2, "Количество коммитов в git-хранилище"); +КонецПроцедуры + +////////////////////////////////////////////////////////////////////////////// + +Функция ВыполнитьСинхронизацию(МинВерсия=0, МаксВерсия=0, Лимит=0) + ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); КаталогРепо = ВременныеФайлы.СоздатьКаталог(); @@ -168,26 +71,23 @@ СоздатьКаталог(КаталогИсходников); РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); - юТест.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); + Утверждения.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С,,5); + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С, МинВерсия, МаксВерсия,,,, Лимит); ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); - ФайлКоманды = ВременныеФайлы.НовоеИмяФайла("cmd"); - ЗаписьФайла = Новый ЗаписьТекста(ФайлКоманды, "cp866"); - ЗаписьФайла.ЗаписатьСтроку("cd /d " + ОбернутьВКавычки(КаталогИсходников)); - ЗаписьФайла.ЗаписатьСтроку("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); - ЗаписьФайла.Закрыть(); + Батник = Новый КомандныйФайл; + Батник.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогИсходников)); + Батник.ДобавитьКоманду("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); - КодВозврата = 0; - ЗапуститьПриложение("cmd.exe /C " + ОбернутьВКавычки(ФайлКоманды), , Истина, КодВозврата); - юТест.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); + КодВозврата = Батник.Исполнить(); + Утверждения.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); ЛогГит = Новый ЧтениеТекста; ЛогГит.Открыть(ИмяФайлаЛогаГит); @@ -196,10 +96,9 @@ КоличествоКоммитов = КоличествоКоммитов + 1; КонецЦикла; ЛогГит.Закрыть(); - юТест.ПроверитьРавенство(КоличествоКоммитов, 5 , "Количество коммитов в git-хранилище"); - -КонецПроцедуры + Возврат КоличествоКоммитов; +КонецФункции Функция ОбернутьВКавычки(Знач Строка); Возврат """" + Строка + """"; @@ -211,12 +110,12 @@ ЗапуститьПриложение("git init" + ?(КакЧистое, " --bare", ""), КаталогРепозитория, Истина, КодВозврата); Возврат КодВозврата; - + КонецФункции Функция ПутьКВременномуФайлуХранилища1С() - Возврат ОбъединитьПути(КаталогFixtures(), "TestStoreVer8.1CD"); + Возврат ОбъединитьПути(КаталогFixtures(), "ТестовыйФайлХранилища1С.1CD"); КонецФункции @@ -230,115 +129,25 @@ КонецПроцедуры -Функция ВыполнитьКлонированиеТестовогоРепо() - - БазовыйКаталог = ВременныеФайлы.СоздатьКаталог(); - УдаленныйКаталог = ОбъединитьПути(БазовыйКаталог, "remote"); - ЛокальныйКаталог = ОбъединитьПути(БазовыйКаталог, "local"); - СоздатьКаталог(УдаленныйКаталог); - СоздатьКаталог(ЛокальныйКаталог); - - URLРепозитария = УдаленныйКаталог; - - Лог.Отладка("Инициализация репо в каталоге " + URLРепозитария); - Если ИнициализироватьТестовоеХранилищеГит(URLРепозитария, Истина) <> 0 Тогда - ВызватьИсключение "Не удалось инициализировать удаленный репо"; +Функция ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") + Если Не ЗначениеЗаполнено(парамПуть) Тогда + Сообщить("Не указан путь <"+допСообщениеОшибки+">"); + Возврат Ложь; КонецЕсли; - ИмяВетки = "master"; - - ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); - Батник = СоздатьКомандныйФайл(); - ДобавитьВКомандныйФайл(Батник, "chcp 1251 > nul"); - ДобавитьВКомандныйФайл(Батник, СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйКаталог)); - - ПараметрыКоманды = Новый Массив; - ПараметрыКоманды.Добавить("git clone"); - ПараметрыКоманды.Добавить(URLРепозитария); - ПараметрыКоманды.Добавить(ОбернутьВКавычки("%CD%")); - ПараметрыКоманды.Добавить(СуффиксПеренаправленияВывода(ФайлЛога, Истина)); - - КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); - Лог.Отладка("Командная строка git clone:" + Символы.ПС + КоманднаяСтрока); - ДобавитьВКомандныйФайл(Батник, КоманднаяСтрока); - ДобавитьВКомандныйФайл(Батник, "exit /b %ERRORLEVEL%"); - - РезультатКлонирования = ВыполнитьКомандныйФайл(Батник); - // вывод всех сообщений от Git - ВывестиТекстФайла(ФайлЛога); - юТест.ПроверитьРавенство(РезультатКлонирования, 0, "git clone должен отработать успешно"); - - Ответ = Новый Структура; - Ответ.Вставить("ЛокальныйРепозиторий", ЛокальныйКаталог); - Ответ.Вставить("URLРепозитария", URLРепозитария); - Ответ.Вставить("ИмяВетки", ИмяВетки); - - Возврат Ответ; - -КонецФункции - -////////////////////////////////////////////////////////////////////////// -// Работа с командными файлами - -Функция СоздатьКомандныйФайл(Знач Путь = "") - - Файл = Новый КомандныйФайл(); - Файл.Открыть(Путь); - - Возврат Файл; - -КонецФункции - -Процедура ДобавитьВКомандныйФайл(Знач ДескрипторКомандногоФайла, Знач Команда) - ДескрипторКомандногоФайла.Добавить(Команда); -КонецПроцедуры - -Функция ВыполнитьКомандныйФайл(Знач ДескрипторКомандногоФайла) - Возврат ДескрипторКомандногоФайла.Выполнить(); -КонецФункции - -Функция ЗакрытьКомандныйФайл(Знач ДескрипторКомандногоФайла) - - Возврат ДескрипторКомандногоФайла.Закрыть(); + лфайл = Новый Файл(парамПуть); + Если Не лфайл.Существует() Тогда + Сообщить("Не существует файл <"+допСообщениеОшибки+">"); + Возврат Ложь; + КонецЕсли; + Возврат Истина; КонецФункции -Функция СуффиксПеренаправленияВывода(Знач ИмяФайлаПриемника, Знач УчитыватьStdErr = Истина) - Возврат "> " + ИмяФайлаПриемника + ?(УчитыватьStdErr, " 2>&1", ""); -КонецФункции - -Функция СобратьКоманднуюСтроку(Знач ПереченьПараметров) - - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПереченьПараметров Цикл - - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - - КонецЦикла; - - Возврат СтрокаЗапуска; - +Функция КаталогFixtures() + Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures"); КонецФункции -Процедура ВывестиТекстФайла(Знач ИмяФайла, Знач Кодировка = Неопределено) - - Файл = Новый Файл(ИмяФайла); - Если НЕ Файл.Существует() Тогда - Возврат; - КонецЕсли; - - Если Кодировка = Неопределено Тогда - Кодировка = "utf-8"; - КонецЕсли; - - ЧТ = Новый ЧтениеТекста(ИмяФайла, Кодировка); - СтрокаФайла = ЧТ.Прочитать(); - ЧТ.Закрыть(); - - Лог.Информация(СтрокаФайла); - -КонецПроцедуры - ////////////////////////////////////////////////////////////////////////////// Инициализация(); \ No newline at end of file From c709e7b564902ae0b0ecbe611b0124d53e871b13 Mon Sep 17 00:00:00 2001 From: Serg Ushakov Date: Fri, 20 Jan 2017 17:09:26 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=92=D1=8B=D0=BA=D0=B8=D0=B4=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=8E=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=20=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=D0=A1=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=A4=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=B0=D0=9A=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC=D1=83=20=D0=BF=D1=83=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test-export_with_min_max_versions.os | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os index 0770bc67..c2feef48 100644 --- a/tests/test-export_with_min_max_versions.os +++ b/tests/test-export_with_min_max_versions.os @@ -24,9 +24,9 @@ ВсеТесты = Новый Массив; - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); + // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); + // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); + // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНеБолее2"); Возврат ВсеТесты; @@ -129,20 +129,18 @@ КонецПроцедуры -Функция ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") +Процедура ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") + Если Не ЗначениеЗаполнено(парамПуть) Тогда - Сообщить("Не указан путь <"+допСообщениеОшибки+">"); - Возврат Ложь; + ВызватьИсключение "Не указан путь <"+допСообщениеОшибки+">"; КонецЕсли; лфайл = Новый Файл(парамПуть); Если Не лфайл.Существует() Тогда - Сообщить("Не существует файл <"+допСообщениеОшибки+">"); - Возврат Ложь; + ВызватьИсключение "Не существует файл <"+допСообщениеОшибки+">"; КонецЕсли; - Возврат Истина; -КонецФункции +КонецПроцедуры Функция КаталогFixtures() Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures"); From dd81e3f33325b539f84c6fe4343c43731389807a Mon Sep 17 00:00:00 2001 From: Serg Ushakov Date: Fri, 20 Jan 2017 17:14:00 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=97=D0=B0=D0=B1=D1=8B=D0=BB=20=D0=B2?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B8=D1=82=D1=8C=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test-export_with_min_max_versions.os | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os index c2feef48..c3617986 100644 --- a/tests/test-export_with_min_max_versions.os +++ b/tests/test-export_with_min_max_versions.os @@ -24,9 +24,9 @@ ВсеТесты = Новый Массив; - // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); - // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); - // ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНеБолее2"); Возврат ВсеТесты; From fceb54eef51d36b07d34715b839e6eefd42e8518 Mon Sep 17 00:00:00 2001 From: Serg Ushakov Date: Fri, 20 Jan 2017 18:04:47 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=9D=D0=B0=D0=B4=D0=BE=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20max?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\320\270\320\267\320\260\321\206\320\270\320\270.os" | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 a631e28b..dc5530c4 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" @@ -883,19 +883,22 @@ СледующаяВерсия = ТекущаяВерсия + 1; Если Лимит <> 0 Тогда - КонечнаяВерсия = ТекущаяВерсия + Лимит; + Если КонечнаяВерсия = 0 Тогда + КонечнаяВерсия = ТекущаяВерсия + Лимит; + КонецЕсли; КонецЕсли; Если НачальнаяВерсия <> 0 Тогда Если Лимит <> 0 Тогда СледующаяВерсия = Число(НачальнаяВерсия); - КонечнаяВерсия = СледующаяВерсия + Лимит; + КонечнаяВерсияИзНачальной = (СледующаяВерсия + Лимит); + + КонечнаяВерсия = ?(КонечнаяВерсия > КонечнаяВерсияИзНачальной, КонечнаяВерсия,КонечнаяВерсияИзНачальной); Иначе СледующаяВерсия = Макс(СледующаяВерсия, Число(НачальнаяВерсия)); КонецЕсли; КонецЕсли; - Если Формат = Неопределено Тогда Формат = РежимВыгрузкиФайлов.Авто; КонецЕсли; From 735ddaee36639fd68c4fcc92a66b4ba31b6ba76a Mon Sep 17 00:00:00 2001 From: ret-Phoenix Date: Fri, 20 Jan 2017 20:51:43 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C,=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 21 +++++++++++++++++++ ...20\267\320\260\321\206\320\270\320\270.os" | 19 +++++++---------- tests/test-export_with_min_max_versions.os | 8 ++++++- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index 679c8946..6696c222 100644 --- a/readme.md +++ b/readme.md @@ -157,6 +157,9 @@ -verbose - -branch - <имя ветки git> -format - + -minversion - Число, номер минимальной версии для выгрузки + -maxversion - Число, номер максимальной версии для выгрузки + -limit - Число, выгрузить неболее limit версий от текущей выгруженной Возможные команды: clone - Клонирует существующий репозиторий и создает служебные файлы @@ -176,3 +179,21 @@ gitsync all <путь к xml-файлу конфигурации> Подробнее о параметрах команды `all` можно прочитать, запустив `gitsync help all` + +# Примеры испльзования количественных min/max version и limit + +Выгрузить все версии начиная с 5 + + gitsync export store -minversion 5 + +Выгрузить версии с 5 по 10 + + gitsync export store -minversion 5 -maxversion 10 + +Выгрузить не более 2 версий от последней выгруженной. Последняя выгруженная 4, выгружаем 2 следующие: 5 и 6. + + gitsync export store -limit 2 + +Выгрузить 2 версии от последней выгруженной, но не более 5-ой версии. Удобно когда выгрузка идет небольшими партиями, при заранее известном максимальном номере версии. + + gitsync export store -maxversion 5 -limit 2 \ No newline at end of file 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 dc5530c4..ccfbf9d7 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" @@ -881,22 +881,19 @@ Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия); СледующаяВерсия = ТекущаяВерсия + 1; - - Если Лимит <> 0 Тогда - Если КонечнаяВерсия = 0 Тогда - КонечнаяВерсия = ТекущаяВерсия + Лимит; - КонецЕсли; + + Если НачальнаяВерсия > 0 Тогда + СледующаяВерсия = НачальнаяВерсия; КонецЕсли; - Если НачальнаяВерсия <> 0 Тогда - Если Лимит <> 0 Тогда - СледующаяВерсия = Число(НачальнаяВерсия); - КонечнаяВерсияИзНачальной = (СледующаяВерсия + Лимит); + Если Лимит > 0 Тогда - КонечнаяВерсия = ?(КонечнаяВерсия > КонечнаяВерсияИзНачальной, КонечнаяВерсия,КонечнаяВерсияИзНачальной); + Если КонечнаяВерсия = 0 Тогда + КонечнаяВерсия = ТекущаяВерсия + Лимит; Иначе - СледующаяВерсия = Макс(СледующаяВерсия, Число(НачальнаяВерсия)); + КонечнаяВерсия = ?(КонечнаяВерсия >= (ТекущаяВерсия + Лимит), КонечнаяВерсия, (ТекущаяВерсия + Лимит)); КонецЕсли; + КонецЕсли; Если Формат = Неопределено Тогда diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os index c3617986..7396f66f 100644 --- a/tests/test-export_with_min_max_versions.os +++ b/tests/test-export_with_min_max_versions.os @@ -14,7 +14,7 @@ Распаковщик = Новый МенеджерСинхронизации(); Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); - Лог.УстановитьУровень(УровниЛога.Отладка); + Лог.УстановитьУровень(УровниЛога.Информация); КонецПроцедуры @@ -28,6 +28,7 @@ ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНеБолее2"); + ВсеТесты.Добавить("Тест_ДолженЭкспортироватьПо2НоНеВыше5"); Возврат ВсеТесты; @@ -60,6 +61,11 @@ Утверждения.ПроверитьРавенство(КоличествоКоммитов, 2, "Количество коммитов в git-хранилище"); КонецПроцедуры +Процедура Тест_ДолженЭкспортироватьПо2НоНеВыше5() Экспорт + КоличествоКоммитов = ВыполнитьСинхронизацию(0, 5, 2); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); +КонецПроцедуры + ////////////////////////////////////////////////////////////////////////////// Функция ВыполнитьСинхронизацию(МинВерсия=0, МаксВерсия=0, Лимит=0) From 9175ba0665345e963451a592fa80844d584eb306 Mon Sep 17 00:00:00 2001 From: ret-Phoenix Date: Fri, 20 Jan 2017 20:54:50 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=BE=D1=80=D1=84=D0=BE=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=84=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 6696c222..9ed45e1c 100644 --- a/readme.md +++ b/readme.md @@ -180,7 +180,7 @@ Подробнее о параметрах команды `all` можно прочитать, запустив `gitsync help all` -# Примеры испльзования количественных min/max version и limit +# Примеры использования min/max version и limit Выгрузить все версии начиная с 5 From 4bdc1379b0a41e9892208afb7c60604dc82db3b8 Mon Sep 17 00:00:00 2001 From: ret-Phoenix Date: Sat, 21 Jan 2017 12:03:40 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BC=D0=B8=D0=BD.=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ccfbf9d7..800c931a 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" @@ -883,7 +883,7 @@ СледующаяВерсия = ТекущаяВерсия + 1; Если НачальнаяВерсия > 0 Тогда - СледующаяВерсия = НачальнаяВерсия; + СледующаяВерсия = Макс(НачальнаяВерсия, СледующаяВерсия); КонецЕсли; Если Лимит > 0 Тогда