diff --git a/README.md b/README.md index 01d2e1d..184f7b4 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,8 @@ yard process --work-dir "c:\tmp" ".\examples\releases2templates.json" - **list** (l) - получение списка приложений и версий с портала 1С - _--app-filter_ - фильтр приложений по имени (регулярное выражение) - _--version-filter_ - фильтр версий по номеру (регулярное выражение) - - _--version-start-date_ - фильтр по начальной дате версии (включая) - - _--version-end-date_ - фильтр по последней дате версии (включая) + - _--version-start-date_ - фильтр по начальной дате версии (формат: dd.MM.yyyy, включая дату) + - _--version-end-date_ - фильтр по последней дате версии (формат: dd.MM.yyyy, включая дату) - _--output-file_ - путь к фалу (json) для сохранения списка приложений и версий #### Пример: @@ -76,9 +76,12 @@ yard releases --user "user" --pwd "pwd" list --app-filter "Библиотека - **get** (g) - загрузка указанных версий, указанных приложений с портала 1С - _--app-filter_ - фильтр приложений по имени (регулярное выражение) - _--version-filter_ - фильтр версий по номеру (регулярное выражение) - - _--version-start-date_ - фильтр по начальной дате версии (включая) - - _--version-end-date_ - фильтр по последней дате версии (включая) + - _--version-start-date_ - фильтр по начальной дате версии (формат: dd.MM.yyyy, включая дату) + - _--version-end-date_ - фильтр по последней дате версии (формат: dd.MM.yyyy, включая дату) - _--path_ - каталог для загрузки релизов 1С + - _--from-last-version_ - флаг загрузки версий с номером старше последней версии в каталоге для загрузки (проверяются файлы description.json) + - _--download-existing_ - флаг принудительной загрузки ранее загруженных версий в каталоге для загрузки (проверяются файлы description.json) + - _--download-limit_ - ограничение количества загружаемых версий за 1 запуск - _--extract_ - флаг распаковки загруженного архива - _--extract-path_ - каталог для распаковки загруженного архива - _--extract-files_ - список файлов для распаковки из архива дистрибутива, разделенный "|" @@ -127,7 +130,7 @@ yard build-all --path ".\tmp\tmplts\1c\AccountingCorp" --ibconnection "/SMyServe - _--git-branch_ - имя ветки git в которую будет выполняться выгрузка (по умолчанию: base1c) - _--git-author_ - имя автора коммита в git (по умолчанию: 1c) - _--git-author-email_ - почта автора коммита в git (по умолчанию: 1c@1c.ru) - - _--git-commit-date_ - дата коммита в git в формате POSIX (по умолчанию: <ТекущаяУниверсальнаяДата>) + - _--git-commit-date_ - дата коммита в git в формате POSIX (формат: yyyy-MM-dd hh:mm:ss, по умолчанию: <ТекущаяУниверсальнаяДата>) - _--git-commit-message_ - сообщение коммита в git - _--ibconnection_ - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ) diff --git a/packagedef b/packagedef index bd26275..a16c1c7 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("yard") - .Версия("1.3.0") + .Версия("1.4.0") .ВерсияСреды("1.4") .ЗависитОт("logos") .ЗависитОт("asserts") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" index be80770..c9fbad4 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" @@ -14,6 +14,8 @@ Перем Данные; // Массив(Структура) - список конфигураций для обработки +Перем ЗагруженныеВерсии; // Соответствие - список найденных версий в каталоге загрузки + Перем ИмяПользователя; // Строка - имя пользователя сайта релизов 1С Перем ПарольПользователя; // Строка - пароль пользователя сайта релизов 1С @@ -21,11 +23,21 @@ Перем ФильтрВерсий; // Массив(Строка) - фильтр номеров версий Перем ФильтрВерсийНачинаяСДаты; // Дата - фильтр по начальной дате версии (включая) Перем ФильтрВерсийДоДаты; // Дата - фильтр по последней дате версии (включая) -Перем ФильтрДистрибутива; // Строка - фильтр заголовков ссылок на скачивание дистрибутива +Перем ФильтрДистрибутива; // Строка - фильтр заголовков ссылок на скачивание дистрибутива // если не указан, то будет выполнена проверка наличия ссылки // "Полный дистрибутив", затем "Дистрибутив обновления" Перем КаталогДляСохранения; // Строка - каталог для загрузки релизов 1С +Перем НачатьСПоследнейВерсии; // Булево - Истина - будут загружены релизы с версией + // старше последней найденной в каталоге для загрузки + // (проверяются файлы description.json) + // Ложь - будут загружены все релизы с учетом других настроек +Перем ЗагружатьСуществующие; // Булево - Истина - будут загружены все найденные релизы + // независимо от существующих в каталоге для загрузки + // Ложь - будут загружены только отсутствующие + // в каталоге для загрузки релизы + // (проверяются файлы description.json) +Перем ОграничениеКоличества; // Число - ограничение количества загружаемых за 1 раз версий Перем РаспаковыватьEFD; // Булево - Истина - если загруженный архив содержит упакованный шаблон // конфигурации (содержит файл 1cv8.efd), // то он будет распакован @@ -126,13 +138,41 @@ |если не указан, то будет выполнена проверка наличия ссылки |""Полный дистрибутив"", затем ""Дистрибутив обновления"""); - ДобавитьОписаниеПараметра(Параметры, + ДобавитьОписаниеПараметра(Параметры, "КаталогДляСохранения", "Строка", Истина, "", "каталог для загрузки релизов 1С"); + ДобавитьОписаниеПараметра(Параметры, + "НачатьСПоследнейВерсии", + "Булево", + Ложь, + Ложь, + "Истина - будут загружены релизы с версией + |старше последней найденной в каталоге для загрузки + |(проверяются файлы description.json) + |Ложь - будут загружены все релизы с учетом других настроек"); + + ДобавитьОписаниеПараметра(Параметры, + "ЗагружатьСуществующие", + "Булево", + Ложь, + Ложь, + "Истина - будут загружены все найденные релизы + |независимо от существующих в каталоге для загрузки + |Ложь - будут загружены только отсутствующие + |в каталоге для загрузки релизы + |(проверяются файлы description.json)"); + + ДобавитьОписаниеПараметра(Параметры, + "ОграничениеКоличества", + "Число", + Ложь, + 0, + "ограничение количества загружаемых за 1 раз версий"); + ДобавитьОписаниеПараметра(Параметры, "РаспаковыватьEFD", "Булево", @@ -161,8 +201,8 @@ "Булево", Ложь, "", - "Истина - после рапаковки загруженный архив будет удален"); - + "Истина - после рапаковки загруженный архив будет удален"); + ДобавитьОписаниеПараметра(Параметры, "ПолучатьБетаВерсии", "Булево", @@ -246,6 +286,9 @@ УстановитьПараметрОбработкиДанныхИзСтруктуры("ПолучатьБетаВерсии" , ПараметрыОбработки, Ложь); УстановитьПараметрОбработкиДанныхИзСтруктуры("ФильтрДистрибутива" , ПараметрыОбработки); УстановитьПараметрОбработкиДанныхИзСтруктуры("КаталогДляСохранения" , ПараметрыОбработки); + УстановитьПараметрОбработкиДанныхИзСтруктуры("НачатьСПоследнейВерсии" , ПараметрыОбработки, Ложь); + УстановитьПараметрОбработкиДанныхИзСтруктуры("ЗагружатьСуществующие" , ПараметрыОбработки, Ложь); + УстановитьПараметрОбработкиДанныхИзСтруктуры("ОграничениеКоличества" , ПараметрыОбработки, 0); УстановитьПараметрОбработкиДанныхИзСтруктуры("РаспаковыватьEFD" , ПараметрыОбработки, Ложь); УстановитьПараметрОбработкиДанныхИзСтруктуры("КаталогДляРаспаковкиEFD" , ПараметрыОбработки); УстановитьПараметрОбработкиДанныхИзСтруктуры("ФайлыДляРаспаковкиEFD" , ПараметрыОбработки); @@ -363,6 +406,8 @@ Обозреватель = Новый ОбозревательСайта1С(ИмяПользователя, ПарольПользователя); КонецЕсли; + ОбработаноВерсий = 0; + Для Каждого ТекЭлемент Из Данные Цикл ЗаполнитьВерсии = Истина; @@ -374,7 +419,7 @@ ВерсииПриложения = Обозреватель.ПолучитьВерсииПриложения(ТекЭлемент.Путь, ФильтрВерсий, ФильтрВерсийНачинаяСДаты, - ФильтрВерсийДоДаты); + ФильтрВерсийДоДаты); Если ПолучатьБетаВерсии Тогда Для Каждого ТекБетаВерсия Из ТекЭлемент.БетаВерсии Цикл @@ -395,8 +440,23 @@ Обозреватель.ЕстьСсылкаДляЗагрузки(ТекВерсия.Путь, "Дистрибутив обновления$")); КонецЕсли; + Если НЕ ЗагружатьВерсию(ТекВерсия) Тогда + Продолжить; + КонецЕсли; + + Если ОграничениеКоличества > 0 Тогда + Лог.Информация("[%1]: Загрузка версии %2 из %3", ТипЗнч(ЭтотОбъект), ОбработаноВерсий + 1, ОграничениеКоличества); + КонецЕсли; + ОбработатьВерсиюПриложения(ТекВерсия, Обозреватель); + ОбработаноВерсий = ОбработаноВерсий + 1; + + Если ОграничениеКоличества > 0 И ОбработаноВерсий >= ОграничениеКоличества Тогда + Лог.Информация("[%1]: Достигнут лимит загружаемых версий %2", ТипЗнч(ЭтотОбъект), ОграничениеКоличества); + Прервать; + КонецЕсли; + КонецЦикла; Если ЗаполнитьВерсии Тогда @@ -404,6 +464,11 @@ КонецЕсли; ПродолжениеОбработкиДанныхВызовМенеджера(ТекЭлемент); + + Если ОграничениеКоличества > 0 И ОбработаноВерсий >= ОграничениеКоличества Тогда + Прервать; + КонецЕсли; + КонецЦикла; ЗавершениеОбработкиДанныхВызовМенеджера(); @@ -480,6 +545,23 @@ .ТСтрока() .ВОкружении("YARD_RELEASES_DOWNLOAD_PATH"); + Команда.Опция("flv from-last-version", Ложь, "Истина - будут загружены релизы с версией + |старше последней найденной в каталоге для загрузки + |(проверяются файлы description.json) + |Ложь - будут загружены все релизы с учетом других настроек") + .Флаг(); + + Команда.Опция("de download-existing", Ложь, "Истина - будут загружены все найденные релизы + |независимо от существующих в каталоге для загрузки + |Ложь - будут загружены только отсутствующие + |в каталоге для загрузки релизы + |(проверяются файлы description.json)") + .Флаг(); + + Команда.Опция("dl download-limit", 0, "ограничение количества загружаемых за 1 раз версий") + .ТЧисло() + .ВОкружении("YARD_RELEASES_DOWNLOAD_LIMIT"); + Команда.Опция("e extract", Ложь, "флаг распаковки загруженного архива") .Флаг(); @@ -530,6 +612,9 @@ УстановитьПараметрОбработкиДанных("ФильтрДистрибутива" , ВремФильтрДистрибутива); УстановитьПараметрОбработкиДанных("КаталогДляСохранения" , Команда.ЗначениеОпции("path")); + УстановитьПараметрОбработкиДанных("НачатьСПоследнейВерсии" , Команда.ЗначениеОпции("from-last-version")); + УстановитьПараметрОбработкиДанных("ЗагружатьСуществующие" , Команда.ЗначениеОпции("download-existing")); + УстановитьПараметрОбработкиДанных("ОграничениеКоличества" , Команда.ЗначениеОпции("download-limit")); УстановитьПараметрОбработкиДанных("РаспаковыватьEFD" , Команда.ЗначениеОпции("extract")); УстановитьПараметрОбработкиДанных("КаталогДляРаспаковкиEFD" , Команда.ЗначениеОпции("extract-path")); УстановитьПараметрОбработкиДанных("УдалитьПослеРаспаковкиEFD", Команда.ЗначениеОпции("delete")); @@ -802,6 +887,79 @@ КонецПроцедуры // ЗаписатьОписаниеВерсииВФайл() +Процедура ЗаполнитьСписокЗагруженныхВерсий(ИдентификаторПриложения) + + Если НЕ ТипЗнч(ЗагруженныеВерсии) = Тип("Соответствие") Тогда + ЗагруженныеВерсии = Новый Соответствие(); + КонецЕсли; + + ФайлыОписанийВерсий = НайтиФайлы(ОбъединитьПути(КаталогДляСохранения, ИдентификаторПриложения), + "description.json", + Истина); + + Если НЕ ТипЗнч(ЗагруженныеВерсии.Получить(ИдентификаторПриложения)) = Тип("Массив") Тогда + ЗагруженныеВерсии.Вставить(ИдентификаторПриложения, Новый Массив()); + КонецЕсли; + + Для Каждого ТекФайл Из ФайлыОписанийВерсий Цикл + + ОписаниеВерсии = Служебный.ОписаниеРелиза(ТекФайл.ПолноеИмя); + + ЗагруженныеВерсии[ИдентификаторПриложения].Добавить(ОписаниеВерсии.Версия); + + КонецЦикла; + + Служебный.СортироватьВерсии(ЗагруженныеВерсии[ИдентификаторПриложения]); + +КонецПроцедуры // ЗаполнитьСписокЗагруженныхВерсий() + +Функция ЗагружатьВерсию(ОписаниеВерсии) + + Если ЗагружатьСуществующие И НЕ НачатьСПоследнейВерсии Тогда + Возврат Истина; + КонецЕсли; + + Если ЗагруженныеВерсии = Неопределено Тогда + ЗаполнитьСписокЗагруженныхВерсий(ОписаниеВерсии.Идентификатор); + КонецЕсли; + + ЗагруженныеВерсииПриложения = ЗагруженныеВерсии.Получить(ОписаниеВерсии.Идентификатор); + Если ЗагруженныеВерсииПриложения = Неопределено Тогда + ЗаполнитьСписокЗагруженныхВерсий(ОписаниеВерсии.Идентификатор); + КонецЕсли; + + Если НачатьСПоследнейВерсии И ЗначениеЗаполнено(ЗагруженныеВерсииПриложения) Тогда + ПоследняяВерсия = ЗагруженныеВерсииПриложения[ЗагруженныеВерсииПриложения.ВГраница()]; + Если Служебный.СравнитьВерсии(ОписаниеВерсии.Версия, ПоследняяВерсия) > 0 Тогда + Возврат Истина; + Иначе + Лог.Информация("[%1]: Версия ""%2"" от ""%3"" конфигурации ""%4"" меньше или равна последней существующей версии ""%5"" в каталоге ""%6""", + ТипЗнч(ЭтотОбъект), + ОписаниеВерсии.Версия, + Формат(ОписаниеВерсии.Дата, "ДФ=dd.MM.yyyy; ДП=-"), + ОписаниеВерсии.Имя, + ПоследняяВерсия, + ОбъединитьПути(КаталогДляСохранения, ОписаниеВерсии.Идентификатор)); + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Истина; + КонецЕсли; + + Если ЗагруженныеВерсииПриложения.Найти(ОписаниеВерсии.Версия) = Неопределено Тогда + Возврат Истина; + Иначе + Лог.Информация("[%1]: Версия ""%2"" от ""%3"" конфигурации ""%4"" уже существует в каталоге ""%5""", + ТипЗнч(ЭтотОбъект), + ОписаниеВерсии.Версия, + Формат(ОписаниеВерсии.Дата, "ДФ=dd.MM.yyyy; ДП=-"), + ОписаниеВерсии.Имя, + ОбъединитьПути(КаталогДляСохранения, ОписаниеВерсии.Идентификатор)); + Возврат Ложь; + КонецЕсли; + +КонецФункции // ЗагружатьВерсию() + #КонецОбласти // СлужебныеПроцедурыИФункции #Область ОбработчикиСобытий diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index e6b871c..a2df6af 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -162,7 +162,7 @@ // Функция Версия() Экспорт - Возврат "1.2.0"; + Возврат "1.4.0"; КонецФункции // Версия()