diff --git a/features/edtExport.feature b/features/edtExport.feature index 123c84e..f274f2a 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -32,7 +32,7 @@ Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Вывод команды "gitsync" содержит "Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии." + И Вывод команды "gitsync" содержит "Версия EDT не передана через параметры, определена автоматически:" И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация с использованием edtExport с явным указанием версии EDT @@ -44,7 +44,7 @@ Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Вывод команды "gitsync" не содержит "Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии." + И Вывод команды "gitsync" не содержит "Версия EDT не передана через параметры, определена автоматически:" И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация хранилища расширения с использованием edtExport без указания базового проекта diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index 2a3b285..8778257 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -4,6 +4,7 @@ // BSLLS:MissingReturnedValueDescription-off // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать 1commands #Использовать gitrunner #Использовать asserts #Использовать tempfiles diff --git a/packagedef b/packagedef index dbd867d..70250e1 100644 --- a/packagedef +++ b/packagedef @@ -45,6 +45,7 @@ .ВключитьФайл("oscript_modules") .ЗависитОт("strings", "0.4.1") .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("edtfind", "2.0.2") .РазработкаЗависитОт("1testrunner", "1.9.2") .РазработкаЗависитОт("1bdd", "1.15.1") .РазработкаЗависитОт("notify", "0.2.0") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index f92493c..9c92fb8 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -1,7 +1,7 @@ #Использовать logos #Использовать tempfiles #Использовать fs -#Использовать semver +#Использовать edtfind Перем Лог; Перем Обработчик; @@ -15,6 +15,7 @@ Перем ИмяФайлаДампаКонфигурации; Перем ИмяФайлаИзменений; +Перем Использовать1cedtcli; #Область Интерфейс_плагина @@ -24,7 +25,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "2.0.0"; + Возврат "2.0.1"; КонецФункции // Возвращает приоритет выполнения плагина @@ -210,38 +211,25 @@ ИсполняемыйФайл = ""; - КаталогEDT = УточнитьВерсиюEDT(); - - Если Лев(ВерсияEDT, 4) >= "2024" Тогда // BSLLS:MagicNumber-off - ИсполняемыйФайл = НайтиEdtcli(КаталогEDT); - Иначе - ИсполняемыйФайл = НайтиRing(); - КонецЕсли; - - Возврат ИсполняемыйФайл; - -КонецФункции - -Функция УточнитьВерсиюEDT() - - ВсеВерсииEDT = НайтиВсеУстановленныеEDT(); + ОбъектПоиска = Новый ПоискEDT(); + РезультатПоиска = ОбъектПоиска.НайтиИнформациюОEDT(ВерсияEDT); Если Не ЗначениеЗаполнено(ВерсияEDT) Тогда - - Лог.Информация("Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии."); - - ВерсияEDT = ВсеВерсииEDT.Версии[0]; - КаталогEDT = ВсеВерсииEDT.КаталогиEDT.Получить(ВсеВерсииEDT.Версии[0]); - Лог.Информация("Версия EDT определена автоматически: %1, каталог %2", ВерсияEDT, КаталогEDT); + Лог.Информация("Версия EDT не передана через параметры, определена автоматически: %1", РезультатПоиска.ВерсияEDT); + ВерсияEDT = РезультатПоиска.ВерсияEDT; + КонецЕсли; - Возврат КаталогEDT; + Лог.Информация("Версия EDT: %1, каталог %2", РезультатПоиска.ВерсияEDT, РезультатПоиска.КаталогEDT); + Использовать1cedtcli = ЗначениеЗаполнено(РезультатПоиска.ПутьКcli); + Если Использовать1cedtcli Тогда + ИсполняемыйФайл = РезультатПоиска.ПутьКcli; Иначе - - Возврат ВсеВерсииEDT.КаталогиEDT.Получить(ВерсияEDT); - + ИсполняемыйФайл = НайтиRing(); КонецЕсли; + Возврат ИсполняемыйФайл; + КонецФункции // Функция - получает команду запуска утилиты ring или 1cedtcli для выполнения конвертации @@ -254,7 +242,7 @@ Команда = Новый Команда; Команда.УстановитьКоманду(ОпределитьИсполняемыйФайл()); - Если Лев(ВерсияEDT, 4) >= "2024" Тогда // BSLLS:MagicNumber-off + Если Использовать1cedtcli Тогда КомандаEdtcli(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта); Иначе КомандаRing(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта); @@ -334,32 +322,6 @@ КонецФункции -// Функция - выполняет поиск утилиты 1cedtcli и возвращает полный путь к утилите -// -// Возвращаемое значение: -// Строка - полный путь к утилите 1cedtcli -// -Функция НайтиEdtcli(КаталогEDT) Экспорт - - Расширение = ""; - Если ЭтоWindows() Тогда - Расширение = ".exe"; - КонецЕсли; - - ИсполняемыйФайл = СтрШаблон("1cedtcli%1", Расширение); - Лог.Информация("Ищу %1 в %2", ИсполняемыйФайл, КаталогEDT); - НайденныеФайлы = НайтиФайлы(КаталогEDT, ИсполняемыйФайл, Истина); - - Если НайденныеФайлы.Количество() = 0 Тогда - ВызватьИсключение "1cedtcli не найден"; - КонецЕсли; - - Результат = НайденныеФайлы[0].ПолноеИмя; - Лог.Информация("Найден исполняемый файл %1", Результат); - Возврат Результат; - -КонецФункции - Функция ОбернутьВКавычки(Знач Строка) Возврат """" + Строка + """"; КонецФункции @@ -376,78 +338,6 @@ КонецФункции // ЭтоWindows() -// Функция - выполняет поиск всех установленных версий EDT -// -// Возвращаемое значение: -// Структура - отсортированные версии и пути к исполняемым файлам -// -Функция НайтиВсеУстановленныеEDT() - - КаталогиEDT = Новый Соответствие; - ВерсииДляСортировки = Новый Массив; - - КаталогиПоиска = КаталогиУстановкиЕДТПоУмолчанию(); - - РВ = Новый РегулярноеВыражение("1c[-|_]edt[-| ](\d+\.\d+(?:\.\d)*)"); - РВ.ИгнорироватьРегистр = Истина; - - Для Каждого КаталогПоиска Из КаталогиПоиска Цикл - - Лог.Информация("Ищу версии EDT в каталоге ""%1""", КаталогПоиска); - - ФайлыIni = НайтиФайлы(КаталогПоиска, "1cedt.ini", Истина); - Файлы = НайтиФайлы(КаталогПоиска, "1cedt", Истина); - - Для Каждого Файл Из ФайлыIni Цикл - Файлы.Добавить(Файл); - КонецЦикла; - - Для Каждого ТекФайл Из Файлы Цикл - - Лог.Информация("Ищу совпадения регулярного выражения с именем файла ""%1""", ТекФайл.Путь); - КаталогВерсии = Новый Файл(ТекФайл.Путь); - Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); - - Если Совпадения.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - НайденнаяВерсия = Совпадения[0].Группы[1].Значение; - - КаталогиEDT.Вставить(НайденнаяВерсия, ТекФайл.Путь); - ВерсииДляСортировки.Добавить(НайденнаяВерсия); - - Лог.Информация("Найдена версия EDT ""%1"" в каталоге ""%2"".", НайденнаяВерсия, ТекФайл.Путь); - КонецЦикла; - КонецЦикла; - - Версии.СортироватьВерсии(ВерсииДляСортировки, "УБЫВ"); - - Если ВерсииДляСортировки.Количество() = 0 Тогда - ВызватьИсключение "Не найдено ни одной установленной версии EDT"; - КонецЕсли; - - Возврат Новый Структура("Версии, КаталогиEDT", ВерсииДляСортировки, КаталогиEDT); - -КонецФункции - -// скопировано из yard, код Abramov Dmitry -Функция КаталогиУстановкиЕДТПоУмолчанию() - - СистемнаяИнформация = Новый СистемнаяИнформация(); - Массив = Новый Массив(); - Если ЭтоWindows() Тогда - Массив.Добавить(ОбъединитьПути(СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), "1C\1cedtstart\installations")); - Массив.Добавить("C:\Program Files\1C\1CE\components"); - Иначе - Массив.Добавить("~/.local/share/1C/1cedtstart/installations"); - Массив.Добавить("/opt/1C/1CE/components"); - КонецЕсли; - - Возврат Массив; - -КонецФункции - Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки) ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла();