diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index bc1bfd8..313a543 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -26,6 +26,8 @@ jobs: # Загрузка проекта - name: Актуализация uses: actions/checkout@v2 + with: + fetch-depth: 0 # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Извлечение имени текущей ветки diff --git a/.gitignore b/.gitignore index bc0621a..48f0953 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ tmp* coverage test-reports *.ospx + + +oscript_modules/ \ No newline at end of file diff --git a/README.md b/README.md index c4a1c4b..72d2c9a 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ [![GitHub release](https://img.shields.io/github/release/ArKuznetsov/yard.svg?style=flat-square)](https://github.com/ArKuznetsov/yard/releases) [![GitHub license](https://img.shields.io/github/license/ArKuznetsov/yard.svg?style=flat-square)](https://github.com/ArKuznetsov/yard/blob/develop/LICENSE) -[![Build Status](https://travis-ci.org/arkuznetsov/yard.svg?branch=develop)](https://travis-ci.org/arkuznetsov/yard) -[![Quality Gate](https://oskk-sonar.1solution.ru/api/badges/gate?key=yard)](https://oskk-sonar.1solution.ru/dashboard/index/yard) -[![Coverage](https://oskk-sonar.1solution.ru/api/badges/measure?key=yard&metric=coverage)](https://oskk-sonar.1solution.ru/dashboard/index/yard) -[![Tech debt](https://oskk-sonar.1solution.ru/api/badges/measure?key=yard&metric=sqale_debt_ratio)](https://oskk-sonar.1solution.ru/dashboard/index/yard) +[![Build Status](https://img.shields.io/github/workflow/status/ArKuznetsov/yard/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0)](https://github.com/arkuznetsov/yard/actions/) +[![Quality Gate](https://img.shields.io/sonar/quality_gate/yard?server=https%3A%2F%2Fopen.checkbsl.org&sonarVersion=8.6)](https://open.checkbsl.org/dashboard/index/yard) +[![Coverage](https://img.shields.io/sonar/coverage/yard?server=https%3A%2F%2Fopen.checkbsl.org&sonarVersion=8.6)](https://open.checkbsl.org/dashboard/index/yard) +[![Tech debt](https://img.shields.io/sonar/tech_debt/yard?server=https%3A%2F%2Fopen.checkbsl.org&sonarVersion=8.6)](https://open.checkbsl.org/dashboard/index/yard) Приложение oscript для загрузки и обработки релизов конфигураций 1С. @@ -20,6 +20,12 @@ - [fs](https://github.com/oscript-library/fs) - [7-zip](http://www.7-zip.org/) +**Важно:** Архиватор 7-zip должен поддерживать распаковку rar-архивов. Для этого на linux нужно поставить пакет с поддержкой такого режима. +Например, на Ubuntu: +```shell +apt-get install p7zip-rar p7zip-full +``` + ## Общие сведения - выполняет загрузку приложений с [сайта релизов 1С](https://releases.1c.ru) diff --git a/packagedef b/packagedef index 3428421..de53b15 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("yard") - .Версия("1.0.0") + .Версия("1.1.0") .ВерсияСреды("1.4") .ЗависитОт("logos") .ЗависитОт("asserts") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" index 707d2b4..4286f36 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" @@ -222,14 +222,22 @@ Возврат; КонецЕсли; - Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); - + Если ВРег(ИмяПараметра) = "ПУТЬККАТАЛОГУКОНФИГУРАЦИЙ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьККаталогуКонфигураций = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "РЕПОЗИТАРИЙГИТ" Тогда + ВремФайл = Новый Файл(Значение); + РепозитарийГит = ВремФайл.ПолноеИмя; + Иначе + Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + КонецЕсли; + КонецПроцедуры // УстановитьПараметрОбработкиДанных() // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -244,7 +252,7 @@ Если ФайлыОписанийВерсий.Количество() = 0 Тогда Лог.Ошибка("[%1]: Не найдены файлы описания версий ""description.json"" в каталоге %1, |возможно каталог указан некорректно.", - ТипЗнч(ЭтотОбъект), + ЭтотОбъект, ПутьККаталогуКонфигураций); Возврат; КонецЕсли; @@ -286,7 +294,7 @@ Если ТекОписание.Дата <= ДатаПоследнейВерсии Тогда Лог.Отладка("[%1]: Дата версии %2 (%3) конфигурации %4 меньше или равна дате последней версии %5.", - ТипЗнч(ЭтотОбъект), + ЭтотОбъект, Формат(ТекОписание.Дата, "ДФ=dd.MM.yyyy; ДП=-"), ТекОписание.Версия, ТекОписание.Имя, @@ -295,7 +303,7 @@ КонецЕсли; Лог.Информация("[%1]: Обработка версии %2 (%3) конфигурации %4 из шаблона %5.", - ТипЗнч(ЭтотОбъект), + ЭтотОбъект, ТекОписание.Версия, Формат(ТекОписание.Дата, "ДФ=dd.MM.yyyy; ДП=-"), ТекОписание.Имя, @@ -303,7 +311,7 @@ Если Служебный.СравнитьВерсии(ТекОписание.Версия, ПредыдущаяВерсия) <= 0 Тогда Лог.Информация("[%1]: Версия %2 меньше или равна предыдущей версии %3 и не будет выгружена.", - ТипЗнч(ЭтотОбъект), + ЭтотОбъект, ТекОписание.Версия, ПредыдущаяВерсия); Продолжить; @@ -496,9 +504,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" index 7e12ad7..c33e989 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\222\320\223\320\270\321\202.os" @@ -243,14 +243,22 @@ Возврат; КонецЕсли; - Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + Если ВРег(ИмяПараметра) = "ПУТЬККОНФИГУРАЦИИ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьККонфигурации = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "РЕПОЗИТАРИЙГИТ" Тогда + ВремФайл = Новый Файл(Значение); + РепозитарийГит = ВремФайл.ПолноеИмя; + Иначе + Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + КонецЕсли; КонецПроцедуры // УстановитьПараметрОбработкиДанных() // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -406,7 +414,7 @@ .ВОкружении("YARD_GIT_AUTHOR_EMAIL"); ДатаКоммита = Служебный.ДатаPOSIX(ТекущаяУниверсальнаяДата()); - Команда.Опция("d git-commit-date", ДатаКоммита, "дата коммита в git в формате POSIX") + Команда.Опция("d git-commit-date", ДатаКоммита, "дата коммита в git в формате POSIX (yyyy-MM-dd HH:mm:ss)") .ТСтрока() .ВОкружении("YARD_GIT_COMMIT_DATE"); @@ -520,9 +528,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") 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 3402e7a..f1524c2 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" @@ -311,18 +311,24 @@ Возврат; КонецЕсли; - Если ВРег(ИмяПараметра) = ВРег("ФильтрПриложений") Тогда + Если ВРег(ИмяПараметра) = "ФИЛЬТРПРИЛОЖЕНИЙ" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФильтрПриложений = Значение; Иначе ФильтрПриложений = СтрРазделить(Значение, "|"); КонецЕсли; - ИначеЕсли ВРег(ИмяПараметра) = ВРег("ФильтрВерсий") Тогда + ИначеЕсли ВРег(ИмяПараметра) = "ФИЛЬТРВЕРСИЙ" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФильтрВерсий = Значение; Иначе ФильтрВерсий = СтрРазделить(Значение, "|"); КонецЕсли; + ИначеЕсли ВРег(ИмяПараметра) = "КАТАЛОГДЛЯСОХРАНЕНИЯ" Тогда + ВремФайл = Новый Файл(Значение); + КаталогДляСохранения = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "КАТАЛОГДЛЯРАСПАКОВКИEFD" Тогда + ВремФайл = Новый Файл(Значение); + КаталогДляРаспаковкиEFD = ВремФайл.ПолноеИмя; Иначе Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); КонецЕсли; @@ -332,7 +338,7 @@ // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -348,6 +354,9 @@ // Процедура - выполняет обработку данных // +// Параметры: +// Обозреватель - ОбозревательСайта1С - объект для получения данных с сайта 1С +// Процедура ОбработатьДанные(Обозреватель = Неопределено) Экспорт Если Обозреватель = Неопределено Тогда @@ -370,8 +379,8 @@ Если ПолучатьБетаВерсии Тогда Для Каждого ТекБетаВерсия Из ТекЭлемент.БетаВерсии Цикл ВерсииПриложения.Добавить(ТекБетаВерсия); - КонецЦикла - КонецЕсли + КонецЦикла; + КонецЕсли; КонецЕсли; @@ -454,11 +463,11 @@ .ВОкружении("YARD_RELEASES_VERSION_FILTER"); Команда.Опция("vsd version-start-date", "", "фильтр по начальной дате версии (включая)") - .ТСтрока() + .ТДата("dd.MM.yyyy") .ВОкружении("YARD_RELEASES_VERSION_START_DATE"); Команда.Опция("ved version-end-date", "", "фильтр по последней дате версии (включая)") - .ТСтрока() + .ТДата("dd.MM.yyyy") .ВОкружении("YARD_RELEASES_VERSION_END_DATE"); Команда.Опция("df distr-filter", "", "Фильтр заголовков ссылок на скачивание дистрибутива @@ -504,15 +513,21 @@ УстановитьПараметрОбработкиДанных("ИмяПользователя" , Команда.ЗначениеОпции("user")); УстановитьПараметрОбработкиДанных("ПарольПользователя" , Команда.ЗначениеОпции("password")); - УстановитьПараметрОбработкиДанных("ФильтрПриложений" , Команда.ЗначениеОпции("app-filter")); - УстановитьПараметрОбработкиДанных("ФильтрВерсий" , Команда.ЗначениеОпции("version-filter")); + + ВремФильтрПриложений = Команда.ЗначениеОпции("app-filter"); + Служебный.УбратьКавычки(ВремФильтрПриложений); + УстановитьПараметрОбработкиДанных("ФильтрПриложений" , ВремФильтрПриложений); + + ВремФильтрВерсий = Команда.ЗначениеОпции("version-filter"); + Служебный.УбратьКавычки(ВремФильтрВерсий); + УстановитьПараметрОбработкиДанных("ФильтрВерсий" , ВремФильтрВерсий); - ВремДата = Служебный.ДатаИзСтроки(Команда.ЗначениеОпции("version-start-date")); - УстановитьПараметрОбработкиДанных("ФильтрВерсийНачинаяСДаты" , ВремДата); + УстановитьПараметрОбработкиДанных("ФильтрВерсийНачинаяСДаты" , Команда.ЗначениеОпции("version-start-date")); + УстановитьПараметрОбработкиДанных("ФильтрВерсийДоДаты" , Команда.ЗначениеОпции("version-end-date")); - ВремДата = Служебный.ДатаИзСтроки(Команда.ЗначениеОпции("version-end-date")); - УстановитьПараметрОбработкиДанных("ФильтрВерсийДоДаты" , ВремДата); - УстановитьПараметрОбработкиДанных("ФильтрДистрибутива" , Команда.ЗначениеОпции("distr-filter")); + ВремФильтрДистрибутива = Команда.ЗначениеОпции("distr-filter"); + Служебный.УбратьКавычки(ВремФильтрДистрибутива); + УстановитьПараметрОбработкиДанных("ФильтрДистрибутива" , ВремФильтрДистрибутива); УстановитьПараметрОбработкиДанных("КаталогДляСохранения" , Команда.ЗначениеОпции("path")); УстановитьПараметрОбработкиДанных("РаспаковыватьEFD" , Команда.ЗначениеОпции("extract")); @@ -607,9 +622,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") @@ -687,17 +699,14 @@ ТекСсылка.ИмяФайла); ФайлАрхива = Новый Файл(ИмяФайлаАрхива); - // TODO: Пока получаем файл повторно по полному пути, чтобы в объекте "Файл" был полный путь - ФайлАрхива = Новый Файл(ФайлАрхива.ПолноеИмя); - ФайлАрхиваEFD = Новый Файл(ОбъединитьПути(ФайлАрхива.Путь, "1cv8.efd")); - + Распаковщик.ОбеспечитьКаталог(ИмяФайлаАрхива, Истина); - Лог.Информация("[%1]: Начало загрузки ""%2"", версия ""%3"":%4 (%5) в файл %6.", + Лог.Информация("[%1]: Начало загрузки ""%2"", версия ""%3"": %4 (%5) в файл %6.", СокрЛП(ЭтотОбъект), ОписаниеВерсии.Имя, ОписаниеВерсии.Версия, - ШаблонСсылки , + ТекСсылка.Имя, ТекСсылка.ПутьДляЗагрузки, ИмяФайлаАрхива); @@ -707,33 +716,51 @@ Распаковщик.РаспаковатьАрхив(ИмяФайлаАрхива, ФайлАрхива.Путь); - ЗаписатьОписаниеВерсииВФайл(ОписаниеВерсии, ФайлАрхива.Путь); - - ФайлыДистрибутива = НайтиФайлы(ФайлАрхива.Путь, "*.*", Истина); - Лог.Информация("[%1]: Распакован файл ""%2""", СокрЛП(ЭтотОбъект), ИмяФайлаАрхива); УдалитьФайлы(ИмяФайлаАрхива); Лог.Информация("[%1]: Удален файл ""%2""", СокрЛП(ЭтотОбъект), ИмяФайлаАрхива); + Если ФайлАрхива.Расширение = ".gz" Тогда + ИмяВложенногоФайлаАрхива = СтрШаблон("%1%2", ФайлАрхива.Путь, ФайлАрхива.ИмяБезРасширения); + ВложенныйФайлАрхива = Новый Файл(ИмяВложенногоФайлаАрхива); + + Если ВложенныйФайлАрхива.Существует() Тогда + + Распаковщик.РаспаковатьАрхив(ИмяВложенногоФайлаАрхива, ВложенныйФайлАрхива.Путь); + + Лог.Информация("[%1]: Распакован файл ""%2""", СокрЛП(ЭтотОбъект), ИмяВложенногоФайлаАрхива); + + УдалитьФайлы(ИмяВложенногоФайлаАрхива); + + Лог.Информация("[%1]: Удален файл ""%2""", СокрЛП(ЭтотОбъект), ИмяВложенногоФайлаАрхива); + + КонецЕсли; + + КонецЕсли; + + ЗаписатьОписаниеВерсииВФайл(ОписаниеВерсии, ФайлАрхива.Путь); + + ФайлАрхиваEFD = Новый Файл(ОбъединитьПути(ФайлАрхива.Путь, "1cv8.efd")); + ОписаниеВерсии.Вставить("ЭтоКонфигурация", ФайлАрхиваEFD.Существует()); Если ОписаниеВерсии.ЭтоКонфигурация И РаспаковыватьEFD Тогда РаспаковщикРелиза = Новый РаспаковщикРелизов1С(); РаспаковщикРелиза.УстановитьПараметрыОбработкиДанных(ПараметрыОбработки); - РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Имя" , ОписаниеВерсии.Имя); - РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Ид" , ОписаниеВерсии.Идентификатор); - РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Версия", ОписаниеВерсии.Версия); - РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("ПутьКДистрибутиву", ФайлАрхива.Путь); + РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Имя" , ОписаниеВерсии.Имя); + РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Ид" , ОписаниеВерсии.Идентификатор); + РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("Приложение_Версия" , ОписаниеВерсии.Версия); + РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("ПутьКДистрибутиву" , ФайлАрхива.Путь); + РаспаковщикРелиза.УстановитьПараметрОбработкиДанных("КаталогДляРаспаковкиEFD", КаталогДляРаспаковкиEFD); РаспаковщикРелиза.ОбработатьДанные(); Если УдалитьПослеРаспаковкиEFD Тогда - Для Каждого ТекФайл Из ФайлыДистрибутива Цикл - УдалитьФайлы(ТекФайл.ПолноеИмя); - КонецЦикла; - Служебный.УдалитьПустыеКаталогиРекурсивно(ФайлАрхива.Путь, КаталогДляСохранения); + УдалитьФайлы(ФайлАрхива.Путь, "*.*"); + УдалитьФайлы(ФайлАрхива.Путь); + Лог.Информация("[%1]: Удален дистрибутив ""%2""", СокрЛП(ЭтотОбъект), ФайлАрхива.Путь); КонецЕсли; КонецЕсли; КонецЦикла; @@ -750,6 +777,7 @@ // *Дата - Дата - дата версии приложения // *ВидДистрибутива - Строка - вид дистрибутива "Полный"/"Обновление" // *ВерсииДляОбновления - Массив(Строка) - массив номеров версий, для которых преднозначено обновление +// Путь - Строка - путь к каталогу, в котором будет сохранен файл описания версии // Процедура ЗаписатьОписаниеВерсииВФайл(Знач ОписаниеВерсии, Знач Путь) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\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\260\321\202\320\260\320\273\320\276\320\263\320\260\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\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" index cdb8c00..220fac2 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\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\260\321\202\320\260\320\273\320\276\320\263\320\260\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\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" @@ -8,7 +8,8 @@ // ---------------------------------------------------------- Перем МенеджерОбработкиДанных; // ВнешняяОбработкаОбъект - обработка-менеджер, вызвавшая данный обработчик -Перем Идентификатор; // Строка - идентификатор обработчика, заданный обработкой-менеджером +Перем Идентификатор; // Строка - идентификатор обработчика, + // заданный обработкой-менеджером Перем ПараметрыОбработки; // Структура - параметры обработки Перем Лог; // Объект - объект записи лога приложения @@ -16,7 +17,8 @@ // для распаковки Перем КаталогДляРаспаковкиШаблонов; // Строка - каталог для распаковки шаблонов конфигурации Перем ФайлыДляРаспаковкиEFD; // Массив(Строка) - список файлов для распаковки из архива EFD дистрибутива - // конфигурации, если не указан, то распаковываются все файлы + // конфигурации, если не указан, + // то распаковываются все файлы Перем НакопленныеДанные; // Массив(Структура) - результаты обработки данных @@ -196,12 +198,18 @@ Возврат; КонецЕсли; - Если ВРег(ИмяПараметра) = ВРег("ФайлыДляРаспаковкиEFD") Тогда + Если ВРег(ИмяПараметра) = "ФАЙЛЫДЛЯРАСПАКОВКИEFD" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФайлыДляРаспаковкиEFD = Значение; Иначе ФайлыДляРаспаковкиEFD = СтрРазделить(Значение, "|"); КонецЕсли; + ИначеЕсли ВРег(ИмяПараметра) = "ПУТЬККАТАЛОГУДИСТРИБУТИВОВ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьККаталогуДистрибутивов = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "КАТАЛОГДЛЯРАСПАКОВКИШАБЛОНОВ" Тогда + ВремФайл = Новый Файл(Значение); + КаталогДляРаспаковкиШаблонов = ВремФайл.ПолноеИмя; Иначе Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); КонецЕсли; @@ -211,7 +219,7 @@ // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -435,9 +443,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\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\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" index 4966396..dee8539 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\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\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" @@ -222,12 +222,18 @@ Возврат; КонецЕсли; - Если ВРег(ИмяПараметра) = ВРег("ФайлыДляРаспаковкиEFD") Тогда + Если ВРег(ИмяПараметра) = "ФАЙЛЫДЛЯРАСПАКОВКИEFD" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФайлыДляРаспаковкиEFD = Значение; Иначе ФайлыДляРаспаковкиEFD = СтрРазделить(Значение, "|"); КонецЕсли; + ИначеЕсли ВРег(ИмяПараметра) = "ПУТЬКДИСТРИБУТИВУ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьКДистрибутиву = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "КАТАЛОГДЛЯРАСПАКОВКИEFD" Тогда + ВремФайл = Новый Файл(Значение); + КаталогДляРаспаковкиEFD = ВремФайл.ПолноеИмя; Иначе Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); КонецЕсли; @@ -237,7 +243,7 @@ // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -256,7 +262,7 @@ ПрочитатьОписаниеШаблонаИзМанифеста(ФайлАрхиваEFD); Лог.Информация("[%1]: Начало распаковки архива EFD ""%2"" конфигурации ""%3"", версия ""%4"" в каталог ""%5"".", - СокрЛП(ЭтотОбъект), + ЭтотОбъект, ФайлАрхиваEFD.ПолноеИмя, Приложение_Имя, Приложение_Версия, @@ -453,9 +459,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") @@ -522,16 +525,16 @@ Продолжить; КонецЕсли; - Если ВРег(СокрЛП(ДанныеСтроки[0])) = ВРег("Name") Тогда + Если ВРег(СокрЛП(ДанныеСтроки[0])) = "NAME" Тогда ПроверитьЗаполнитьПараметр(Приложение_Имя, "НеизвестнаяКонфигурация", ДанныеСтроки[1]); КонецЕсли; - Если ВРег(СокрЛП(ДанныеСтроки[0])) = ВРег("Destination") Тогда + Если ВРег(СокрЛП(ДанныеСтроки[0])) = "DESTINATION" Тогда ПроверитьЗаполнитьПараметр(Приложение_Ид, "unknown", ДанныеСтроки[1]); Приложение_Ид = Сред(Приложение_Ид, СтрНайти(Приложение_Ид, "\") + 1); КонецЕсли; - Если ВРег(СокрЛП(ДанныеСтроки[0])) = ВРег("Version") Тогда + Если ВРег(СокрЛП(ДанныеСтроки[0])) = "VERSION" Тогда ПроверитьЗаполнитьПараметр(Приложение_Версия, "0.0.0.0", ДанныеСтроки[1]); КонецЕсли; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241.os" index fa688ec..eb2c2ae 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241.os" @@ -195,7 +195,15 @@ Возврат; КонецЕсли; - Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + Если ВРег(ИмяПараметра) = "ПУТЬККОНФИГУРАЦИИ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьККонфигурации = ВремФайл.ПолноеИмя; + ИначеЕсли ВРег(ИмяПараметра) = "ПУТЬКОБНОВЛЕНИЮ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьКОбновлению = ВремФайл.ПолноеИмя; + Иначе + Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + КонецЕсли; КонецПроцедуры // УстановитьПараметрОбработкиДанных() diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241\320\222\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241\320\222\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\265.os" index f3e5a77..00b2c1e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241\320\222\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\265.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\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\2711\320\241\320\222\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\265.os" @@ -188,7 +188,12 @@ Возврат; КонецЕсли; - Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + Если ВРег(ИмяПараметра) = "ПУТЬККАТАЛОГУКОНФИГУРАЦИЙ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьККаталогуКонфигураций = ВремФайл.ПолноеИмя; + Иначе + Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); + КонецЕсли; КонецПроцедуры // УстановитьПараметрОбработкиДанных() diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\277\320\270\321\201\320\276\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\241\320\277\320\270\321\201\320\276\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" index 17fa9aa..3d8f5e1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\277\320\270\321\201\320\276\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\241\320\277\320\270\321\201\320\276\320\272\320\240\320\265\320\273\320\270\320\267\320\276\320\2621\320\241.os" @@ -256,18 +256,21 @@ Возврат; КонецЕсли; - Если ВРег(ИмяПараметра) = ВРег("ФильтрПриложений") Тогда + Если ВРег(ИмяПараметра) = "ФИЛЬТРПРИЛОЖЕНИЙ" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФильтрПриложений = Значение; Иначе ФильтрПриложений = СтрРазделить(Значение, "|"); КонецЕсли; - ИначеЕсли ВРег(ИмяПараметра) = ВРег("ФильтрВерсий") Тогда + ИначеЕсли ВРег(ИмяПараметра) = "ФИЛЬТРВЕРСИЙ" Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда ФильтрВерсий = Значение; Иначе ФильтрВерсий = СтрРазделить(Значение, "|"); КонецЕсли; + ИначеЕсли ВРег(ИмяПараметра) = "ПУТЬКФАЙЛУДЛЯСОХРАНЕНИЯ" Тогда + ВремФайл = Новый Файл(Значение); + ПутьКФайлуДляСохранения = ВремФайл.ПолноеИмя; Иначе Выполнить(СтрШаблон("%1 = Значение;", ИмяПараметра)); КонецЕсли; @@ -277,7 +280,7 @@ // Процедура - устанавливает данные для обработки // // Параметры: -// Данные - Структура - значения параметров обработки +// ВходящиеДанные - Структура - значения параметров обработки // Процедура УстановитьДанные(Знач ВходящиеДанные) Экспорт @@ -385,11 +388,11 @@ .ВОкружении("YARD_RELEASES_VERSION_FILTER"); Команда.Опция("vsd version-start-date", "", "фильтр по начальной дате версии (включая)") - .ТСтрока() + .ТДата("dd.MM.yyyy") .ВОкружении("YARD_RELEASES_VERSION_START_DATE"); Команда.Опция("ved version-end-date", "", "фильтр по последней дате версии (включая)") - .ТСтрока() + .ТДата("dd.MM.yyyy") .ВОкружении("YARD_RELEASES_VERSION_END_DATE"); Команда.Опция("bv get-beta-versions", Ложь, "флаг получения версий для ознакомления") @@ -414,17 +417,18 @@ УстановитьПараметрОбработкиДанных("ИмяПользователя" , Команда.ЗначениеОпции("user")); УстановитьПараметрОбработкиДанных("ПарольПользователя" , Команда.ЗначениеОпции("password")); - УстановитьПараметрОбработкиДанных("ФильтрПриложений" , Команда.ЗначениеОпции("app-filter")); - УстановитьПараметрОбработкиДанных("ФильтрВерсий" , Команда.ЗначениеОпции("version-filter")); - ВремДата = Служебный.ДатаИзСтроки(Команда.ЗначениеОпции("version-start-date")); - УстановитьПараметрОбработкиДанных("ФильтрВерсийНачинаяСДаты" , ВремДата); + ВремФильтрПриложений = Команда.ЗначениеОпции("app-filter"); + Служебный.УбратьКавычки(ВремФильтрПриложений); + УстановитьПараметрОбработкиДанных("ФильтрПриложений" , ВремФильтрПриложений); - ВремДата = Служебный.ДатаИзСтроки(Команда.ЗначениеОпции("version-end-date")); - УстановитьПараметрОбработкиДанных("ФильтрВерсийДоДаты" , ВремДата); + ВремФильтрВерсий = Команда.ЗначениеОпции("app-filter"); + Служебный.УбратьКавычки(ВремФильтрВерсий); + УстановитьПараметрОбработкиДанных("ФильтрВерсий" , ВремФильтрВерсий); + УстановитьПараметрОбработкиДанных("ФильтрВерсийНачинаяСДаты" , Команда.ЗначениеОпции("version-start-date")); + УстановитьПараметрОбработкиДанных("ФильтрВерсийДоДаты" , Команда.ЗначениеОпции("version-end-date")); УстановитьПараметрОбработкиДанных("ПолучатьБетаВерсии" , Команда.ЗначениеОпции("get-beta-versions")); - УстановитьПараметрОбработкиДанных("ПутьКФайлуДляСохранения" , Команда.ЗначениеОпции("output-file")); ОбработатьДанные(); @@ -511,9 +515,6 @@ // СтруктураПараметров - Структура - структуры значений параметров // ЗначениеПоУмолчанию - Произвольный - значение переменной по умолчанию // -// Возвращаемое значение: -// Булево - Истина - переменная существует; Ложь - в противном случае. -// Процедура УстановитьПараметрОбработкиДанныхИзСтруктуры(Знач ИмяПараметра, Знач СтруктураПараметров, Знач ЗначениеПоУмолчанию = "") 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 7f3dcfe..673a41a 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.0.0"; + Возврат "1.1.0"; КонецФункции // Версия() diff --git "a/src/\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.os" "b/src/\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.os" index 1885f6e..191d2ee 100644 --- "a/src/\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.os" +++ "b/src/\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.os" @@ -48,23 +48,32 @@ // Процедура РаспаковатьАрхив(Знач ПутьКАрхиву, Знач КаталогРаспаковки) Экспорт - ПутьК7ЗИП = Найти7Zip(); + ПутьК7ЗИП = НайтиАрхиватор(); Если НЕ ЗначениеЗаполнено(ПутьК7ЗИП) Тогда ВызватьИсключение "7-Zip не найден"; КонецЕсли; ДанныеИсхФайла = Новый Файл(ПутьКАрхиву); + // TODO: Пока получаем файл повторно по полному пути, чтобы в объекте "Файл" был полный путь + ДанныеИсхФайла = Новый Файл(ДанныеИсхФайла.ПолноеИмя); ИмяФайлаОшибокАрхивации = ДанныеИсхФайла.Путь + "7z_error_messages.txt"; - КомандаАрхиватора = СтрШаблон("""%1"" x -aoa -y -o%2 ""%3""", - ПутьК7ЗИП, + КомандаАрхиватора = СтрШаблон("x -aoa -y -o""%1"" ""%2""", КаталогРаспаковки, - ПутьКАрхиву); + ДанныеИсхФайла.ПолноеИмя); - КодВозврата = 0; - ЗапуститьПриложение(КомандаАрхиватора, ДанныеИсхФайла.Путь, Истина, КодВозврата); + КомандаЗапроса = Новый Команда(); + + КомандаЗапроса.УстановитьКоманду(ПутьК7ЗИП); + + КомандаЗапроса.ДобавитьПараметр(КомандаАрхиватора); + + КомандаЗапроса.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); + КомандаЗапроса.ПоказыватьВыводНемедленно(Истина); + + КодВозврата = КомандаЗапроса.Исполнить(); Если НЕ КодВозврата = 0 Тогда @@ -378,9 +387,19 @@ ДлинаИмениФайла = ПрочитатьРазмер(Поток, СмещениеИмениФайла + См4); ПолноеИмяФайла = ПрочитатьСтрокуИзПотока(Поток, СмещениеИмениФайла + См8, ДлинаБлокаИмениФайла - См8 - См16); - ЧастиПути = СтрРазделить(ПолноеИмяФайла, "\"); + Если СтрНайти(ПолноеИмяФайла, "/") = 0 Тогда + Разделитель = "\"; + Иначе + Разделитель = "/"; + КонецЕсли; + + ЧастиПути = СтрРазделить(ПолноеИмяФайла, Разделитель); ИмяФайла = ЧастиПути[ЧастиПути.ВГраница()]; + Если НЕ ПараметрыПриложения.ЭтоWindows() Тогда + ПолноеИмяФайла = СтрЗаменить(ПолноеИмяФайла, "\", "/"); + КонецЕсли; + Если ДлинаИмениФайла <> СтрДлина(ПолноеИмяФайла) Тогда Сообщить("Ошибка чтения имени файла №" + й); Продолжить; @@ -435,7 +454,7 @@ КонецЕсли; СистемнаяИнформация = Новый СистемнаяИнформация; - ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + ЭтоWindows = ПараметрыПриложения.ЭтоWindows(); Если ЭтоWindows Тогда Для й = 0 По МассивФайлов.ВГраница() Цикл @@ -747,26 +766,94 @@ КонецПроцедуры // ИзвлечьФайлИзАрхиваZIP() -// Функция - ищет и возвращает путь к архиватору 7-zip +// Функция - ищет и возвращает путь к архиватору 7-zip с использованием команды where/whereis // // Возвращаемое значение: // Строка - путь к исполняемому файлу архиватора 7-zip // -Функция Найти7ZIP() +Функция НайтиАрхиваторКомандойПоиска() + + ЭтоWindows = ПараметрыПриложения.ЭтоWindows(); + НайденныйПуть = Неопределено; + + Команда = Новый Команда(); + + Если ЭтоWindows Тогда + Команда.УстановитьКоманду("where"); + Иначе + Команда.УстановитьКоманду("whereis"); + КонецЕсли; + Команда.ДобавитьПараметр("7z"); + + КодВозврата = Команда.Исполнить(); + ВыводКоманды = Команда.ПолучитьВывод(); + + Если КодВозврата = 0 Тогда + НайденныйПуть = ВыводКоманды; + Если НЕ ЭтоWindows Тогда + НайденныйПуть = СтрЗаменить(НайденныйПуть, "7z:", ""); + ЧастиСтроки = СтрРазделить(СокрЛП(НайденныйПуть), " "); + НайденныйПуть = ЧастиСтроки[0]; + + Если ПустаяСтрока(НайденныйПуть) Тогда + НайденныйПуть = Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; - // Предполагаем, что для X64_86 7-Zip будет 64-битный - КаталогПрограмм = "C:\" + "Program Files"; - ИмяИсполняемогоФайла = "7z.exe"; + Возврат НайденныйПуть; - Массив7ZIP = НайтиФайлы(КаталогПрограмм, ИмяИсполняемогоФайла, True); +КонецФункции // НайтиАрхиваторКомандойПоиска() - Если Массив7ZIP.Количество() = 0 Тогда - Возврат Неопределено; +// Функция - ищет и возвращает путь к архиватору 7-zip в стандартных каталогах установки программ +// +// Возвращаемое значение: +// Строка - путь к исполняемому файлу архиватора 7-zip +// +Функция НайтиАрхиваторВКаталогахПрограмм() + + КаталогиПрограмм = Новый Массив(); + + Если ПараметрыПриложения.ЭтоWindows() Тогда + КаталогиПрограмм.Добавить(ПолучитьПеременнуюСреды("ProgramFiles")); + КаталогиПрограмм.Добавить(ПолучитьПеременнуюСреды("ProgramFiles(x86)")); + ИмяИсполняемогоФайла = "7z.exe"; Иначе - Возврат Массив7ZIP[0].ПолноеИмя; + КаталогиПрограмм.Добавить("/usr/bin"); + КаталогиПрограмм.Добавить("/usr/local/bin"); + ИмяИсполняемогоФайла = "7z"; + КонецЕсли; + + НайденныйПуть = Неопределено; + + Для Каждого ТекКаталог Из КаталогиПрограмм Цикл + Массив7ZIP = НайтиФайлы(ТекКаталог, ИмяИсполняемогоФайла, True); + Если Массив7ZIP.Количество() > 0 Тогда + НайденныйПуть = Массив7ZIP[0].ПолноеИмя; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат НайденныйПуть; + +КонецФункции // НайтиАрхиваторВКаталогахПрограмм() + +// Функция - ищет и возвращает путь к архиватору 7-zip +// +// Возвращаемое значение: +// Строка - путь к исполняемому файлу архиватора 7-zip +// +Функция НайтиАрхиватор() + + НайденныйПуть = НайтиАрхиваторКомандойПоиска(); + + Если НЕ ЗначениеЗаполнено(НайденныйПуть) Тогда + НайденныйПуть = НайтиАрхиваторВКаталогахПрограмм(); КонецЕсли; -КонецФункции // Найти7ZIP() + Возврат НайденныйПуть; + +КонецФункции // НайтиАрхиватор() // Функция - возвращает вариант распаковки каталогов по умолчанию // diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index 7123ec9..a59a708 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -28,9 +28,11 @@ КонецЕсли; Попытка - Если СтрДлина(ВремЧастиДаты[2]) = 4 Тогда + ДлинаГода = 4; + ДлинаМесяцаДня = 2; + Если СтрДлина(ВремЧастиДаты[2]) = ДлинаГода Тогда Возврат Дата(СтрШаблон("%1%2%3%4", ВремЧастиДаты[2], ВремЧастиДаты[1], ВремЧастиДаты[0], "000000")); - ИначеЕсли СтрДлина(ВремЧастиДаты[2]) = 2 Тогда + ИначеЕсли СтрДлина(ВремЧастиДаты[2]) = ДлинаМесяцаДня Тогда Возврат Дата(СтрШаблон("20%1%2%3%4", ВремЧастиДаты[2], ВремЧастиДаты[1], ВремЧастиДаты[0], "000000")); Иначе Возврат '00010101000000'; @@ -41,18 +43,20 @@ КонецФункции // ДатаИзСтроки() -// Процедура - Выполняет сравнение версий по соглашению SEMVER +// Функция - Выполняет сравнение версий по соглашению SEMVER. +// Пример +// (-1) - СтрокаВерсии1 меньше (<) СтрокаВерсии2 +// (1) - СтрокаВерсии1 больше (>) СтрокаВерсии2 +// (0) - СтрокаВерсии1 равна (=) СтрокаВерсии2 // // Параметры: -// СтрокаВерсия1 - Строка - Строковое представление версии типа "1.0.0.0" -// СтрокаВерсия2 - Строка - Строковое представление версии типа "1.0.0.0" +// СтрокаВерсии1 - Строка - Строковое представление версии типа "1.0.0.0" +// СтрокаВерсии2 - Строка - Строковое представление версии типа "1.0.0.0" // // Возвращаемое значение: -// Число - результат сравнения в числе (0 = Равны, -1 = Меньше, 1 = Больше), относительно первой версии (СтрокаВерсия1) -// Пример, -// (-1) - СтрокаВерсия1 меньше (<) СтрокаВерсия2 -// (1) - СтрокаВерсия1 больше (>) СтрокаВерсия2 -// (0) - СтрокаВерсия1 равна (=) СтрокаВерсия2 +// Число - результат сравнения в числе (0 = Равны, -1 = Меньше, 1 = Больше), +// относительно первой версии (СтрокаВерсия1) +// // Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт @@ -176,8 +180,10 @@ // Функция ФорматДвузначноеЧисло(Знач ЗначениеЧисло) + ДлинаРезультата = 2; + ЧислоСтрокой = Строка(ЗначениеЧисло); - Если СтрДлина(ЧислоСтрокой) < 2 Тогда + Если СтрДлина(ЧислоСтрокой) < ДлинаРезультата Тогда ЧислоСтрокой = "0" + ЧислоСтрокой; КонецЕсли; @@ -201,7 +207,8 @@ КонецФункции // ДатаPOSIX() -// Процедура - удаляет из текста HTML-страницы символы переноса строк, возврата каретки, пробелы и табуляции между тегами +// Процедура - удаляет из текста HTML-страницы символы переноса строк, +// возврата каретки, пробелы и табуляции между тегами // // Параметры: // Текст - Строка - текста HTML-страницы @@ -249,6 +256,21 @@ КонецПроцедуры // ОчиститьТекстСтраницыHTML() +// Процедура - убирает в строке начальные и конечные кавычки +// +// Параметры: +// Значение - Строка - строка для обработки +// +Процедура УбратьКавычки(Значение) Экспорт + + Смещение = 2; + + Если Лев(Значение, 1) = """" И Прав(Значение, 1) = """" Тогда + Значение = Сред(Значение, Смещение, СтрДлина(Значение) - Смещение); + КонецЕсли; + +КонецПроцедуры // УбратьКавычки() + // Процедура - рекурсивно удаляет пустые каталоги вверх от указанного // // Параметры: @@ -281,13 +303,17 @@ // Функция - возвращает общую для всех файлов часть пути // // Параметры: -// ФайлыВАрхиве - Массив(Файл) - список файлов +// МассивФайлов - Массив(Файл) - список файлов // // Возвращаемое значение: // Строка - общая для всех файлов часть пути // Функция ОбщийПутьФайлов(МассивФайлов) Экспорт + Если НЕ ТипЗнч(МассивФайлов) = Тип("Массив") ИЛИ МассивФайлов.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + ОбщийПуть = Лев(МассивФайлов[0].ПолноеИмя, СтрДлина(МассивФайлов[0].ПолноеИмя) - СтрДлина(МассивФайлов[0].Имя)); Для й = 1 По МассивФайлов.ВГраница() Цикл Если МассивФайлов[й].Имя = МассивФайлов[й].ПолноеИмя Тогда diff --git a/tests/yard-test.os b/tests/yard-test.os index ad13f66..d2a7172 100644 --- a/tests/yard-test.os +++ b/tests/yard-test.os @@ -60,8 +60,6 @@ Пользователь = ПолучитьПеременнуюСреды("YARD_RELEASES_USER"); Пароль = ПолучитьПеременнуюСреды("YARD_RELEASES_PWD"); - Лог.Информация(Пользователь); - ПараметрыОбработки = Новый Структура(); ПараметрыОбработки.Вставить("ИмяПользователя", Пользователь);