From cf6129a24ffe0ddd51db217660d6f0fe2a7dabcd Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 1 Jul 2024 15:26:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=20v2.2.2=20-=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20ibcmd?= =?UTF-8?q?=20=D0=B8=20=D1=82.=D0=B4.=20(#617)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * номер релиза 2.2.2 * замечания Сонара * мелкие замечания Сонара * доп.шаг для корректности сценария * создается каталог для отладочного лога - если его не существует - сценарий проверки флага --debuglog #253 * уточнил шаги для проверки создания каталога - для отладочного лога - если его не существует #253 * не работали команды для хранилища при пустой строке соединения closes #508 * изменен порядок параметров метода Инициализация * переименованы пост-конструкторы и документированы * переименовал файл фичи * уточнил формулировки * повысил зависимость от релизной версии * исправлена ошибка передачи доп.ключа --additional-keys * Добавлено подавление окна "Региональные настройки" для конфигураций с подсистемой Мультиязычность БСП * уточнил описание параметра --versions * уточнил описание параметра --versions * Добавлена обработка переменной среды RUNNER_TESTSPATH в параметр testsPath Добавлена обработка переменной среды RUNNER_TESTSPATH в параметр testsPath для команды xunit * Параметр количества заданий загрузки dt * Уточнение описания команды * Уточнил формулировки * Зависимость от свежего релиза v8runner 1.9.0 * Добавление подключения к хранилищу * Ошибка неверных логов синтакс-контроля тесты на файл исключений убран шум синтакс-проверки в отладоч.сообщения * учитываю вложенные модули при запуске lib.additional=../oscript_modules * исправлена ошибка, если замечание не в исключениях * fix: Поправлено условие проверки доп. параметров * Убрал лишнее заковычивание, которое приводило к ошибке старта едт при нескольких проектах * Убрал локальный номер версии * edt-validate показывает ошибки EDT, если код возврата не 0 #536 * опечатки #536 * Добавлен параметр try для РЗ. Исправлена единичная попытка запуска rac. (#534) * Добавлен параметр try для РЗ. Исправлена единичная попытка запуска rac вне зависимости от параметра try. * удален ненужный код Co-authored-by: Artur Ayukhanov * Возможность указать переменные среды в Json (#511) * Возможность указать переменные среды в Json Добавил возможность использовать переменные среды в JSON * Исправил ошибку. Заменил Элемент.Значение на Значение подстановки * Исправление замечаний 1) Изменил логирование 2) Заменил регулярку на СтрЗаменить * ups * Update ОбщиеМетоды.os * выделена переменная ИмяПеременнойСреды Добавлена возможность присвоить пустое значение переменной * Уточнил регулярку - исключил невалидные символы Co-authored-by: ivanovEV Co-authored-by: Artur Ayukhanov * Меняю относит.пути на абсолютные в edt-validate closes #539 * todo на связанный баг ring #539 * внесенная опечатка * Опция --alwaysUseLastVersion для авто-поиска последней версии ЕДТ * опечатка в описании параметра * ошибка c забытым свойством параметров closes #529 * Команда run - ошибка, если пользователь не идентицирован улучшил описание публичных методов рефакторинг показа вывода от 1С closes #542 * улучшил описание публичных методов * перенос приватные методы в область * Иногда при удалении сеансов оставались зависшие соединения * Update xunit-schema.json заменил тип ПропускаемыеИсключения на array * Использование и 3х-, и 4х-значных номеров версий * поддержка формата EDT для команд и опций установки версий * Изменение версии в модулях обработки или общем модуле новый флаг команды set-version "--check-module" новый метод ОбщиеМетоды.ДополнитьМассив * чуть уточнил регулярку для версии в коде модуля * Доработка обработки ЗакрытьПредприятие (#549) * Иногда при удалении сеансов оставались зависшие соединения * 1. Добавлена обработка формы при обновлении - Переход с другой конфигурации. 2. Добавлена обработка формы, когда выполняется обновление на базе, на которой не до конца были выполнены предыдущие обработчики обновления. 3. Добавлена обработка применения текущей обработки для анализа правильного обновления предприятия. То есть в случае успеха создается файл в каталоге проекта, говорящий, что выполнение обновление успешно завершено. Если файла нет,то при обновлении были ошибки. Сделано по мотивам реализации в телеге https://t.me/oscript_library/54590 . Предлагаю пусть реализация будет в коробке, пока не будет реализована вот эта договоренность https://t.me/oscript_library/54597 * * доработка по замечаниям * * еще исправление замечаний * надеюсь последний раз) --------- Co-authored-by: Рекитянский Александр * Работа с шаблонными переменными сделана потокобезопасной (#550) * Работа с шаблонными переменными сделана потокобезопасной * Вынеси инициализацию структуры Переменные в блок инициализации модуля Изменил объект синхронизации с модуля на структуру * Файл параметров VBParams не передается в фреймворк add если он не указан * Добавлена подджерка параметра url * Добавлен режим формирования файлов поставки из исходников. (#563) * Добавлен режим формирования файлов поставки из исходников. * Добавлен короткий вариант параметра загрузки в текущую базу * Рефакторинг работы с менеджером версий * Рефакторинг метода подстановки номера версии * Добавлена возможность поиска файла по шаблону с номером версии (#565) * Добавлена опция создания базы из файла конфигурации * Добавлена возможность поиска файла по шаблону с номером версии * Загрузка из файла конфигурации выделена в отдельный метод * Оптимизирован поиск файла с учетом расширения * Доработан поиск файла по шаблону * Скорректированы регурные выражения поиска номеров версий * Указание версии конфигурации в имени сохраняемого файла (#559) * Добавлена поддержка шаблона версии в именах входящих файлов * Добавлено обеспечение существования каталога при выгрузке файла * Реализован метод получения флага с полной и короткой формой ключа (#566) * Реализован метод получения флага с полной и короткой формой ключа * Изменено имя метода получения значения флага * Доработать обработку СоздатьПользователей (#583) * issues-582 * Рефакторинг * fix * Обновленная документация на обработку ЗагрузитьОбработки * Добавлена поддержка шаблона версии в именах входящих файлов (#574) * Добавлена поддержка шаблона версии в именах входящих файлов * Рефакторинг команды обновления файлом поставки * fix: Исправлено неверное условие - должна проверятся незаполненность каталога исходников * .ЗависитОт("v8unpack", "1.0.6") .ЗависитОт("v8unpack", "1.0.6") * Update README.md поправил пример с синтаксис проверкой расширений * Добавлен флаг --ibcmd для команды init-dev * Рефакторинг вызова загрузки из исходников * Рефакторинг команды * Рефакторинг главного модуля приложения * Доработаны диагностические сообщения о ходе выполнения команды * Добавлены тесты для команды инициализации окружения * Добавлен флвг --ibcmd для команды compileext * Добавлены условия для признания пути относительным * Добавлен геттер для получения каталога временной ИБ * Добавлен параметр --ibcmd для команды compile * Добавлен параметр --ibcmd для команды compileexttocfe * Добавлен общий метод установки признака использования временной ИБ * Исправлено обновление файла с версиями метаданных * Добавлен параметр --ibcmd для команды restore * Добавлен параметр --ibcmd для команды dump * Добавлен параметр --ibcmd для команды unload * Добавлен параметр --ibcmd для команды load * Используем единый способ получения объекта логирования * Добавлен параметр --ibcmd для команды loadext * Добавлен параметр --ibcmd для команды unloadext * Добавлен параметр --ibcmd для команды updatedb * Добавлен параметр --ibcmd для команды updateext * Добавлен параметр --ibcmd для команды decompile * Добавлен параметр --ibcmd для команды decompileext * Улучшена диагностика возникающих ошибок при загрузке ИБ из файла * Добавлен метод создания менеджера конфигуратора * Добавлен параметр --ibcmd для команды update-dev * Рефакторинг команды инициализации окружения * Убраны неактуальные импорты * Добавлены зависимости пакета * Учтонены версии зависимостей * Обновлеена зависимость от ibcmdrunner * Включены тесты для update-dev * Вывод отладки перенесен в менеджер команд приложения * Исправлено получение лога приложения * Выгрузка сделана версией 8.3.20 * зависимость от движка 1.9.0 как у ibcmdrunner * пробел для GA * ошибка теста ТестДолжен_ОбновитьФайловуюБазуИнкрементальноIbcmd * небольшое уточнение * установка v8unpack 1.0.5 для тестов * перенос строк * доп.зависимости * исправлена ошибка запуска opm + checkout * исправил фичу прогона тестов * улучшил, исправил метод СтекВызовов * ошибка поиска корня, если в имени русские буквы * ошибки с --workspace * исправил фичу прогона сценариев * исправлен и ускорен запуск фичи РазборкаКонфигурации * модальная синтакс-ошибка * исправлен и ускорен запуск фич сборки, разборки расширений * мелкое ускорение фичи настройки окружения * исправление падение сценария - падала инкрементальная загрузка - добавлены отладочные логи * в случае ошибок создания пользователей код возврата 1 исправлено падение фичи * Обрезается имя ИБ в списке если Корневой путь проекта содержит точки closes #610 * Дописал возможность проверить применимость расширения перед установкой. * Создаются необходимые каталоги для формирования отчетов * add unlockrepo fix doc url add flag "--do-not-update" * синтакс.ошибки * Добавил параметр ЗапуститьТолькоПроверкуПрименимостиРасширений (#615) * Дописал возможность проверить применимость расширения перед установкой. * Добавил возможность проведения проверки применимости без загрузки конфигураций. * Добавлены переменные окружения для учетных данных администратора кластера (#572) * Добавлены переменные окружения для учетных данных администратора кластера * Добавлены переменные среды в описание параметров с учетными данными администратора кластера * Изменены имена переменных окружения в соответствии с именем параметров * использую CLUSTERADMIN --------- Co-authored-by: Artur Ayukhanov * Новая команда compare - отчет о сравнении конфигураций (#523) * Команда сравнения конфигураций * Исправление получения параметров команды * Исправление замечаний и порядок параметров * Переименование параметра подобно v8runner * зависимость от релиза v8runner улучшено форматирование в справке * todo * верный TODO --------- Co-authored-by: Artur Ayukhanov * исправлена публикация релиза * опечатка * исправлено падение фичи из-за принятого ПР https://github.com/vanessa-opensource/vanessa-runner/issues/610 * lib.system=../oscript_modules * убрал дубли зависимостей * Обновил зависимости + описание процедур подготовки, установки пакета * восстановление настроек в oscript.cfg --------- Co-authored-by: Ivan Smirnov Co-authored-by: Nenashev Anatoliy Co-authored-by: Boris Sinitsyn Co-authored-by: 8095tores <42864922+8095tores@users.noreply.github.com> Co-authored-by: Artem Kuznetsov Co-authored-by: Dmitriy.Medvedev Co-authored-by: Dmitrich Co-authored-by: stanislavchernomiza <39956813+stanislavchernomiza@users.noreply.github.com> Co-authored-by: Segate-ekb <80944823+Segate-ekb@users.noreply.github.com> Co-authored-by: ivanovEV Co-authored-by: Рекитянский Александр Co-authored-by: Dima Ovcharenko Co-authored-by: Рекитянский Александр Co-authored-by: Kirill Chernenko <32082417+sfaqer@users.noreply.github.com> Co-authored-by: Yuri Goncharuk Co-authored-by: Vladimir Ochakovskiy Co-authored-by: skirdinsa <56070000+skirdinsa@users.noreply.github.com> Co-authored-by: Artur Ayukhanov Co-authored-by: Egor Ivanov Co-authored-by: Georgiy Alyabev --- .github/workflows/release.yml | 69 +- .github/workflows/testing.yml | 13 +- .gitignore | 2 - README.md | 4 +- epf/readme.md | 7 +- .../Ext/Form/Module.bsl" | 75 +- .../Ext/Form.xml" | 26 + .../Ext/Form/Module.bsl" | 123 ++- .../Ext/Form/Module.bsl" | 41 +- ...20\266\320\265\320\275\320\270\321\217.os" | 7 +- ...0\320\272\320\265\321\202\320\260.feature" | 1 + ...2\320\265\320\273\320\265\320\271.feature" | 11 +- ...0\321\217\321\202\320\270\321\217.feature" | 69 ++ ...6\320\265\320\275\320\270\321\217.feature" | 4 +- ...6\320\265\320\275\320\270\321\217.feature" | 38 +- ...5\320\265\321\201\321\201\320\260.feature" | 23 +- ...2\321\201\320\270\321\201\320\260.feature" | 129 +++ ...5\321\201\321\202\320\276\320\262.feature" | 132 +-- ...4\320\260\320\275\320\264\321\213.feature" | 22 +- ...3\320\270\321\211\320\265\320\274.feature" | 10 + ...0\320\260\321\206\320\270\320\270.feature" | 33 +- ...0\320\265\320\275\320\270\320\271.feature" | 26 +- ...0\320\265\320\275\320\270\320\271.feature" | 11 +- ...1\320\276\321\200\320\272\320\270.feature" | 126 ++- oscript.cfg | 1 + packagedef | 111 +- src/main.os | 236 +---- src/oscript.cfg | 2 + ...20\222\320\244\320\260\320\271\320\273.os" | 38 +- ...20\222\320\244\320\260\320\271\320\273.os" | 41 +- ...20\222\320\244\320\260\320\271\320\273.os" | 42 +- ...20\244\320\260\320\271\320\273\320\260.os" | 51 +- ...20\244\320\260\320\271\320\273\320\260.os" | 51 +- ...21\200\320\260\321\206\320\270\320\270.os" | 49 +- ...20\270\321\217\321\202\320\270\321\217.os" | 12 +- ...21\200\320\260\321\202\320\276\321\200.os" | 2 +- ...20\270\320\273\320\270\321\211\320\265.os" | 2 +- ...20\266\320\265\320\275\320\270\321\217.os" | 325 +++--- ...20\270\320\273\320\270\321\211\320\260.os" | 7 +- ...20\270\320\273\320\270\321\211\320\260.os" | 2 +- ...21\200\320\260\321\206\320\270\321\216.os" | 23 +- ...21\206\320\270\320\270\320\221\320\224.os" | 38 +- ...20\266\320\265\320\275\320\270\321\217.os" | 295 +++--- ...21\200\320\265\320\275\320\270\320\271.os" | 43 +- ...21\200\320\260\321\206\320\270\320\270.os" | 27 +- ...20\270\320\273\320\270\321\211\320\260.os" | 2 +- ...20\270\320\273\320\270\321\211\320\265.os" | 94 ++ ...20\270\320\273\320\270\321\211\321\203.os" | 7 +- ...20\270\320\273\320\270\321\211\320\265.os" | 2 +- ...276\320\265\320\272\321\202\320\260EDT.os" | 111 +- ...20\272\321\201\320\270\321\201\320\260.os" | 130 ++- ...21\200\320\260\321\206\320\270\320\270.os" | 120 ++- ...21\200\320\265\320\275\320\270\320\271.os" | 69 +- ...21\200\320\265\320\275\320\270\320\271.os" | 49 +- ...20\275\320\270\320\272\320\276\320\262.os" | 131 ++- ...21\200\320\265\320\275\320\270\321\217.os" | 135 ++- ...20\270\320\273\320\270\321\211\320\260.os" | 7 +- ...21\202\320\260\320\262\320\272\320\270.os" | 69 +- ...20\270\320\273\320\270\321\211\320\265.os" | 12 +- ...20\222\320\244\320\260\320\271\320\273.os" | 11 +- ...21\200\320\260\321\206\320\270\320\270.os" | 129 +++ ...260\320\275\320\270\320\265_xUnitFor1C.os" | 4 +- ...20\264\320\265\320\275\320\270\321\217.os" | 26 +- ...20\275\321\201\320\260\320\274\320\270.os" | 65 +- ...20\265\321\200\321\201\320\270\320\270.os" | 28 +- ...5\320\264\320\266\320\265\321\200Ibcmd.os" | 361 +++++++ ...0\271\320\273\320\276\320\2621\320\241.os" | 351 ++++++- ...20\260\321\202\320\276\321\200\320\260.os" | 954 +++++++++++------- ...20\261\320\276\321\202\320\276\320\272.os" | 90 +- ...20\266\320\265\320\275\320\270\321\217.os" | 280 ++++- ...20\272\320\260\320\221\320\260\320\267.os" | 39 +- ...0\270\320\224\320\273\321\2171\320\241.os" | 55 +- ...20\265\321\202\320\276\320\264\321\213.os" | 230 ++++- ...21\201\321\202\320\265\320\274\321\213.os" | 6 +- tasks/oscript.cfg | 2 + tests/fixtures/1Cv8.dt | Bin 0 -> 3791 bytes tests/fixtures/1cv8.cf | Bin 0 -> 15538 bytes tests/fixtures/feature/env.json | 3 +- tests/fixtures/feature/vb-conf.json | 9 +- tests/xunits/compile.os | 73 ++ tests/xunits/compileext.os | 53 + tests/xunits/compileexttocfe.os | 73 ++ tests/xunits/decompile.os | 73 ++ tests/xunits/decompileext.os | 56 + tests/xunits/dump.os | 50 + tests/xunits/init-dev.os | 100 ++ tests/xunits/load.os | 49 + tests/xunits/loadext.os | 50 + tests/xunits/restore.os | 50 + tests/xunits/unload.os | 50 + tests/xunits/unloadext.os | 51 + tests/xunits/update-dev.os | 143 +++ tests/xunits/updatedb.os | 48 + tests/xunits/updateext.os | 68 ++ ...20\264\320\233\320\276\320\263\320\260.os" | 38 + ...20\276\320\274\320\260\320\275\320\264.os" | 139 +++ tools/oscript-template.cfg | 2 + tools/oscript.cfg | 2 + tools/runner.os | 20 +- xunit-schema.json | 8 +- 100 files changed, 5345 insertions(+), 1832 deletions(-) create mode 100644 "features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" rename "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" => "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" (89%) create mode 100644 oscript.cfg create mode 100644 src/oscript.cfg create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" create mode 100644 "src/\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\200Ibcmd.os" create mode 100644 tasks/oscript.cfg create mode 100644 tests/fixtures/1Cv8.dt create mode 100644 tests/fixtures/1cv8.cf create mode 100644 tests/xunits/compile.os create mode 100644 tests/xunits/compileext.os create mode 100644 tests/xunits/compileexttocfe.os create mode 100644 tests/xunits/decompile.os create mode 100644 tests/xunits/decompileext.os create mode 100644 tests/xunits/dump.os create mode 100644 tests/xunits/init-dev.os create mode 100644 tests/xunits/load.os create mode 100644 tests/xunits/loadext.os create mode 100644 tests/xunits/restore.os create mode 100644 tests/xunits/unload.os create mode 100644 tests/xunits/unloadext.os create mode 100644 tests/xunits/update-dev.os create mode 100644 tests/xunits/updatedb.os create mode 100644 tests/xunits/updateext.os create mode 100644 "tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" create mode 100644 "tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" create mode 100644 tools/oscript-template.cfg create mode 100644 tools/oscript.cfg diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fee28f69..1ee87aca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,62 +1,15 @@ -# MIT License -# Copyright (C) 2020 Tymko Oleg and contributors -# All rights reserved. +name: Публикация релиза -name: Подготовка релиза и публикация в хабе -# Только события создания и изменения релиза on: - release: - types: [published, edited] - -env: - PACKAGE_MASK: vanessa-runner-*.ospx + release: + types: + - published + workflow_dispatch: jobs: - build: - runs-on: self-hosted - # runs-on: ${{ matrix.os }} - # strategy: - # fail-fast: false - # matrix: - # os: [ubuntu-latest] - # oscript_version: ['1.4.0'] - - steps: - # Загрузка проекта - - name: Актуализация - uses: actions/checkout@v2 - - # Установка OneScript конкретной версии - # - name: Установка OneScript - # uses: otymko/setup-onescript@v1.1 - # with: - # version: ${{ matrix.oscript_version }} - - # Установка зависимостей пакета - - name: Установка зависимостей - run: | - opm install - # run: | - # opm install opm - # opm install - - - name: Сборка пакета - run: opm build - - - name: Заливка артефактов - uses: actions/upload-artifact@v2 - with: - name: package.zip - path: ./${{ env.PACKAGE_MASK }} - - - name: Заливка в релиз - uses: AButler/upload-release-assets@v1.0 - with: - files: ./${{ env.PACKAGE_MASK }} - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Публикация в hub.oscript.io - shell: cmd - run: opm push -f ./${{ env.PACKAGE_MASK }} --token ${{ env.TOKEN }} -c stable - env: - TOKEN: ${{ secrets.OSHUB_TOKEN }} + release: + uses: autumn-library/workflows/.github/workflows/release.yml@v1 + with: + package_mask: "vanessa-runner-*.ospx" # change me! + secrets: + PUSH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 7f1a42f7..f470c077 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -15,15 +15,15 @@ jobs: # matrix: # # os: [ubuntu-latest, windows-latest] # oscript_version: ['1.4.0'] - + steps: # Загрузка проекта - name: Актуализация - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: # Disabling shallow clone is recommended for improving relevancy of reporting fetch-depth: 0 - + # Установка OneScript конкретной версии # - name: Установка OneScript # uses: otymko/setup-onescript@v1.1 @@ -34,13 +34,14 @@ jobs: - name: Установка зависимостей shell: cmd run: | - opm install --dev - opm install -l + call opm install --dev + call opm install -l + call opm u v8unpack@1.0.5 # run: | # opm install opm # opm install add # opm install --dev - + # Задача тестирования, в результате ожидается успешное выполнение - name: Тестирование run: oscript ./tasks/test.os diff --git a/.gitignore b/.gitignore index 8c691272..45c8d21a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,6 @@ bdd-exec\.xml **/ConfigDumpInfo.xml .vscode/launch.json -tools/oscript.cfg -src/oscript.cfg # Каталоги build/ diff --git a/README.md b/README.md index 36c1cb40..fe6bb056 100644 --- a/README.md +++ b/README.md @@ -498,9 +498,9 @@ call vrunner <параметры запуска> "-Server", "-ExternalConnection", "-ThickClientOrdinaryApplication" + // "-Extension" : "ИмяРасширения", + // "-AllExtensions" : true ] - // "-Extension" : "ИмяРасширения", - // "-AllExtensions" : true } } ``` diff --git a/epf/readme.md b/epf/readme.md index 784fa348..9e04d1c8 100644 --- a/epf/readme.md +++ b/epf/readme.md @@ -18,7 +18,12 @@ + **ЗагрузитьРасширение** позволяет подключать расширение в режиме предприятия и получать результат ошибки. Предназначено для подключения в конфигурациях, основанных на БСП. В параметрах /C передается путь к расширению и путь к файлу лога подключения. -+ **ЗагрузитьВнешниеОбработки** позволяет загрузить все внешние обработки и подключить в справочник "Дополнительные отчеты и обработки", т.к. их очень много то первым параметром идет каталог, вторым параметром путь к файлу лога. Все обработки обновляются согласно версиям. ++ **ЗагрузитьОбработки** позволяет загрузить\подключить все внешние обработки из файлов в справочник "Дополнительные отчеты и обработки". Первым параметром указывается каталог, в котором хранятся внешние обработки, а вторым параметром - путь к файлу лога. Все обработки обновляются согласно версиям. Также можно указать параметр `ЗавершитьРаботуСистемы`. Параметры разделяются через точку с запятой. + + Примеры: + - `ПутьКФайламДляЗагрузки;ПутьКЛогФайлу` + - `ПутьКФайламДляЗагрузки;ПутьКЛогФайлу;ЗавершитьРаботуСистемы` + - `C:\Users\user\Documents\СпрДопОтчетыОбработки;C:\Users\user\Documents\log.txt` + **БлокировкаРаботыСВнешнимиРесурсами** позволяет блокировать, разблокировать работу с внешними ресурсами и выключать отдельные регламентные задания (по наименованию). diff --git "a/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 61f7956a..857edf05 100644 --- "a/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -31,8 +31,10 @@ ПараметрыКоманднойСтроки = ПолучитьСтруктуруПараметров(СтрокаЗапуска); ПреобразоватьПараметрыКоторыеНачинаютсяСТочкиКНормальнымПутям(ПараметрыКоманднойСтроки); + ЗапуститьТолькоПроверкуПрименимостиРасширений = ЗначениеПараметраБулево("ЗапуститьТолькоПроверкуПрименимостиРасширений", ПараметрыКоманднойСтроки, Ложь); + ПутьРасширения = ЗначениеПараметра("Путь", ПараметрыКоманднойСтроки, - "Не задан путь расширения - формат Путь=НужныйПутьФайлаРасширения"); + "Не задан путь расширения - формат Путь=НужныйПутьФайлаРасширения", Не ЗапуститьТолькоПроверкуПрименимостиРасширений); ИмяРасширения = ЗначениеПараметра("Имя", ПараметрыКоманднойСтроки, "Не задано имя расширения - формат Имя=МоеИмя", Ложь); @@ -45,12 +47,18 @@ ПараметрыКоманднойСтроки); ИспользоватьОсновныеРолиДляВсехПользователей = ЗначениеПараметраБулево("ИспользоватьОсновныеРолиДляВсехПользователей", ПараметрыКоманднойСтроки, Истина); + ПроверитьПрименимость = ЗначениеПараметраБулево("ПроверитьПрименимость", ПараметрыКоманднойСтроки, Ложь); + ЗагружатьРасширениеПриНаличииПроблемПрименимости = ЗначениеПараметраБулево("ЗагружатьРасширениеПриНаличииПроблемПрименимости", ПараметрыКоманднойСтроки, Ложь); ПараметрыРасширения = Новый Структура; ПараметрыРасширения.Вставить("БезопасныйРежим", БезопасныйРежимРасширения); ПараметрыРасширения.Вставить("ЗащитаОтОпасныхДействий", ЗащитаОтОпасныхДействийРасширения); ПараметрыРасширения.Вставить("ИспользоватьОсновныеРолиДляВсехПользователей", - ИспользоватьОсновныеРолиДляВсехПользователей); + ИспользоватьОсновныеРолиДляВсехПользователей); + ПараметрыРасширения.Вставить("ПроверитьПрименимость", + ПроверитьПрименимость); + ПараметрыРасширения.Вставить("ЗагружатьРасширениеПриНаличииПроблемПрименимости", + ЗагружатьРасширениеПриНаличииПроблемПрименимости); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -68,11 +76,14 @@ КонецПопытки; Попытка - - ЗагрузитьРасширения(ПутьРасширения, ИмяРасширения, Перезаписывать, - ПараметрыРасширения, - ЗавершитьРаботуСистемы, ОтключитьЛогикуНачалаРаботыСистемы); - + Если ЗапуститьТолькоПроверкуПрименимостиРасширений Тогда + Лог("Указан ключ <ЗапуститьТолькоПроверкуПрименимостиРасширений> будет выполнена только проверка применимости. Расширения с этим ключем загружены не будут!", "Информация"); + ПроверитьВозможностьПрименимостиРасширений(); + Иначе + ЗагрузитьРасширения(ПутьРасширения, ИмяРасширения, Перезаписывать, + ПараметрыРасширения, + ЗавершитьРаботуСистемы, ОтключитьЛогикуНачалаРаботыСистемы); + КонецЕсли; Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -104,10 +115,13 @@ |Можно указать как путь каталога с несколькими расширениями, так и путь каталога с одним расширением. | |Любые параметры, кроме первого (Путь), являются необязательными. + |Если указан параметр ЗапуститьТолькоПроверкуПрименимостиРасширений выполняется только проверка применимости всех расширений в конфигурации. Параметр (Путь) в этом случае указывать не нужно. |Если параметр (БезопасныйРежим;ЗащитаОтОпасныхДействий;ЗавершитьРаботуСистемы) не указан, расширение будет загружено без него. |Если параметр Перезаписывать указан, если соответствующие расширение будет переустановлено. | Если параметр Перезаписывать не указан, будет выдана ошибка, если расширение с таким именем уже установлено!. |Если указано ЗавершитьРаботуСистемы=Ложь, работа 1С:Предприятия не будет завершена. + |Если параметр ПроверитьПрименимость указан, перед загрузкой расширения будет выполнена проверка на наличие проблем применимости расширения. + | Если, несмотря на наличие проблем применимости, нужно загрузить расширение - необходимо указать параметр ЗагружатьРасширениеПриНаличииПроблемПрименимости | |По умолчанию простой режим запуска Путь=Путь загружает расширение из файла, отключая безопасный режим и защиту от опасных действий. |Для платформы 8.3.15 и выше по умолчанию расширение загружается с использованим основных ролей расширения для всех пользователей. @@ -199,6 +213,9 @@ ОписаниеЗащиты = Новый("ОписаниеЗащитыОтОпасныхДействий"); ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = ПараметрыРасширения.ЗащитаОтОпасныхДействий; + + ПроверитьПрименимость = ПараметрыРасширения.ПроверитьПрименимость; + ЗагружатьРасширениеПриНаличииПроблемПрименимости = ПараметрыРасширения.ЗагружатьРасширениеПриНаличииПроблемПрименимости; Расширение = РасширенияКонфигурации.Создать(); Расширение.БезопасныйРежим = ПараметрыРасширения.БезопасныйРежим; @@ -208,7 +225,17 @@ Расширение.ИспользоватьОсновныеРолиДляВсехПользователей = ПараметрыРасширения.ИспользоватьОсновныеРолиДляВсехПользователей; КонецЕсли; - + + Если ПроверитьПрименимость И Не ПовторнаяУстановка Тогда + МассивПроблемПрименимости = Расширение.ПроверитьВозможностьПрименения(ДвоичныеДанныеРасширения, Истина); + ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости, Имя); + Если МассивПроблемПрименимости.Количество() > 0 И НЕ ЗагружатьРасширениеПриНаличииПроблемПрименимости Тогда + ЛогСервер("Расширение не удалось установить. Обнаружены ошибки применимости! + | Если вы хотите загрузить расширение не смотря на ошибки применимости, то используйте параметр <ЗагружатьРасширениеПриНаличииПроблемПрименимости;>"); + ВызватьИсключение "Установка не удалась"; + КонецЕсли; + КонецЕсли; + Попытка Расширение.Записать(ДвоичныеДанныеРасширения); Исключение @@ -331,6 +358,38 @@ КонецПроцедуры +&НаСервере +Процедура ПроверитьВозможностьПрименимостиРасширений() + МассивПроблемПрименимости = РасширенияКонфигурации.ПроверитьВозможностьПримененияВсех(); + ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости); + Если МассивПроблемПрименимости.Количество() > 0 Тогда + ВызватьИсключение "При проверке применимости обнаружены ошибки!"; + Иначе + ЛогСервер("Ошибок применимости не обнаружено!", "Информация") + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости, ИмяНовогоРасширения = "") + + СтрокаОшибокПрименимости = ""; + Шаблон = "В расширении <%1> обнаружена проблема с важностью <%2>: + |%3"; + + Для Каждого Проблема Из МассивПроблемПрименимости Цикл + СтрокаОшибокПрименимости = СтрокаОшибокПрименимости + Символы.ПС + СтрШаблон(Шаблон, + ?(ЗначениеЗаполнено(Проблема.Расширение.Имя), Проблема.Расширение.Имя, ИмяНовогоРасширения), + Строка(Проблема.Важность), + Проблема.Описание); + КонецЦикла; + + Если НЕ СтрокаОшибокПрименимости = "" Тогда + ЛогСервер("При проверке применимости расширения обнаружены следующие проблемы: + | + |" + СтрокаОшибокПрименимости, "Информация"); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область БиблиотекаЗапускаВанессаРаннер diff --git "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" index d9904d6a..a5517eee 100644 --- "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" +++ "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -35,5 +35,31 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Путь к файлу результата</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ошибка обновления</v8:content> + </v8:item> + + + xs:boolean + + \ No newline at end of file diff --git "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 27bd6253..81138ea7 100644 --- "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -16,6 +16,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОшибкаОбновления = Ложь; + Попытка Выполнить("ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(""ОбщиеНастройкиПользователя"", |""ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"", Ложь);"); @@ -30,11 +32,25 @@ ПрекратитьРаботуСистемы(); //Сообщить("Заглушка - завершаем работу системы"); Возврат; - КонецЕсли; + КонецЕсли; + + ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); + СтрокаПоиска = "exitCodePath="; + Для каждого Стр из ПараметрыЗапуска Цикл + Если СтрНайти(Стр, СтрокаПоиска) > 0 Тогда + ПутьКФайлуРезультата = СтрЗаменить(Стр, СтрокаПоиска, ""); + Сообщить("Путь файла лога " + ПутьКФайлуРезультата); + УдалитьФайлРезультата(); + Прервать; + КонецЕсли; + КонецЦикла; ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияПрограммы", 10, Истина); ПодключитьОбработчикОжидания("ПроверитьЛегальностьОбновления", 2); - + Если СуществуетПодсистемаМультиязычность() Тогда + ПодключитьОбработчикОжидания("ПроверитьРегиональныеНастройки", 2); + ПроверитьРегиональныеНастройки(); + КонецЕсли; ПроверитьНеобходимостьЗавершенияПрограммы(); ПроверитьЛегальностьОбновления(); КонецПроцедуры @@ -47,6 +63,8 @@ СтрокаНеудачиОбновления = Нрег(НСтр("ru='Не удалось выполнить обновлени';uk='Не вдалося виконати оновленн'")); СтрокаНачальноеЗаполнение = НСтр("ru='начальное заполнение';uk='початкове заповнення'"); + СтрокаПереходСДругойПрограммы = НСтр("ru='переход';uk='переход'"); + СтрокаНевыполненыДополнительныеПроцедуры = НСтр("ru='не выполнены дополнительные процедуры'"); СтрокаОбновлениеВерсии = НСтр("ru='обновление версии';uk='оновлення версії'" ); СтрокаЧтоНового = НРег(НСтр("ru='Что нового в конфигурации';uk='Що нового в конфігурації'")); @@ -71,6 +89,15 @@ ФормаНачальногоЗаполненияНайденаОдинРаз = Истина; ФормаНачальногоЗаполненияНайдена = Истина; ОбновитьПрогресс = Истина; + ИначеЕсли Найти(ЗаголовокНРег, СтрокаПереходСДругойПрограммы) > 0 Тогда + + ФормаНачальногоЗаполненияНайденаОдинРаз = Истина; + ФормаНачальногоЗаполненияНайдена = Истина; + ОбновитьПрогресс = Истина; + ИначеЕсли Найти(ЗаголовокНРег, СтрокаНевыполненыДополнительныеПроцедуры) > 0 Тогда + + ФормаОбновленияНайдена = Истина; + КонецЕсли; Если ОбновитьПрогресс Тогда @@ -80,16 +107,24 @@ КонецЕсли; + Если Найти(ЗаголовокНРег, СтрокаНевыполненыДополнительныеПроцедуры)>0 Тогда + Если Не Содержимое = Неопределено И ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда + Содержимое.Закрыть(Истина); + МожемЗавершатьРаботу = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + Если СчетчикОжиданияРезультатов > 0 И Найти(ЗаголовокНРег, СтрокаЧтоНового)>0 Тогда СчетчикОжиданияРезультатов = МаксИтерацийОжиданияРезультатов + 1; Сообщить(""+ТекущаяДата() + " - Удачное завершение обновления"); - МожноЗавершатьРаботу = Истина; Прервать; КонецЕсли; Если Найти(ЗаголовокНРег, СтрокаНеудачиОбновления)>0 Тогда СчетчикОжиданияРезультатов = МаксИтерацийОжиданияРезультатов + 1; МожноЗавершатьРаботу = Истина; + ОшибкаОбновления = Истина; Попытка Если ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда @@ -190,6 +225,9 @@ &НаКлиенте Процедура ЗавершитьРаботу() Экспорт + Если Не ОшибкаОбновления Тогда + ЗаписатьФайлРезультата(); + КонецЕсли; ПрекратитьРаботуСистемы(); КонецПроцедуры @@ -202,15 +240,86 @@ Рез = Описание.Имя = "СтандартныеПодсистемы"; Исключение ИнфоОшибки = ИнформацияОбОшибке(); - //Сообщить("Описание = '" + ИнфоОшибки.Описание + "'", СтатусСообщения.Внимание); - //Сообщить("Модуль = '" + ИнфоОшибки.ИмяМодуля + "'", СтатусСообщения.Важное); - //Сообщить("НомерСтроки = '" + ИнфоОшибки.НомерСтроки + "'", СтатусСообщения.Важное); - //Сообщить("ИсходнаяСтрока = '" + ИнфоОшибки.ИсходнаяСтрока + "'", СтатусСообщения.Важное); Рез = НРег(ИнфоОшибки.ИмяМодуля) = НРег("ОбщийМодуль.ОбновлениеИнформационнойБазыБСП.Модуль"); КонецПопытки; Возврат Рез; КонецФункции +&НаКлиенте +Процедура ЗаписатьФайлРезультата() + + Если ПутьКФайлуРезультата = "" Тогда + Возврат; + КонецЕсли; + + ТекстовыйФайл = Новый ТекстовыйДокумент; + ТекстовыйФайл.УстановитьТекст("0"); + ТекстовыйФайл.Записать(ПутьКФайлуРезультата, КодировкаТекста.UTF8); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьФайлРезультата() + + Если ПутьКФайлуРезультата = "" Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(ПутьКФайлуРезультата); + Исключение + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьВЖурналРегистрации(ТекстСообщения); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРегиональныеНастройки() Экспорт + СтрокаРегиональныеНастройки = НРег(НСтр("ru='Региональные настройки'")); + + Окна = ПолучитьОкна(); + Для каждого Окн Из Окна Цикл + Если ТипЗнч(Окн) = Тип("ОкноКлиентскогоПриложения") Тогда + Содержимое = Окн.ПолучитьСодержимое(); + Если Найти(НРег(Строка(Окн.Заголовок)), СтрокаРегиональныеНастройки) > 0 Тогда + Попытка + Если ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда + Содержимое.Закрыть(Новый Структура("Отказ", Ложь));; + СчетчикОжиданияРезультатов = 0; + КонецЕсли; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + + ОтключитьОбработчикОжидания("ПроверитьРегиональныеНастройки"); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция СуществуетПодсистемаМультиязычность() + Рез = Ложь; + Попытка + Выполнить("Рез = ОбщегоНазначенияКлиент.ПодсистемаСуществует(""СтандартныеПодсистемы.Мультиязычность"");"); + Исключение + КонецПопытки; + Возврат Рез; +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаписатьВЖурналРегистрации(Комментарий); + ЗаписьЖурналаРегистрации(КлючЖР(), УровеньЖурналаРегистрации.Ошибка, Неопределено, Неопределено, Комментарий); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КлючЖР() + Возврат "VanessaRunner.ЗакрытьПредприятие"; +КонецФункции + СчетчикОжиданияРезультатов = 0; МаксИтерацийОжиданияРезультатов = 5; ИндикаторВыполнения = 0; diff --git "a/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 9701eae3..9e701284 100644 --- "a/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -242,7 +242,7 @@ Функция СоздатьПервогоАдминистратораПриНеобходимости(Имя) Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда - Лог("Уже существуют пользователь. Пользователь-администратор не создан!"); + Лог("Уже существуют пользователи. Пользователь-администратор не создан!"); Возврат Ложь; КонецЕсли; @@ -252,9 +252,11 @@ Администратор.ПоказыватьВСпискеВыбора = Истина; Администратор.ПолноеИмя = Имя; - Если Метаданные.Роли.Найти("ПолныеПрава") <> Неопределено Тогда - Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - КонецЕсли; + СнятьЗащитуОтОпасныхДействий(Администратор); + + ДобавитьРольПользователю(Администратор, "ПолныеПрава"); + ДобавитьРольПользователю(Администратор, "АдминистраторСистемы"); + ДобавитьРольПользователю(Администратор, "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок"); Администратор.Язык = Метаданные.Языки.Русский; Администратор.Записать(); @@ -266,7 +268,7 @@ КонецФункции -&НаСервере +&НаСервереБезКонтекста Процедура Лог(Знач Комментарий, Знач Уровень = "Ошибка") Если Не ЗначениеЗаполнено(Уровень) Тогда @@ -288,9 +290,34 @@ КонецПроцедуры -&НаСервере +&НаСервереБезКонтекста +Процедура СнятьЗащитуОтОпасныхДействий(ПользовательИБ) + + Попытка + + ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий; + ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь; + + ПользовательИБ.ЗащитаОтОпасныхДействий = ОписаниеЗащиты; + + Исключение + Лог("Не удалось снять защиту от опасных действий пользователю"); + КонецПопытки + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьРольПользователю(ПользовательИБ, ИмяРоли) + + Если Метаданные.Роли.Найти(ИмяРоли) <> Неопределено Тогда + ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяРоли]); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста Функция КлючЖР() Возврат "VanessaRunner.СозданиеПользователей"; КонецФункции -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git "a/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 5954eb5f..aad75a99 100644 --- "a/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -58,7 +58,7 @@ УстановитьПутьКБазеВБазыДляУдаленияВКонтексте(СтрокаБазыДанных); Ожидаем.Что(МенеджерСпискаБаз.ПолучитьИмяБазыВСписке("/F" +СтрокаБазыДанных), - "Искали базу в списке баз /F" +СтрокаБазыДанных).Равно(Новый Файл(БДД.ПолучитьИзКонтекста("РабочийКаталог")).ИмяБезРасширения); + "Искали базу в списке баз /F" +СтрокаБазыДанных).Равно(Новый Файл(БДД.ПолучитьИзКонтекста("РабочийКаталог")).Имя); КонецПроцедуры @@ -70,9 +70,8 @@ УстановитьПутьКБазеВБазыДляУдаленияВКонтексте(СтрокаПутиБазы); Парсер = МенеджерСпискаБаз.ПолучитьПарсерБаз(); - ИмяПроекта = Новый Файл(СтрокаПутиБазы).ИмяБезРасширения; - Ожидаем.Что(Парсер.НайтиПоИмени(ИмяПроекта)).Существует(); - + ИмяПроекта = Новый Файл(СтрокаПутиБазы).Имя; + Ожидаем.Что(Парсер.НайтиПоИмени(ИмяПроекта), "База не найдена по имени").Существует(); КонецПроцедуры diff --git "a/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" "b/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" index e9ca06aa..74eb4aa1 100644 --- "a/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" +++ "b/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" @@ -12,5 +12,6 @@ Допустим Я создаю временный каталог и сохраняю его в контекст Допустим Я собираю пакет во временном каталоге И Я устанавливаю временный каталог как рабочий каталог + И каталог "oscript_modules/vanessa-runner" не существует Когда я устанавливаю пакет из файла собранного пакета Тогда файл "oscript_modules/vanessa-runner/epf/ЗакрытьПредприятие.epf" существует diff --git "a/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" "b/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" index 700df31f..8797f1a3 100644 --- "a/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" +++ "b/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" @@ -30,13 +30,10 @@ И Я добавляю параметр "--command" для команды "oscript" И Я добавляю параметр "СоздатьАдминистратора;Имя=Администратор;ЗавершитьРаботуСистемы" для команды "oscript" И Я добавляю параметр "--execute СоздатьПользователей.epf" для команды "oscript" - # И Я добавляю параметр "--execute $runnerRoot\epf\СоздатьПользователей.epf" для команды "oscript" И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" - # И Я сообщаю вывод команды "oscript" - Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | | Информация: Пользователь-администратор с именем Администратор создан! | @@ -60,10 +57,9 @@ Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | | Пользователь ИБ не идентифицирован | - | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено. | Тогда Вывод команды "oscript" не содержит | Ошибка: Неудача при обработке параметров запуска | - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 1 Сценарий: Неудача создания первого пользователя-администратора, если пользователи существуют @@ -80,8 +76,7 @@ Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | - | Ошибка: Уже существуют пользователь. Пользователь-администратор не создан! | - | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено. | + | Ошибка: Уже существуют пользователи. Пользователь-администратор не создан! | Тогда Вывод команды "oscript" не содержит | Ошибка: Неудача при обработке параметров запуска | - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 1 diff --git "a/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" "b/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" new file mode 100644 index 00000000..05a1fb7b --- /dev/null +++ "b/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" @@ -0,0 +1,69 @@ +#language: ru + +Функционал: Загрузка в режиме Предприятие + Как разработчик + Я хочу иметь возможность загрузить режим 1С:Предприятие + Чтобы изменять данные или выполнять обработку обновления + +Контекст: + Дано я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И Я очищаю параметры команды "oscript" в контексте + + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf $runnerRoot\epf\ЗакрытьПредприятие ЗакрытьПредприятие.epf --nocacheuse --language ru" + И Я показываю вывод команды + И Код возврата команды "oscript" равен 0 + + Дано Я очищаю параметры команды "oscript" в контексте + И Я установил рабочий каталог как текущий каталог + И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" + +Сценарий: Запуск "ЗакрытьПредприятие.epf" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + Когда Я выполняю команду "oscript" + + И Я показываю вывод команды + + Тогда Вывод команды "oscript" содержит + | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | + Тогда Вывод команды "oscript" не содержит + | Пользователь ИБ не идентифицирован | + И Код возврата команды "oscript" равен 0 + +Сценарий: Запуск с неверным именем пользователя ИБ + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--db-user НеизвестныйПользователь" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + # И Я добавляю параметр "--online-file log.txt" для команды "oscript" + Когда Я выполняю команду "oscript" + + И Я показываю вывод команды + + Тогда Вывод команды "oscript" содержит + | Пользователь ИБ не идентифицирован | + Тогда Вывод команды "oscript" не содержит + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | + И Код возврата команды "oscript" равен 1 + +Сценарий: Запуск с открытием навигационной ссылки + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + И Я добавляю параметр "--url e1cib/navigationpoint/startpage" для команды "oscript" + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + + Тогда Код возврата команды "oscript" равен 0 + И Вывод команды "oscript" содержит + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | diff --git "a/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" "b/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" index 10238bac..ac6e97ba 100644 --- "a/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" +++ "b/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" @@ -20,10 +20,9 @@ И Я установил рабочий каталог как текущий каталог -Сценарий: Проверка репозитория git +Сценарий: Инициализация рабочей базы по умолчанию в ./build/ib Тогда В рабочем каталоге существует каталог ".git" -Сценарий: Инициализация рабочей базы по умолчанию в ./build/ib Когда Я сохраняю каталог проекта в контекст # Тогда Я показываю каталог проекта # И Я показываю рабочий каталог @@ -104,7 +103,6 @@ Сценарий: Разрядность x64 - Инициализация рабочей базы по умолчанию в ./build/ib Когда Я сохраняю каталог проекта в контекст - # Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru --locale ru --bitness x64" И Я сообщаю вывод команды "oscript" diff --git "a/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" "b/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" index 19eae3e3..2cf15e47 100644 --- "a/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" +++ "b/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" @@ -6,19 +6,19 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: Подготовка репозитория и рабочего каталога проекта 1С - Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" И Я очищаю параметры команды "oscript" в контексте - Допустим Я создаю временный каталог и сохраняю его в контекст + Дано Я создаю временный каталог и сохраняю его в контекст И Я устанавливаю временный каталог как рабочий каталог И Я инициализирую репозиторий git в рабочем каталоге - Допустим Я создаю каталог "build/out" в рабочем каталоге + Дано Я создаю каталог "build/out" в рабочем каталоге И Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог И Я установил рабочий каталог как текущий каталог + Когда Я сохраняю каталог проекта в контекст Сценарий: Инициализация и обновление рабочей базы по умолчанию в ./build/ib - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" И Я очищаю параметры команды "oscript" в контексте @@ -28,7 +28,6 @@ И Код возврата команды "oscript" равен 0 Сценарий: Инициализация и обновление рабочей базы на сервере в режиме реструктуризации -v2 - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" И Я очищаю параметры команды "oscript" в контексте @@ -39,37 +38,50 @@ Сценарий: Инициализация и обновление с инкрементальной загрузкой по логу GIT Когда Я выполняю команду "git" с параметрами "init" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте - Когда Я выполняю команду "echo" с параметрами "lastUploadedCommit.txt >> .gitignore" - И Я очищаю параметры команды "echo" в контексте + Когда Я создаю файл ".gitignore" с текстом + """ + lastUploadedCommit.txt + build/ib/ + """ Когда Я выполняю команду "git" с параметрами "add -A" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами 'commit -m "first commit"' + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте + + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" + И я показываю вывод команды + И Я очищаю параметры команды "oscript" в контексте + Когда Я выполняю команду "git" с параметрами "rev-parse --short HEAD >> ./cf/lastUploadedCommit.txt" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Тогда Файл "./cf/lastUploadedCommit.txt" существует - - Когда Я сохраняю каталог проекта в контекст - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" - И Я очищаю параметры команды "oscript" в контексте + # И я показываю текст файла "./cf/lastUploadedCommit.txt" Когда Я выполняю команду "echo" с параметрами 'Сообщить("Управляемое приложение"); A=1; >> ./cf/Ext/ManagedApplicationModule.bsl' Когда Я выполняю команду "git" с параметрами "status" + И я показываю вывод команды Тогда Вывод команды "git" содержит "modified: cf/Ext/ManagedApplicationModule.bsl" И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами "add -A" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами 'commit -m "second commit"' + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os update-dev --src ./cf --nocacheuse --git-increment --language ru" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит "Будет выполнена инкрементальная загрузка" И Вывод команды "oscript" содержит "Измененные файлы:" И Вывод команды "oscript" содержит "ManagedApplicationModule.bsl" И Вывод команды "oscript" содержит "Обновление конфигурации базы данных успешно завершено" - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 0 # TODO Сценарий: Инициализация сервисной базы по умолчанию в ./build/ibservice # TODO Сценарий: Инициализация рабочей базы в отдельном каталоге diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" similarity index 89% rename from "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" rename to "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" index 990b45a8..56d2324f 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" @@ -1,21 +1,23 @@ # language: ru -Функционал: Проверка запуска и работы vanessa behavior +Функционал: Проверка запуска и работы Vanessa-ADD Как Разработчик/Инженер по тестированию - Я Хочу иметь возможность автоматической проверки запуска Ванессы + Я Хочу иметь возможность автоматической проверки запуска проверки через Vanessa-ADD Чтобы удостовериться в качестве подготовленной конфигурации Контекст: - Дано я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И Я копирую каталог "feature" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога - И Я создаю каталог "build/feature" в рабочем каталоге И Я копирую файл "vb-conf.json" из каталога "tests/fixtures/feature" проекта в подкаталог "build/" рабочего каталога И Я копирую файл "env.json" из каталога "tests/fixtures/feature" проекта в подкаталог "build/" рабочего каталога - Допустим файл "build/env.json" существует + Дано файл "build/env.json" существует И файл "build/vb-conf.json" существует И Я очищаю параметры команды "oscript" в контексте +Сценарий: Первый - подготовка базы запуска + Дано я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию + Сценарий: Запуск проверки поведения с паузой И Я создаю файл "build/feature/пауза.feature" с текстом """ @@ -28,14 +30,14 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os vanessa" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--vanessasettings ./vb-conf.json" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--vanessasettings ./build/vb-conf.json" для команды "oscript" И Я добавляю параметр "--path build/feature" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит - | Сценарий: Пауза | + # TODO вернуть | Сценарий: Пауза | + # | Сценарий: Пауза | | Все фичи/сценарии выполнены! | | Тестирование поведения завершено | И Вывод команды "oscript" не содержит @@ -57,8 +59,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os vanessa" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--vanessasettings ./vb-conf.json" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--vanessasettings ./build/vb-conf.json" для команды "oscript" И Я добавляю параметр "--path build/feature" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" index 117c8034..663f846b 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" @@ -8,6 +8,8 @@ Контекст: Допустим я подготовил репозиторий и рабочий каталог проекта И я подготовил рабочую базу проекта "./build/ib" по умолчанию + # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + # Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" Сценарий: Синтаксическая проверка временной файловой базы # Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" @@ -232,3 +234,130 @@ И файл "out-my/allure-my/*-result.json" существует И файл "out-my/allure-my/dummy-for-delete-result.json" не существует + +Сценарий: Синтаксическая проверка базы с исключениями + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + """ + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 0 + И Вывод команды "oscript" не содержит + | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + | Неопознанный оператор | + | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями с группировкой по метаданным + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + """ + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--groupbymetadata" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 0 + И Вывод команды "oscript" не содержит + | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + | Неопознанный оператор | + | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями - есть ошибка не в исключениях + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + """ + # {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 1 + И Вывод команды "oscript" содержит + | {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) | + # И Вывод команды "oscript" не содержит + # | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + # | Неопознанный оператор | + # # | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями с группировкой по метаданным - есть ошибка не в исключениях + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + """ + # {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--groupbymetadata" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 1 + И Вывод команды "oscript" содержит + | Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) | + # И Вывод команды "oscript" не содержит + # | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + # | Неопознанный оператор | diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" index b66bedc2..0fd7d448 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" @@ -6,8 +6,6 @@ Чтобы удостовериться в качестве подготовленной конфигурации Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию И Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога И Я копирую каталог "feature" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога @@ -16,57 +14,28 @@ Дано Я очищаю параметры команды "oscript" в контексте И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" -Сценарий: Запуск тестирования xunit с указанием логина, пароля пользователя - - Дано файл "build/xdd_test.epf" не существует - Дано Я очищаю параметры команды "oscript" в контексте - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" - И Я очищаю параметры команды "oscript" в контексте - Дано файл "build/xdd_test.epf" существует + И я удаляю файл "build/xdd_test.epf" + И я удаляю файл "build/cache.json" - Когда Я создаю файл "build/env.json" с текстом - """ - { - "default": { - "--db-user":"Пользователь", - "--db-pwd":"Пароль" - } - } - """ - # "--additional": " /DisplayAllFunctions /Lru /iTaxi /TESTMANAGER /Debug /DebuggerURL tcp://localhost:1560", - - И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" +Сценарий: Первый - подготовка запуска тестирования xunit - Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" - И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" - И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" - И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" - И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" - И Я добавляю параметр "--testclient ::" для команды "oscript" - И Я добавляю параметр "--language ru" для команды "oscript" - - Когда Я выполняю команду "oscript" - И Я сообщаю вывод команды "oscript" - Тогда Вывод команды "oscript" содержит - | Выполняю тесты с помощью фреймворка Vanessa-ADD (Vanessa Automation Driven Development) | - | Пользователь ИБ не идентифицирован | - - И Код возврата команды "oscript" равен 1 + Допустим я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию Сценарий: Запуск тестирования xunit Дано файл "build/xdd_test.epf" не существует Дано Я очищаю параметры команды "oscript" в контексте Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" + И я показываю вывод команды И Я очищаю параметры команды "oscript" в контексте Дано файл "build/xdd_test.epf" существует И файл "build/junitreport/*.xml" не существует И файл "build/allurereport/*-result.json" не существует - И Я создаю каталог "build/junitreport" - И Я создаю каталог "build/allurereport" - И Я создаю файл "build/junitreport/dummy-for-delete.xml" - И Я создаю файл "build/allurereport/dummy-for-delete-result.json" + И Я создаю каталог "junitreport" + И Я создаю каталог "allurereport" + И Я создаю файл "junitreport/dummy-for-delete.xml" + И Я создаю файл "allurereport/dummy-for-delete-result.json" Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" @@ -78,14 +47,14 @@ | -->> тест ТестДолжен_ЧтоТоСделать | | ИНФОРМАЦИЯ - Все тесты выполнены! | | Выполнение тестов завершено | - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\junitreport\xddreport.xml" - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\allurereport\allure-testsuite.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\junitreport\xddreport.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\allurereport\allure-testsuite.xml" И Код возврата команды "oscript" равен 0 - Тогда файл "build/junitreport/*.xml" существует - И файл "build/allurereport/*-result.json" существует - И файл "build/junitreport/dummy-for-delete.xml" существует - И файл "build/allurereport/dummy-for-delete-result.json" существует + Тогда файл "junitreport/*.xml" существует + И файл "allurereport/*-result.json" существует + И файл "junitreport/dummy-for-delete.xml" существует + И файл "allurereport/dummy-for-delete-result.json" существует Сценарий: Падающий серверный тест xunit возвращает код 1 и в логе консоли видна причина падения @@ -125,7 +94,7 @@ И Код возврата команды "oscript" равен 0 И Я очищаю параметры команды "oscript" в контексте - Когда Я создаю файл "build/env.json" с текстом + Когда Я создаю файл "env.json" с текстом """ { "default": { @@ -133,12 +102,11 @@ } } """ - # "--additional": " /DisplayAllFunctions /Lru /iTaxi /TESTMANAGER /Debug /DebuggerURL tcp://localhost:1560", Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -190,7 +158,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -208,8 +176,6 @@ Сценарий: Проверка исключения и показа лога от 1С, когда еще не успел выполниться браузер тестов - # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" - И Я копирую каталог "fixture-epf/fixture" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога Дано я создаю каталог "build/fixture/Тест1/Forms/Форма/Ext/Form" в рабочем каталоге @@ -238,7 +204,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/Тест1.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--pathxunit build/Тест1.epf" для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" @@ -263,10 +229,10 @@ Дано файл "build/xdd_test.epf" существует И файл "build/junitreport/*.xml" не существует И файл "build/allurereport/*-result.json" не существует - И Я создаю каталог "build/junitreport" - И Я создаю каталог "build/allurereport" - И Я создаю файл "build/junitreport/dummy-for-delete.xml" - И Я создаю файл "build/allurereport/dummy-for-delete-result.json" + И Я создаю каталог "junitreport" + И Я создаю каталог "allurereport" + И Я создаю файл "junitreport/dummy-for-delete.xml" + И Я создаю файл "allurereport/dummy-for-delete-result.json" Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" @@ -279,11 +245,49 @@ | -->> тест ТестДолжен_ЧтоТоСделать | | ИНФОРМАЦИЯ - Все тесты выполнены! | | Выполнение тестов завершено | - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\junitreport\xddreport.xml" - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\allurereport\allure-testsuite.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\junitreport\xddreport.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\allurereport\allure-testsuite.xml" И Код возврата команды "oscript" равен 0 - И файл "build/junitreport/dummy-for-delete.xml" не существует - И файл "build/allurereport/dummy-for-delete-result.json" не существует - Тогда файл "build/junitreport/*.xml" существует - И файл "build/allurereport/*-result.json" существует + И файл "junitreport/dummy-for-delete.xml" не существует + И файл "allurereport/dummy-for-delete-result.json" не существует + Тогда файл "junitreport/*.xml" существует + И файл "allurereport/*-result.json" существует + +Сценарий: Запуск тестирования xunit с указанием логина, пароля пользователя + + Дано файл "build/xdd_test.epf" не существует + Дано Я очищаю параметры команды "oscript" в контексте + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" + И Я очищаю параметры команды "oscript" в контексте + Дано файл "build/xdd_test.epf" существует + + Когда Я создаю файл "env.json" с текстом + """ + { + "default": { + "--db-user":"Пользователь", + "--db-pwd":"Пароль" + } + } + """ + + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" + И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" + И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" + И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" + И Я добавляю параметр "--testclient ::" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Выполняю тесты с помощью фреймворка Vanessa-ADD (Vanessa Automation Driven Development) | + | Пользователь ИБ не идентифицирован | + + И Код возврата команды "oscript" равен 1 + diff --git "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" index c8dbc2ba..24d76645 100644 --- "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" +++ "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -38,11 +38,27 @@ # отладку логов включать нельзя, т.к. сценарий упадет # И я включаю полную отладку логов пакетов OneScript - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglogfile debug.log" + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglogfile 11/debug.log" Тогда Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит "." - И я показываю текст файла "debug.log" - И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" + И я показываю текст файла "11/debug.log" + И Файл "11/debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл 11/debug.log" + И Вывод команды "oscript" не содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" + И Код возврата команды "oscript" равен 0 + +Сценарий: Вызов приложения с выводом отладки во временный файл + + Дано Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + И Я установил рабочий каталог как текущий каталог + # отладку логов включать нельзя, т.к. сценарий упадет + # И я включаю полную отладку логов пакетов OneScript + + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglog" + Тогда Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит "." + # И я показываю текст файла "debug.log" + # И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" И Вывод команды "oscript" не содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" И Код возврата команды "oscript" равен 0 diff --git "a/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" "b/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" index 8998acf9..d36e58e4 100644 --- "a/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" +++ "b/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" @@ -19,6 +19,16 @@ И Я очищаю параметры команды "oscript" в контексте +Сценарий: Создание хранилища 1С без указания строки соединения + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --language ru" + # Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --language ru --debuglogfile debug.log" + Тогда Я сообщаю вывод команды "oscript" + # И я показываю текст файла "debug.log" + # И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл 11/debug.log" + И каталог "build/repo" существует + Тогда Вывод команды "oscript" содержит "При создании хранилища не определена БД, создаем на основе временной БД" + И Код возврата команды "oscript" равен 0 + Сценарий: Создание хранилища 1С Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --ibconnection /F./build/ib --language ru" Тогда Я сообщаю вывод команды "oscript" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\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.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\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.feature" index f7e2ac45..4261ffe5 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\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.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\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.feature" @@ -6,13 +6,16 @@ Чтобы удостовериться в автоматизации сборки конфигурации из исходников Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И я удаляю каталог "build/cf" + И я удаляю файл "build/1Cv8.cf" И Я очищаю параметры команды "oscript" в контексте +Сценарий: Первый - подготовка базы запуска + Допустим я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию -Сценарий: Запуск разборки конфигурации из исходников в файл cf. - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" +Сценарий: Запуск разборки конфигурации из исходников в файл cf + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" И Я добавляю параметр "-s ./cf" для команды "oscript" И Я добавляю параметр "-o ./build/1Cv8.cf" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -21,41 +24,49 @@ Тогда Вывод команды "oscript" содержит | Сохранение конфигурации успешно завершено | И Код возврата команды "oscript" равен 0 - Допустим Я создаю каталог "build/cf" в рабочем каталоге И Я очищаю параметры команды "oscript" в контексте - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os decompile" для команды "oscript" + И файл "build/1Cv8.cf" существует + Дано Я создаю каталог "build/cf" в рабочем каталоге + + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os decompile" для команды "oscript" И Я добавляю параметр "-i ./build/1Cv8.cf" для команды "oscript" И Я добавляю параметр "-o ./build/cf" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит | Запускаю выгрузку конфигурации в исходники | | Выгрузка в исходники завершена | И каталог "build/cf" существует И файл "build/cf/Configuration.xml" существует -Сценарий: Запуск выгрузки конфигурации из текущей конфигурации. - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" +Сценарий: Запуск выгрузки конфигурации из текущей конфигурации + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" И Я добавляю параметр "-s ./cf" для команды "oscript" И Я добавляю параметр "-c" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит | Загрузка конфигурации из файлов успешно завершена | И Код возврата команды "oscript" равен 0 И Я очищаю параметры команды "oscript" в контексте - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os decompile --ibconnection /F./build/ib" для команды "oscript" + Дано Я создаю каталог "build/cf" в рабочем каталоге + + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os decompile --ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" + И Я добавляю параметр "-c" для команды "oscript" И Я добавляю параметр "-o ./build/cf" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" - Допустим Я создаю каталог "build/cf" в рабочем каталоге + Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит - | Запускаю выгрузку конфигурации в исходники | + | Запускаем разборку конфигурации текущей ИБ на исходники | | Выгрузка в исходники завершена | И каталог "build/cf" существует И файл "build/cf/Configuration.xml" существует diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" index ed1440d2..52fe7c5d 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" @@ -6,6 +6,9 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: + И Я очищаю параметры команды "oscript" в контексте + +Сценарий: Первый - подготовка базы Допустим я подготовил репозиторий и рабочий каталог проекта И я подготовил рабочую базу проекта "./build/ib" по умолчанию @@ -21,19 +24,18 @@ Тогда Код возврата равен 0 И Файл "cfe-out/Configuration.xml" содержит """ - - Расширение1 - - - ru - Расширение1 - - - - Customization - Adopted + Расширение1 + + + ru + Расширение1 + + + """ - # Расш1_ + И Файл "cfe-out/Configuration.xml" содержит "Расш1_" + И Файл "cfe-out/Configuration.xml" содержит "Customization" + И Файл "cfe-out/Configuration.xml" содержит "Adopted" И Файл "cfe-out/Ext/ManagedApplicationModule.bsl" содержит 'Сообщить("Внутри Расш1_ПриНачалеРаботыСистемы");' # TODO почему-то проверкак текст файла ManagedApplicationModule.bsl ниже не проходит diff --git "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" index 306f1c84..76d5fdf9 100644 --- "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" +++ "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" @@ -6,10 +6,15 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - Допустим я подготовил рабочую базу проекта "./build/ib" по умолчанию + Дано Я очищаю параметры команды "oscript" в контексте И Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог + И я удаляю файл "*.cfe" + И я удаляю каталог "cfe-out" + +Сценарий: Первый - подготовка базы + Дано я подготовил репозиторий и рабочий каталог проекта + Дано я подготовил рабочую базу проекта "./build/ib" по умолчанию Сценарий: Сборка одного расширения с явно заданной базой @@ -47,7 +52,7 @@ # TODO Сценарий: Сборка каталога расширений с явно заданной базой Сценарий: Сборка расширения из исходников в cfe-файл с изменением номера сборки - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compileexttocfe" для команды "oscript" + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compileexttocfe" для команды "oscript" И Я добавляю параметр "-s cfe -o РасширениеНовое1.cfe" для команды "oscript" И Я добавляю параметр "--build-number 1516" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" diff --git "a/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" index 28110488..1cf693b8 100644 --- "a/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" +++ "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" @@ -25,7 +25,7 @@ # И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | + | Предыдущая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 @@ -43,7 +43,7 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -59,7 +59,7 @@ # И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | + | Предыдущая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 @@ -76,7 +76,7 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -93,8 +93,8 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.0.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -112,8 +112,120 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия | + | Предыдущая версия | И Код возврата команды "oscript" равен 0 Тогда файл "cfe_without_version/Configuration.xml" содержит "2.0.0.0" + +Сценарий: Изменение 3х-версии конфигурации, указан путь Configuration.xml для конфигурации + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0" для команды "oscript" + И Я добавляю параметр "--src cf/Configuration.xml" для команды "oscript" + + Когда Я выполняю команду "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации 1С на 2.0.0 | + | Предыдущая версия 1.0.0 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "cf/Configuration.xml" содержит "2.0.0" + +Сценарий: Изменение версии в модуле объекта внешней обработки + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Версия = "1.2.3"; + Возврат Версия; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + # И Я добавляю параметр "--src fixture/Тест1/Ext/ObjectModule.bsl" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Предыдущая версия 1.2.3 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" содержит + """ + Версия = "2.3.4.5"; + """ + +Сценарий: Изменение версии в модуле объекта внешней обработки - прямой путь к модулю + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Версия = "1.2.3"; + Возврат Версия; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + # И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1/Ext/ObjectModule.bsl" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Предыдущая версия 1.2.3 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" содержит + """ + Версия = "2.3.4.5"; + """ + +Сценарий: Изменение версии, если нет версии в модуле объекта внешней обработки + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Возврат 1; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Не найдена предыдущая установка версии, новая версия не установлена. | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" не содержит + """ + Версия = "2.3.4.5"; + """ diff --git a/oscript.cfg b/oscript.cfg new file mode 100644 index 00000000..41016836 --- /dev/null +++ b/oscript.cfg @@ -0,0 +1 @@ +lib.additional=../oscript_modules diff --git a/packagedef b/packagedef index e761ae16..d9ed38f4 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,39 @@ #Использовать 1commands +//////////////////////////////////////////////////////////// +// Описание пакета для сборки и установки +// Полную документацию см. на hub.oscript.io/packaging +// + +#Область УстановкаПакетаНаКлиентскойМашине + +// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - Строка - Путь в который пакетный менеджер устанавливает текущий пакет. +// ЧтениеZipФайла - ЧтениеZipФайла - Архив пакета. +// +Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт +КонецПроцедуры + +// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - Строка - Путь в который пакетный менеджер устанавливает текущий пакет. +// СтандартнаяОбработка - Булево - стандартная обработка +// +Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +#КонецОбласти + +#Область СборкаПакета + +// Вызывается пакетным менеджером перед началом сборки пакета. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// Процедура ПередСборкой(Знач РабочийКаталог) Экспорт Команда = Новый Команда; Команда.УстановитьПравильныйКодВозврата(0); @@ -14,6 +48,19 @@ СобратьПакетСЛокальнымиЗависимостями(РабочийКаталог); КонецПроцедуры +// Вызывается пакетным менеджером после помещения файлов в пакет. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы). +// +Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура СобратьПакетСЛокальнымиЗависимостями(Знач РабочийКаталог) Экспорт УдалитьФайлы(ОбъединитьПути(РабочийКаталог, "oscript_modules"), "*.*"); @@ -37,38 +84,62 @@ ВызватьИсключение "Ошибка сборки пакета"; КонецЕсли; + ВосстановитьНастройкиЗависимостейВ_oscript_cfg(); + +КонецПроцедуры + +// TODO до исправления бага opm - удаляется строки с lib.system +Процедура ВосстановитьНастройкиЗависимостейВ_oscript_cfg() + ИмяФайлаНастройки = "oscript.cfg"; + ИмяФайлаШаблона = "oscript-template.cfg"; + + Каталоги = КаталогиС_oscript_cfg(); + Для Каждого Каталог Из Каталоги Цикл + КопироватьФайл(ОбъединитьПути("tools", ИмяФайлаШаблона), ОбъединитьПути(Каталог, ИмяФайлаНастройки)); + КонецЦикла; КонецПроцедуры +Функция КаталогиС_oscript_cfg() + + Результат = Новый Массив; + Результат.Добавить("src"); + Результат.Добавить("tools"); + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +#КонецОбласти + ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыСистемы.os"); ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров); Описание.Имя("vanessa-runner") .Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта()) - .ВерсияСреды("1.7.0") + .ВерсияСреды("1.9.0") - .ЗависитОт("logos", "1.4.0") + .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("asserts", "1.4.0") + .ЗависитОт("cli-selector", "0.5.0") .ЗависитОт("cmdline", "1.0.0") - .ЗависитОт("tempfiles", "1.0.0") - .ЗависитОт("asserts", "1.3.0") - .ЗависитОт("v8runner", "1.8.2") - .ЗависитОт("v8find", "0.2.0") - .ЗависитОт("strings", "0.4.1") + .ЗависитОт("fluent", "0.6.1") + .ЗависитОт("fs", "1.2.0") + .ЗависитОт("ibcmdrunner", "0.2.3") .ЗависитОт("json", "1.1.1") - .ЗависитОт("1commands", "1.5.0") - .ЗависитОт("1bdd", "1.7.0") - .ЗависитОт("fs", "1.0.0") + .ЗависитОт("logos", "1.7.0") .ЗависитОт("ParserFileV8i", "0.0.5") + .ЗависитОт("semver", "0.5.2") + .ЗависитОт("strings", "0.5.0") + .ЗависитОт("tempfiles", "1.0.0") + .ЗависитОт("v8find", "0.3.0") + .ЗависитОт("v8runner", "1.10.0") .ЗависитОт("v8storage", "0.6.5") - .ЗависитОт("v8unpack", "1.0.4") - .ЗависитОт("cli-selector", "0.4.0") - - .РазработкаЗависитОт("1bdd") - .РазработкаЗависитОт("1testrunner") - .РазработкаЗависитОт("asserts") - .РазработкаЗависитОт("coverage") - .РазработкаЗависитОт("1commands") - .РазработкаЗависитОт("fs") - .РазработкаЗависитОт("add") + .ЗависитОт("v8unpack", "1.0.6") + + .РазработкаЗависитОт("1bdd", "1.14.0") + .РазработкаЗависитОт("1testrunner", "1.8.0") + .РазработкаЗависитОт("gitrunner", "1.7.1") + .РазработкаЗависитОт("add", "6.8.0") .ВключитьФайл("tools") .ВключитьФайл("src") diff --git a/src/main.os b/src/main.os index 5fe3171f..c6dd82d4 100644 --- a/src/main.os +++ b/src/main.os @@ -26,61 +26,6 @@ КонецПроцедуры -Функция СоответствиеПеременныхОкруженияПараметрамКоманд() - СоответствиеПеременных = Новый Соответствие(); - - СоответствиеПеременных.Вставить("RUNNER_IBCONNECTION", "--ibconnection"); - СоответствиеПеременных.Вставить("RUNNER_IBNAME", "--ibname"); - СоответствиеПеременных.Вставить("RUNNER_DBUSER", "--db-user"); - СоответствиеПеременных.Вставить("RUNNER_DBPWD", "--db-pwd"); - СоответствиеПеременных.Вставить("RUNNER_v8version", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_uccode", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_command", "--command"); - СоответствиеПеременных.Вставить("RUNNER_execute", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_storage-user", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_storage-pwd", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_storage-ver", "--storage-ver"); - СоответствиеПеременных.Вставить("RUNNER_storage-name", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_ROOT", "--root"); - СоответствиеПеременных.Вставить("RUNNER_WORKSPACE", "--workspace"); - СоответствиеПеременных.Вставить("RUNNER_PATHVANESSA", "--pathvanessa"); - СоответствиеПеременных.Вставить("RUNNER_PATHXUNIT", "--pathxunit"); - СоответствиеПеременных.Вставить("RUNNER_VANESSASETTINGS", "--vanessasettings"); - СоответствиеПеременных.Вставить("RUNNER_NOCACHEUSE", "--nocacheuse"); - СоответствиеПеременных.Вставить("RUNNER_LOCALE", "--locale"); - СоответствиеПеременных.Вставить("RUNNER_LANGUAGE", "--language"); - - СоответствиеПеременных.Вставить("RUNNER_V8VERSION", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_ADDITIONAL", "--additional"); - СоответствиеПеременных.Вставить("RUNNER_UCCODE", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_COMMAND", "--command"); - СоответствиеПеременных.Вставить("RUNNER_EXECUTE", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_NAME", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_USER", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_PWD", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_VER", "--storage-ver"); - - Возврат Новый ФиксированноеСоответствие(СоответствиеПеременных); -КонецФункции - -Функция НайтиКаталогТекущегоПроекта(Знач Путь) - Рез = ""; - Если ПустаяСтрока(Путь) Тогда - Попытка - Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска("git rev-parse --show-toplevel"); - Команда.УстановитьПравильныйКодВозврата(0); - Команда.Исполнить(); - Рез = СокрЛП(Команда.ПолучитьВывод()); - Исключение - // некуда выдавать ошибку, логи еще не доступны - КонецПопытки; - Иначе - Рез = Путь; - КонецЕсли; - Возврат Рез; -КонецФункции // НайтиКаталогТекущегоПроекта() - Функция ПолучитьПарсерКоманднойСтроки() Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -97,7 +42,7 @@ ПараметрыЗапуска = РазобратьАргументыКоманднойСтроки(); - Если ПараметрыЗапуска = Неопределено ИЛИ ПараметрыЗапуска.Количество() = 0 Тогда + Если Не ЗначениеЗаполнено(ПараметрыЗапуска) Тогда ВывестиВерсию(); Лог.Ошибка("Некорректные аргументы командной строки"); @@ -135,10 +80,6 @@ ВывестиВерсию(); КонецЕсли; - ДополнитьЗначенияПараметров(Команда, ЗначенияПараметров); - - ВключитьВыводОтладочногоЛогаВОтдельныйФайл(ЗначенияПараметров); - Возврат МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ЗначенияПараметров); КонецФункции // ВыполнениеКоманды() @@ -146,180 +87,7 @@ Процедура ПроверитьПодключениеВанессаАДД() ДопТекстОшибки = "Команда тестирования xunit недоступна |Команда проверки поведения vanessa недоступна"; - ВанессаАДД = ОбщиеМетоды.ЗагрузитьВанессаАДД(ДопТекстОшибки); -КонецПроцедуры - -Процедура ДополнитьЗначенияПараметров(Знач Команда, ЗначенияПараметров) - Перем ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию, ФайлОбщихНастроек; - Перем ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных, НастройкиИзФайла; - - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта( ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров) ); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, ОбщиеМетоды.ИмяФайлаНастроек()); - - ЗначениеПараметраФайлНастроек = ЗначенияПараметров["--settings"]; - Если ЗначениеЗаполнено(ЗначениеПараметраФайлНастроек) Тогда - ФайлОбщихНастроек = Новый Файл(ОбщиеМетоды.ПолныйПуть(ЗначениеПараметраФайлНастроек)); - Ожидаем.Что(ФайлОбщихНастроек.Существует(), - СтрШаблон("Ожидаем, что указанный в --settings <%1> файл по пути <%2> существует, а его нет!", - ЗначениеПараметраФайлНастроек, - ФайлОбщихНастроек.ПолноеИмя) - ).ЭтоИстина(); - КонецЕсли; - - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, - ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); - - ЗначенияПараметровНизкийПриоритет = Новый Соответствие; - - Если НастройкиИзФайла.Количество() > 0 Тогда - ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); - КонецЕсли; - - СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); - - ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); - - ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); - - // на случай переопределения этой настройки повторная установка - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - ДобавитьДанныеПодключения(ЗначенияПараметров); - - НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); - НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); - - НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - -КонецПроцедуры // ДополнитьЗначенияПараметров - -Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) - СтрокаПодключения = ЗначенияПараметров["--ibconnection"]; - ИмяБазы = ЗначенияПараметров["--ibname"]; - - Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда - ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", "--ibconnection", "--ibname"); - КонецЕсли; - - Если ЗначениеЗаполнено(СтрокаПодключения) Тогда - ЗначенияПараметров.Вставить("--ibname", СтрокаПодключения); - Иначе - ЗначенияПараметров.Вставить("--ibconnection", ИмяБазы); - - Если ЗначениеЗаполнено(ИмяБазы) Тогда - Лог.Предупреждение("------------------------------------------------------------------"); - Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); - Лог.Предупреждение("------------------------------------------------------------------"); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ЗначенияПараметров["--ibname"]) Тогда - ЗначенияПараметров.Вставить("--ibname", - ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров["--ibname"])); - - ИсходнаяСтрокаПодключения = ЗначенияПараметров["--ibname"]; - - НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( - ИсходнаяСтрокаПодключения, - ЗначенияПараметров["--nocacheuse"]); - - ЗначенияПараметров.Вставить("--ibname", НоваяСтрокаПодключения); - ЗначенияПараметров.Вставить("--ibconnection", ИсходнаяСтрокаПодключения); - - КонецЕсли; - - ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); -КонецПроцедуры - -Функция ДанныеПодключения(ЗначенияПараметров) - СтруктураПодключения = Новый Структура; - - // здесь может находиться и имя базы и строка подключения - СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); - - // здесь может находиться только строка подключения в виде пути к базе - СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); - - СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); - СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); - СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); - СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); - СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); - - Рез = Новый Структура; - Для каждого КлючЗначение Из СтруктураПодключения Цикл - Значение = КлючЗначение.Значение; - Если Значение = Неопределено Тогда - Значение = ""; - КонецЕсли; - Рез.Вставить(КлючЗначение.Ключ, Значение); - КонецЦикла; - - Возврат Новый ФиксированнаяСтруктура(Рез); -КонецФункции - -Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) - Рез = ЗначенияПараметров["--root"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ЗначенияПараметров["--workspace"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ""; - КонецЕсли; - КонецЕсли; - Возврат Рез; -КонецФункции - -Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) - Если Не ПараметрыСистемы.ЭтоWindows Тогда - Возврат; - КонецЕсли; - РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); - РегулярноеВыражение.Многострочный = Истина; - Для каждого КлючЗначение Из ЗначенияПараметров Цикл - Значение = КлючЗначение.Значение; - Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда - ВызватьИсключение СтрШаблон( - "Запрещено использование слешей как последних символов в параметрах.%1" + - " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", - Символы.ПС, КлючЗначение.Ключ, Значение); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Процедура ВключитьВыводОтладочногоЛогаВОтдельныйФайл(Знач ЗначенияПараметров) - - ПутьФайлаВывода = ""; - Если ЗначенияПараметров["--debuglogfile"] <> Неопределено Тогда - ПутьФайлаВывода = ЗначенияПараметров["--debuglogfile"]; - ИначеЕсли ЗначенияПараметров["--debuglog"] <> Неопределено Тогда - // специально не через ВременныеФайлы для возмножности сохранения файла после завершения - ПутьФайлаВывода = ПолучитьИмяВременногоФайла(".log"); // BSLLS:MissingTemporaryFileDeletion-off - ФайлВывода = Новый Файл(ПутьФайлаВывода); - ПутьФайлаВывода = ОбъединитьПути(ФайлВывода.Путь, "vrunner-" + ФайлВывода.Имя); // BSLLS:MissingTemporaryFileDeletion-off - Иначе - Возврат; - КонецЕсли; - - - ФайлЖурнала = Новый ВыводЛогаВФайл; - ФайлЖурнала.ОткрытьФайл(ПутьФайлаВывода); - - Если Не Лог.ДобавленыСобственныеСпособыВывода() Тогда - ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); - Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); - КонецЕсли; - - Лог.ДобавитьСпособВывода(ФайлЖурнала, УровниЛога.Отладка); - - Лог.Отладка("Подключил вывод отладочного лога в отдельный файл %1", ПутьФайлаВывода); + ОбщиеМетоды.ЗагрузитьВанессаАДД(ДопТекстОшибки); КонецПроцедуры Процедура ВывестиВерсию() diff --git a/src/oscript.cfg b/src/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/src/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" index b9ff4398..d800d223 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" @@ -11,13 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,6 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "dtpath", "Путь к результату - выгружаемому файлу с данными (*.dt)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -38,26 +40,34 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["dtpath"]); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку информационной базы в dt..."); Попытка - МенеджерКонфигуратора.ВыгрузитьИнфобазуВФайл( - ПараметрыКоманды["dtpath"]); + МенеджерСборки.ВыгрузитьИнфобазуВФайл(ФайлВыгрузки); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка информационной базы в dt завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" index a98ead71..26e11d8e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" @@ -11,13 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,6 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfpath", "Путь к результату - выгружаемому файлу конфигурации (*.cf)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -38,29 +40,34 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; - - // TODO отрефакторить получение ЗапускатьТолстыйКлиент + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfpath"]); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку конфигурации в cf..."); Попытка - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВФайл( - ПараметрыКоманды["cfpath"] - ); + МенеджерСборки.ВыгрузитьКонфигурациюВФайл(ФайлКонфигурации); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка конфигурации в cf завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" index 289bc0b2..9a7b494e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" @@ -9,13 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,7 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfepath", "Путь к результату - выгружаемому файлу расширения (*.cfe)"); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extname", "Имя расширения"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -39,28 +40,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлРасширения = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfepath"]); + ИмяРасширения = ПараметрыКоманды["extname"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку расширения в cfe..."); Попытка - МенеджерКонфигуратора.ВыгрузитьРасширениеВФайл( - ПараметрыКоманды["cfepath"], - ПараметрыКоманды["extname"] - ); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ФайлРасширения, ИмяРасширения); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка расширения в cfe завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" index b7210eb3..ef1c1c20 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" @@ -1,8 +1,6 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// // -// Выполнение команды/действия в 1С:Предприятие в режиме тонкого/толстого клиента с передачей запускаемых обработок и параметров -// -// TODO добавить фичи для проверки команды +// Загрузка информационной базы из dt-файла // // Служебный модуль с набором методов работы с командами приложения // @@ -11,13 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,35 +27,50 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "dtpath", "Путь к файлу с данными информационной базы (*.dt)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--JobsCount ", + "Количество заданий для загрузки информационной базы. Значение по умолчанию ‑ 0, что означает, будет столько заданий, сколько и процессоров. + | Работает только для клиент-серверной ИБ."); Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["dtpath"]); + КоличествоЗаданий = ПараметрыКоманды["--JobsCount"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем загрузку информационной базы из dt..."); Попытка - МенеджерКонфигуратора.ЗагрузитьИнфобазуИзФайла( - ПараметрыКоманды["dtpath"]); + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ФайлВыгрузки, КоличествоЗаданий); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка информационной базы из dt завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду + +КонецФункции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" index 2770b60f..412aa380 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" @@ -9,14 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -28,9 +27,13 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--file", "Путь к cfe-файлу расширения, например: --file=./1Cv8.cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-f", - "Краткая команда 'путь к cfe --file', пример: -f ./1Cv8.cfe"); + "Краткая команда 'путь к cfe --file', пример: -f ./1Cv8.cfe + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cfе выгрузит файл вида 1Cv8_1.2.3.4.cfе"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--extension", "Имя расширения. Обязательный параметр."); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--updatedb", "Признак обновления расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -40,15 +43,14 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ИмяРасширения = ПараметрыКоманды["--extension"]; Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда @@ -56,23 +58,28 @@ КонецЕсли; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ОбновитьКонфигурациюИБ = ПараметрыКоманды["--updatedb"]; ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-f", "--file")); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьВходящийСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьВходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - + Лог.Информация("Запускаем загрузку расширения из cfe..."); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ЗагрузитьФайлРасширения(ПутьВходящий, ИмяРасширения, - ПараметрыКоманды["--updatedb"]); + МенеджерСборки.ЗагрузитьФайлРасширения(ПутьВходящийСВерсией, ИмяРасширения, ОбновитьКонфигурациюИБ); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка расширения из cfe завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index d8a30398..e6826e27 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -11,14 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -30,7 +29,11 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Путь к файлу cf, пример: --src=./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", - "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf"); + "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -40,33 +43,37 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьВходящийСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьВходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - + Лог.Информация("Запускаем загрузку конфигурации из cf..."); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьВходящий); + МенеджерСборки.ЗагрузитьФайлКонфигурации(ПутьВходящийСВерсией); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка конфигурации из cf завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" index b85ddcc9..bf23e46f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" @@ -40,6 +40,8 @@ | Разрешено использовать переменную $runnerRoot для указания пути к каталогу vanessa-runner. | В этом случае можно использовать обработки из vanessa-runner. | vrunner run --command ""Путь=МойКаталог;ЗавершитьРаботуСистемы"" --execute $runnerRoot/epf/ЗагрузитьРасширениеВРежимеПредприятия.epf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--url", + "Навигационная ссылка для перехода после старта 1С:Предприятия"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--no-wait", "Не ожидать завершения запущенной команды/действия"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--online-file", @@ -79,12 +81,18 @@ ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ПутьКФайлуСтатусаВыполнения = ПараметрыКоманды["--exitCodePath"]; КомандаЗапуска = КомандаЗапуска(ПараметрыКоманды["--command"], ПутьКФайлуСтатусаВыполнения); ПутьЛогаВыполнения = ПараметрыКоманды["--online-file"]; + НавигационнаяСсылка = ПараметрыКоманды["--url"]; + ДополнительныеПараметры = ПараметрыКоманды["--additional"]; + Если Не ПустаяСтрока(НавигационнаяСсылка) Тогда + ДополнительныеПараметры = СтрШаблон("/URL ""%1"" %2", НавигационнаяСсылка, ДополнительныеПараметры); + КонецЕсли; + ДопСообщения = МенеджерКонфигуратора.НовыеДопСообщенияДляЗапускаПредприятия(); ДопСообщения.Ключ = "ЗапускВРежимеПредприятия"; ДопСообщения.СообщениеВСлучаеУспеха = "Выполнение в режиме 1С:Предприятие завершено"; @@ -95,7 +103,7 @@ МенеджерКонфигуратора.ЗапуститьВРежимеПредприятияСПроверкойВыполнения( ДопСообщения, КомандаЗапуска, ПутьОбработки1С, - ЗапускатьТолстыйКлиент, ПараметрыКоманды["--additional"], + ЗапускатьТолстыйКлиент, ДополнительныеПараметры, ОжидатьЗавершения, ПутьЛогаВыполнения, ПутьКФайлуСтатусаВыполнения); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" index a8ffb20a..f5d0e92f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" @@ -64,7 +64,7 @@ ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); МенеджерКонфигуратора.УстановитьПараметрыХранилища(ПараметрыХранилища); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index a84c864e..53e061c8 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -56,7 +56,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 3b556de2..e045796d 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -7,15 +7,23 @@ // /////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать fs -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера Перем КорневойПутьПроекта; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +// Параметры команды +Перем ДанныеПодключения; +Перем ПараметрыХранилища; +Перем РежимыРеструктуризации; +Перем РежимРазработчика; +Перем ПутьКФайлуКонфигурации; +Перем ПутьКИсходникам; +Перем ПутьКФайлуВыгрузки; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -31,6 +39,9 @@ | указываем версию платформы, которую хотим использовать, | и получаем по пути build\ib готовую базу для тестирования."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dt", "Путь к файлу с dt выгрузкой"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cf", "Путь к cf-файлу конфигурации + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--dev", "Признак dev режима, создаем и загружаем автоматом структуру конфигурации"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--storage", "Признак обновления из хранилища"); @@ -44,6 +55,8 @@ "Поддержка режима реструктуризации -v1 на сервере"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--v2", "Поддержка режима реструктуризации -v2 на сервере"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -55,9 +68,12 @@ // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений // ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) // +// Возвращаемое значение: +// Число - Код возврата команды. +// Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; @@ -73,205 +89,216 @@ РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]); РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); - ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], - ДанныеПодключения, ПараметрыКоманды["--uccode"], - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], - ПараметрыХранилища, - ПараметрыКоманды["--nocacheuse"], + ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + ПутьКФайлуВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--dt"]); + ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]); + РежимРазработчика = ПараметрыКоманды["--dev"]; + + ИнициализироватьБазуДанных(ПараметрыКоманды["--v8version"], ПараметрыКоманды["--nocacheuse"], ПараметрыКоманды); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции -Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, Знач ПутьКSRC, Знач ПутьКDT, Знач ДанныеПодключения, - Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, - Знач ПараметрыХранилища, Знач НеДобавлятьВСписокБаз, +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ИнициализироватьБазуДанных(Знач ВерсияПлатформы, + Знач НеДобавлятьВСписокБаз, Знач ПараметрыКоманды) Перем БазуСоздавали; БазуСоздавали = Ложь; - СтрокаПодключения = ДанныеПодключения.ПутьБазы; Пользователь = ДанныеПодключения.Пользователь; Пароль = ДанныеПодключения.Пароль; - КодЯзыка = ДанныеПодключения.КодЯзыка; - КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - - СтрокаПодключенияХранилище = ПараметрыХранилища.СтрокаПодключения; - ПользовательХранилища = ПараметрыХранилища.Пользователь; - ПарольХранилища = ПараметрыХранилища.Пароль; - ВерсияХранилища = ПараметрыХранилища.Версия; - РежимОбновленияХранилища = ПараметрыХранилища.РежимОбновления; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - - Если ПустаяСтрока(СтрокаПодключения) Тогда - - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); - СтрокаПодключения = "/F""" + КаталогБазы + """"; + Если ПустаяСтрока(ДанныеПодключения.ПутьБазы) Тогда + ДанныеПодключения = СоздатьДанныеПодключения(ДанныеПодключения); КонецЕсли; + СтрокаПодключения = ДанныеПодключения.ПутьБазы; + + МенеджерСборки = НовыйМенеджерСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); - Если Лев(СтрокаПодключения, 2) = "/F" Тогда - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); + Если ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключения) Тогда - ФайлБазы = Новый Файл(КаталогБазы); - Если ФайлБазы.Существует() Тогда - Лог.Отладка("Удаляем файл " + ФайлБазы.ПолноеИмя); - УдалитьФайлы(ФайлБазы.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - СоздатьКаталог(ФайлБазы.ПолноеИмя); - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - СоздатьФайловуюБазу(Конфигуратор, ФайлБазы.ПолноеИмя); + ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения); БазуСоздавали = Истина; Лог.Информация("Создали базу данных для " + СтрокаПодключения); - КонецЕсли; - // При первичной инициализации опускаем указание пользователя и пароля, т.к. их еще нет. - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); - - Если Не ПустаяСтрока(ПутьКDT) Тогда - ПутьКDT = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКDT)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьКDT); - Попытка - Если БазуСоздавали = Истина Тогда - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - КонецЕсли; - Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение "Не удалось загрузить: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); - КонецПопытки; КонецЕсли; // Базу создали, пользователей еще нет. - Если БазуСоздавали И ПустаяСтрока(ПутьКDT) Тогда - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, "", ""); + Если БазуСоздавали И ПустаяСтрока(ПутьКФайлуВыгрузки) Тогда + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); Пользователь = ""; Пароль = ""; Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); КонецЕсли; - Если Не ПустаяСтрока(ПутьКSRC) Тогда - Лог.Информация("Запускаю загрузку конфигурации из исходников"); + Если ЗначениеЗаполнено(ПутьКИсходникам) Тогда + ЗагрузкаИзИсходников(МенеджерСборки); - ПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя; - СписокФайлов = ""; - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКSRC, СписокФайлов, Ложь); + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуВыгрузки) Тогда + ЗагрузкаИзФайлаВыгрузки(МенеджерСборки); + + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда + ЗагрузкаИзФайлаКонфигурации(МенеджерСборки); + + ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда + ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); + + Иначе + Лог.Информация("Создана пустая база данных."); КонецЕсли; + ОбновитьКонфигурациюБД(МенеджерСборки); + + МенеджерСборки.Деструктор(); + + ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения); + + Лог.Информация("Инициализация завершена"); + +КонецПроцедуры + +Процедура ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения) + + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаПодключения); + + Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); Попытка + МенеджерСборки.СоздатьФайловуюБазу(КаталогБазы); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; - Если РежимОбновленияХранилища = Истина Тогда - Лог.Информация("Обновляем из хранилища"); - МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( - СтрокаПодключенияХранилище, ПользовательХранилища, ПарольХранилища, - ВерсияХранилища); - КонецЕсли; +КонецПроцедуры - Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, - РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); - КонецЕсли; +Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерСборки) + + Лог.Информация("Запускаем загрузку конфигурации из cf-файла..."); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); + + Попытка + МенеджерСборки.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); + МенеджерСборки.ОбновитьКонфигурациюБазыДанных(Ложь); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Создана информационная база из файла конфигурации."); - МенеджерКонфигуратора.Деструктор(); +КонецПроцедуры - Если НЕ НеДобавлятьВСписокБаз Тогда +Процедура ЗагрузкаИзИсходников(МенеджерСборки) - ДопДанныеСпискаБаз = Новый Структура; - ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); - Попытка - Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда - ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); - КонецЕсли; - МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, - Новый Файл(КорневойПутьПроекта).ИмяБезРасширения, - ДопДанныеСпискаБаз); - Исключение - Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); - КонецПопытки; + Лог.Информация("Запускаем загрузку конфигурации из исходников..."); + Попытка + СписокФайлов = ""; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, Ложь); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Создана информационная база из исходников."); - КонецЕсли; +КонецПроцедуры - Лог.Информация("Инициализация завершена"); +Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) + + Лог.Информация("Запускаем загрузку конфигурации из dt-файла..."); + Попытка + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Создана информационная база из файла выгрузки."); КонецПроцедуры -Процедура СоздатьФайловуюБазу(Конфигуратор, Знач КаталогБазы, Знач ПутьКШаблону = "", - Знач ИмяБазыВСписке = "", Знач КодЯзыка = "") - Лог.Отладка("Создаю файловую базу " + КаталогБазы); +Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора, ПараметрыХранилища) - ФС.ОбеспечитьКаталог(КаталогБазы); - УдалитьФайлы(КаталогБазы, "*.*"); + Лог.Информация("Обновляем из хранилища"); + Попытка + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыХранилища.СтрокаПодключения, ПараметрыХранилища.Пользователь, ПараметрыХранилища.Пароль, + ПараметрыХранилища.Версия); + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение; + КонецПопытки; - ПараметрыЗапуска = Новый Массив; - ПараметрыЗапуска.Добавить("CREATEINFOBASE"); - ПараметрыЗапуска.Добавить("File=""" +КаталогБазы + """"); - ПараметрыЗапуска.Добавить("/Out""" +Конфигуратор.ФайлИнформации() + """"); - Если ЗначениеЗаполнено(КодЯзыка) Тогда - ПараметрыЗапуска.Добавить("/L" +СокрЛП(КодЯзыка)); - КонецЕсли; +КонецПроцедуры - Если ИмяБазыВСписке <> "" Тогда - ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """"); - КонецЕсли; - Если ПутьКШаблону <> "" Тогда - ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """"); - КонецЕсли; +Процедура ОбновитьКонфигурациюБД(МенеджерСборки) - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыЗапуска Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; + Попытка + Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, + РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); + КонецЕсли; + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры - Приложение = ""; - Приложение = Конфигуратор.ПутьКПлатформе1С(); - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); +Процедура ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения) + + Если НеДобавлятьВСписокБаз Тогда + Возврат; КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); Попытка - ОбщиеМетоды.ЗапуститьПроцесс(Приложение); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); + КонецЕсли; + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, + Новый Файл(КорневойПутьПроекта).Имя, + ДопДанныеСпискаБаз); Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - ВызватьИсключение "Не удалось создать файловую ИБ: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Предупреждение("Добавление базы в список " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; - РезультатСообщение = ОбщиеМетоды.ПрочитатьФайлИнформации(Конфигуратор.ФайлИнформации()); - Если НЕ (СтрНайти(РезультатСообщение, "успешно завершено") = 0 - ИЛИ СтрНайти(РезультатСообщение, "completed successfully") = 0) Тогда +КонецПроцедуры - ВызватьИсключение "Результат работы не успешен: " + Символы.ПС + РезультатСообщение; +Функция НовыйМенеджерСборки(ПараметрыКоманды) + Если ПараметрыХранилища.РежимОбновления Тогда + Возврат ОбщиеМетоды.НовыйМенеджерКонфигуратора(); + Иначе + Возврат ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); КонецЕсли; -КонецПроцедуры +КонецФункции + +Функция СоздатьДанныеПодключения(ДанныеПодключения) + + _ДанныеПодключения = Новый Структура(ДанныеПодключения); + КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); + Файл = Новый Файл(КаталогБазы); + _ДанныеПодключения.ПутьБазы = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.СтрокаПодключения = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.Пользователь = ""; + _ДанныеПодключения.Пароль = ""; + + Возврат _ДанныеПодключения; + +КонецФункции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 4cd8b511..7810cc30 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -73,14 +73,9 @@ Ожидаем.Что(ПарольПользователяКопии, " не задан пароль пользователя хранилища, откуда копируем").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.КопироватьПользователейИзХранилища( diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 43b390fe..0e6cdc7b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -52,7 +52,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ДополнительныйКлючЗапуска = ""; ИмяРасширения = ПараметрыКоманды["--extension"]; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" index 6056d230..d8d55514 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" @@ -22,21 +22,20 @@ Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт ТекстОписания = - " Обновление конфигурации, находящейся на поддержке, или объединение конфигурации с файлом (с использованием файла настроек). - |"; + " Обновление конфигурации, находящейся на поддержке, или объединение конфигурации с файлом (с использованием файла настроек)."; ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Путь файла с объединяемой конфигурацией (.cf-файл) или с файлом обновления конфигурации (.cfu-файл), - |пример: --src=./1Cv8.cf"); + | Пример: --src=./1Cv8.cf + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткий псевдоним для команды `--src', пример: -s ./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--update-settings", "Файл с настройками объединения конфигураций (обязательный параметр)"); - // Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--enable-support", "Флаг необходимости установки конфигурации на поддержку, если есть возможность поставки на поддержку"); - // Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--disable-support", "Флаг запрета установки конфигурации на поддержку, даже если есть возможность поставки на поддержку"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--IncludeObjectsByUnresolvedRefs", "Флаг небходимости включения в объединение объектов, |не включенных в список объединяемых и отсутствующих в основной конфигурации"); @@ -56,6 +55,9 @@ // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений // ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) // +// Возвращаемое значение: +// Число - Результат выполнения команды +// Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт Попытка @@ -71,10 +73,6 @@ ПутьДистрибутива = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); ПутьФайлаНастройки = ПараметрыКоманды["--update-settings"]; - // Если Не ЗначениеЗаполнено(ПутьФайлаНастройки) Тогда - // ВызватьИсключение "Необходимо задать к файлу с настройками объединения конфигураций, - // |Параметр --update-settings является обязательным." - // КонецЕсли; ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--IncludeObjectsByUnresolvedRefs"]; ОчищатьОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--ClearUnresolvedRefs"]; @@ -89,8 +87,11 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьДистрибутиваСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьДистрибутива); + Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); @@ -101,7 +102,7 @@ ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = Ложь; КонецЕсли; - УправлениеКонфигуратором.ОбновитьКонфигурациюИзФайла(ПутьДистрибутива, ПутьФайлаНастройки, + УправлениеКонфигуратором.ОбновитьКонфигурациюИзФайла(ПутьДистрибутиваСВерсией, ПутьФайлаНастройки, ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно, ВывестиДваждыИзмененныеОбъекты); Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\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\221\320\224.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\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\221\320\224.os" index c291e207..b0fd7cef 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\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\221\320\224.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\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\221\320\224.os" @@ -11,10 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать v8runner +#Область ОписаниеПеременных -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем Лог; // Экземпляр логгера + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -31,7 +34,8 @@ "Поддержка режима реструктуризации -v2 на сервере"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--dynamic", "Динамическое обновление конфигурации"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); КонецПроцедуры // ЗарегистрироватьКоманду @@ -39,22 +43,32 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); РежимРеструктуризации_В1 = ПараметрыКоманды["--v1"]; РежимРеструктуризации_В2 = ПараметрыКоманды["--v2"]; ДинамическоеОбновление = ПараметрыКоманды["--dynamic"]; - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, РежимРеструктуризации_В1, РежимРеструктуризации_В2, ДинамическоеОбновление); - МенеджерКонфигуратора.Деструктор(); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Запускаем обновление конфигурации базы данных..."); + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, РежимРеструктуризации_В1, РежимРеструктуризации_В2, ДинамическоеОбновление); + Лог.Информация("Обновление конфигурации базы данных завершено."); + + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 692c9126..4a7dee8b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -7,13 +7,24 @@ // /////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner -#Использовать fs +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера Перем КорневойПутьПроекта; +Перем ДанныеПодключения; +Перем ПараметрыХранилища; +Перем РежимыРеструктуризации; +Перем РежимРазработчика; +Перем ПутьКИсходникам; +Перем ПутьКФайлуВыгрузки; +Перем ИнкрементальнаяЗагрузкаGit; +Перем СниматьСПоддержки; + +#КонецОбласти + +#Область ОбработчикиСобытий + Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт ТекстОписания = @@ -36,7 +47,7 @@ "Снимает конфигурации с поддержки перед загрузкой исходников"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--git-increment", - СтрШаблон("Инкрменальная загрузка по git diff + СтрШаблон("Инкременальная загрузка по git diff | Схема работы | При загрузке в каталоге исходников (--src) ищется файл | %1 (необходимо добавить в .gitignore). @@ -58,6 +69,9 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--v2", "Поддержка режима реструктуризации -v2 на сервере"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -66,11 +80,14 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; @@ -86,141 +103,56 @@ РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]); РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); - ОбновитьБазуДанных(ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], - ДанныеПодключения, - ПараметрыКоманды["--uccode"], - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], - ПараметрыХранилища, РежимыРеструктуризации, - ПараметрыКоманды); - - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + ПутьКФайлуВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--dt"]); -КонецФункции - -Процедура ОбновитьБазуДанных(Знач ПутьИсходников, Знач ПутьАрхиваИБ, - Знач ДанныеПодключения, - Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, - Знач ПараметрыХранилища, РежимыРеструктуризации, - ПараметрыКоманды) - - Перем БазуСоздавали; - БазуСоздавали = Ложь; - ТекущаяПроцедура = "Запускаем обновление"; - - СниматьСПоддержки = ПараметрыКоманды["--disable-support"]; ИнкрементальнаяЗагрузкаGit = ПараметрыКоманды["--git-increment"]; + СниматьСПоддержки = ПараметрыКоманды["--disable-support"]; + РежимРазработчика = ПараметрыКоманды["--dev"]; - СтрокаПодключения = ДанныеПодключения.ПутьБазы; - Пользователь = ДанныеПодключения.Пользователь; - Пароль = ДанныеПодключения.Пароль; - КодЯзыка = ДанныеПодключения.КодЯзыка; - КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - - СтрокаПодключенияХранилище = ПараметрыХранилища.СтрокаПодключения; - ПользовательХранилища = ПараметрыХранилища.Пользователь; - ПарольХранилища = ПараметрыХранилища.Пароль; - ВерсияХранилища = ПараметрыХранилища.Версия; - РежимОбновленияХранилища = ПараметрыХранилища.РежимОбновления; - - Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - - Если РежимРазработчика = Истина Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, "./build/ibservice"); - СтрокаПодключения = "/F""" + КаталогБазы + """"; - КонецЕсли; + ОбновитьБазуДанных(ПараметрыКоманды); - Если ПустаяСтрока(СтрокаПодключения) Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); - СтрокаПодключения = "/F""" + КаталогБазы + """"; - КонецЕсли; + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); +КонецФункции - Если Лев(СтрокаПодключения, 2) = "/F" Тогда - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - ФайлБазы = Новый Файл(КаталогБазы); - Ожидаем.Что(ФайлБазы.Существует(), ТекущаяПроцедура + " папка с базой существует").ЭтоИстина(); - КонецЕсли; +#КонецОбласти - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - // При первичной инициализации опускаем указание пользователя и пароля, т.к. их еще нет. - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); +#Область СлужебныеПроцедурыИФункции - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); +Процедура ОбновитьБазуДанных(ПараметрыКоманды) - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); + ТекущаяПроцедура = "Запускаем обновление"; - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, "", ""); - Если Не ПустаяСтрока(ПутьАрхиваИБ) Тогда - ПутьАрхиваИБ = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьАрхиваИБ)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьАрхиваИБ); - Попытка - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьАрхиваИБ); - Исключение - Лог.Ошибка("Не удалось загрузить:" + ОписаниеОшибки()); - КонецПопытки; + Если ПустаяСтрока(ДанныеПодключения.ПутьБазы) Тогда + ДанныеПодключения = СоздатьДанныеПодключения(ДанныеПодключения); КонецЕсли; - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - - Если Не ПустаяСтрока(ПутьИсходников) Тогда - - Если ИнкрементальнаяЗагрузкаGit Тогда - СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьИсходников); - Иначе - СписокФайлов = ""; - КонецЕсли; - - Лог.Информация("Запускаю загрузку конфигурации из исходников"); - - Если Не ПустаяСтрока(СписокФайлов) Тогда - - Лог.Информация( - "Будет выполнена инкрементальная загрузка - |Измененные файлы: - |%1", - СтрСоединить(СтрРазделить(СписокФайлов, ";"), Символы.ПС) - ); - - КонецЕсли; - - ПутьИсходников = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьИсходников)).ПолноеИмя; - - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию( - ПутьИсходников, СписокФайлов, СниматьСПоддержки); + СтрокаПодключения = ДанныеПодключения.ПутьБазы; - Если ИнкрементальнаяЗагрузкаGit Тогда - ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); - КонецЕсли; + Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); + Если ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключения) Тогда + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаПодключения); + Ожидаем.Что(ФС.КаталогСуществует(КаталогБазы), ТекущаяПроцедура + " папка с базой существует").ЭтоИстина(); КонецЕсли; - Попытка - - Если РежимОбновленияХранилища = Истина Тогда - Лог.Информация("Обновляем из хранилища"); - - МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( - СтрокаПодключенияХранилище, ПользовательХранилища, ПарольХранилища, - ВерсияХранилища); - КонецЕсли; - - Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, - РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); - КонецЕсли; + МенеджерСборки = НовыйМенеджерСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Если ЗначениеЗаполнено(ПутьКИсходникам) Тогда + ЗагрузкаИзИсходников(МенеджерСборки); + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуВыгрузки) Тогда + ЗагрузкаИзФайлаВыгрузки(МенеджерСборки); + ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда + ЗагрузкаИзХранилища(МенеджерСборки); + Иначе + Лог.Ошибка("Информационная база не обновлялась!"); + КонецЕсли; - Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + ОбновитьКонфигурациюБД(МенеджерСборки); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); КонецПроцедуры @@ -229,12 +161,17 @@ Хэш = ПолучитьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); Если ПустаяСтрока(Хэш) Тогда + Лог.Отладка("Не найден хэш последнего загруженного коммита для инкрементальной загрузки"); Возврат ""; КонецЕсли; - ТекущийКаталог = ТекущийКаталог(); + ТекущийКаталог = КорневойПутьПроекта; + Лог.Отладка("ТекущийКаталог %1", ТекущийКаталог); + + ОтносительныйПутьИсходников = ФС.ОтносительныйПуть(КорневойПутьПроекта, ПутьИсходников, "/"); КоманднаяСтрока = СтрШаблон("git diff --name-only %1 HEAD", Хэш); + Лог.Отладка("Запускаю команду git получить измененные файлы %1", КоманднаяСтрока); Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог, Истина, , КодировкаТекста.UTF8); Процесс.Запустить(); @@ -245,7 +182,8 @@ Пока Процесс.ПотокВывода.ЕстьДанные Цикл СтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку(); - Если СтрНачинаетсяС(СтрокаВывода, СтрЗаменить(ПутьИсходников, "./", "")) + Лог.Отладка(" Строка вывода команды: %1", СтрокаВывода); + Если СтрНачинаетсяС(СтрокаВывода, ОтносительныйПутьИсходников) И Не ФайлВСпискеИсключений(СтрокаВывода) Тогда СтрокаВывода = СкорректироватьПутьКИзменениюФормы(СтрокаВывода); @@ -263,9 +201,20 @@ КонецЕсли; КонецЦикла; + Лог.Отладка("Ошибки от процесса + |%1", Процесс.ПотокОшибок.Прочитать()); Если ЗначениеЗаполнено(СтрокаИзмененныхФайлов) Тогда СтрокаИзмененныхФайлов = Лев(СтрокаИзмененныхФайлов, СтрДлина(СтрокаИзмененныхФайлов) - 1); + + ИзменныеФайлыЛог = СтрСоединить(СтрРазделить(СтрокаИзмененныхФайлов, ";"), Символы.ПС); + Лог.Информация( "Будет выполнена инкрементальная загрузка + |Измененные файлы: + |%1", + ИзменныеФайлыЛог + ); + Иначе + Лог.Отладка("Не получена строка измененных файлов для инкрементальной загрузки"); КонецЕсли; Возврат СтрокаИзмененныхФайлов; @@ -275,8 +224,10 @@ Функция ПолучитьХэшПоследнегоЗагруженногоКоммита(Знач ПутьИсходников) ИмяФайла = ФайлПредыдущегоГитКоммита(ПутьИсходников).ПолноеИмя; + Лог.Отладка("Путь файла предыдущего коммита git %1", ИмяФайла); Если Не ФС.ФайлСуществует(ИмяФайла) Тогда + Лог.Отладка("Не существует файл предыдущего коммита git %1", ИмяФайла); Возврат ""; КонецЕсли; @@ -292,7 +243,7 @@ ИмяФайла = ФайлПредыдущегоГитКоммита(ПутьИсходников).ПолноеИмя; - ТекущийКаталог = ТекущийКаталог(); + ТекущийКаталог = КорневойПутьПроекта; КоманднаяСтрока = "git rev-parse --short HEAD"; @@ -348,3 +299,93 @@ Функция ИмяФайлаПредыдущегоГитКоммита() Возврат "lastUploadedCommit.txt"; КонецФункции + +Функция НовыйМенеджерСборки(ПараметрыКоманды) + + Если ПараметрыХранилища.РежимОбновления Тогда + Возврат ОбщиеМетоды.НовыйМенеджерКонфигуратора(); + Иначе + Возврат ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + КонецЕсли; + +КонецФункции + +Функция СоздатьДанныеПодключения(ДанныеПодключения) + + _ДанныеПодключения = Новый Структура(ДанныеПодключения); + ЗаполнитьЗначенияСвойств(_ДанныеПодключения, ДанныеПодключения); + КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); + Файл = Новый Файл(КаталогБазы); + _ДанныеПодключения.ПутьБазы = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.СтрокаПодключения = "/F""" + Файл.ПолноеИмя + """"; + + Возврат _ДанныеПодключения; + +КонецФункции + +Процедура ЗагрузкаИзИсходников(МенеджерСборки) + + Лог.Информация("Запускаем обновление конфигурации из исходников..."); + Если ИнкрементальнаяЗагрузкаGit Тогда + СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьКИсходникам); + Иначе + СписокФайлов = ""; + КонецЕсли; + + Попытка + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, СниматьСПоддержки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + + Если ИнкрементальнаяЗагрузкаGit Тогда + ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьКИсходникам); + КонецЕсли; + + Лог.Информация("Информационная база обновлена из исходников."); + +КонецПроцедуры + +Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) + + Лог.Информация("Запускаем обновление конфигурации из dt-файла..."); + Попытка + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Информационная база обновлена из файла выгрузки."); + +КонецПроцедуры + +Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора) + + Лог.Информация("Обновляем из хранилища"); + Попытка + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыХранилища.СтрокаПодключения, ПараметрыХранилища.Пользователь, ПараметрыХранилища.Пароль, + ПараметрыХранилища.Версия); + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ОбновитьКонфигурациюБД(МенеджерСборки) + + Попытка + Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, + РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); + КонецЕсли; + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index ee7b9de0..27c459dd 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,13 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать v8runner -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -23,6 +23,9 @@ ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, которое нужно обновить"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -31,29 +34,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ИмяРасширения = ПараметрыКоманды["extensionName"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ОбновитьРасширение(ПараметрыКоманды["extensionName"]); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем обновление базы данных расширения ..."); Попытка - МенеджерКонфигуратора.ПоказатьСписокВсехРасширенийКонфигурации(); + МенеджерСборки.ОбновитьРасширение(ИмяРасширения); + МенеджерСборки.ПоказатьСписокВсехРасширенийКонфигурации(); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Обновление базы данных расширения завершено."); - - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index cbe88986..e1e18273 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -30,6 +30,12 @@ "Путь к cf-файлу, пример: --src=./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-name", + "Строка подключения к хранилищу, если ранее было выполнено подключение к хранилищу"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", + "Пользователь хранилища"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", + "Пароль пользователя хранилища"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--merge-settings", "Файл с настройками объединения конфигураций (обязательный параметр)"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--enable-support", @@ -79,17 +85,22 @@ ОчищатьОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--ClearUnresolvedRefs"]; Принудительно = ПараметрыКоманды["--force"]; + СтрокаПодключенияХранилище = ПараметрыКоманды["--storage-name"]; + ПользовательХранилища = ПараметрыКоманды["--storage-user"]; + ПарольХранилища = ПараметрыКоманды["--storage-pwd"]; + Лог.Отладка("ПутьВходящий %1", ПутьВходящий); Лог.Отладка("ПутьФайлаНастройки %1", ПутьФайлаНастройки); Лог.Отладка("ПоставитьНаПоддержку %1", ПоставитьНаПоддержку); Лог.Отладка("НеСтавитьНаПоддержку %1", НеСтавитьНаПоддержку); Лог.Отладка("ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам %1", ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам); Лог.Отладка("Принудительно %1", Принудительно); + Лог.Отладка("Адрес хранилища %1", СтрокаПодключенияХранилище); МенеджерКонфигуратора = Новый МенеджерКонфигуратора; Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); @@ -107,8 +118,18 @@ ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = Ложь; КонецЕсли; - УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, - ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно); + Если НЕ ПустаяСтрока(СтрокаПодключенияХранилище) Тогда + СтруктураХранилища = Новый Структура(); + СтруктураХранилища.Вставить("СтрокаПодключенияХранилище", СтрокаПодключенияХранилище); + СтруктураХранилища.Вставить("ПользовательХранилища", ПользовательХранилища); + СтруктураХранилища.Вставить("ПарольХранилища", ПарольХранилища); + + УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, + ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно, СтруктураХранилища); + Иначе + УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, + ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно); + КонецЕсли; Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 26fed343..8861d444 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -55,7 +55,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.ОтключитьсяОтХранилища(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" new file mode 100644 index 00000000..ad5d1f94 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Отмена захвата объектов в хранилище 1С. +// +// TODO добавить фичи для проверки команды +// +// Служебный модуль с набором методов работы с командами приложения +// +// Структура модуля реализована в соответствии с рекомендациями +// oscript-app-template (C) EvilBeaver +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#Использовать logos + +Перем Лог; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Прикладной интерфейс + +Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт + + ТекстОписания = + " Отмена захвата объектов в хранилище 1С."; + + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-name", "Строка подключения к хранилищу"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", "Пользователь хранилища"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", "Пароль"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--objects", "Имя файла со списком объектов. + | Путь к файлу формата XML со списком объектов. + | Если опция используется, будет выполнена попытка отменить захват только для объектов, указанных в файле. + | Если опция не используется, захват будет отменен для всех объектов конфигурации. + | При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет. + | Подробнее о формате файла см в документации https://its.1c.ru/db/v8324doc#bookmark:adm:TI000000698 ."); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--force", "Игнорировать локальные изменения. + | Локально измененные объекты будут получены из хранилища, и внесенные изменения будут потеряны. + | Если опция не указана, то при наличии локально измененных объектов операция будет отменена и будет выдана ошибка."); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--do-not-update", "Не обновлять конфигурацию из хранилища. + | Значительно ускоряет процесс отмены захвата объектов хранилища. Может вызывать ошибки при использовании + | --objects со списком объектов"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры // ЗарегистрироватьКоманду + +// Выполняет логику команды +// +// Параметры: +// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений +// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Булево - Истина, если команда выполнена успешно +Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог = ДополнительныеПараметры.Лог; + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + +Попытка + + // сперва получим все изменения + Если НЕ ПараметрыКоманды["--do-not-update"] Тогда + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыКоманды["--storage-name"], + ПараметрыКоманды["--storage-user"], + ПараметрыКоманды["--storage-pwd"]); + КонецЕсли; + + МенеджерКонфигуратора.ОтпуститьОбъектыВХранилище( + ПараметрыКоманды["--storage-name"], + ПараметрыКоманды["--storage-user"], + ПараметрыКоманды["--storage-pwd"], + ПараметрыКоманды["--objects"], + ПараметрыКоманды["--force"]); + +Исключение + + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + +КонецПопытки; + + МенеджерКонфигуратора.Деструктор(); + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" index 7b742e5e..0a344810 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" @@ -52,14 +52,9 @@ Лог = ДополнительныеПараметры.Лог; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); ИгнорироватьНаличиеПодключеннойБД = ПараметрыКоманды["--BindAlreadyBindedUser"]; ЗаменитьКонфигурациюБД = Не ПараметрыКоманды["--NotReplaceCfg"]; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 7048e71a..ca040be9 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -60,7 +60,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" index cfd3db6c..9d16da5f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" @@ -2,6 +2,7 @@ #Использовать 1commands #Использовать tempfiles #Использовать json +#Использовать semver Перем Лог; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -20,7 +21,7 @@ | Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть | Кодировка: UTF-8"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--validation-result", - "Путь к файлу, в который будут записаны результаты проверки проекта. Необязательный аргумент."); + "Путь к файлу, в который будут записаны результаты проверки проекта. Необязательный аргумент, если выбрана выгрузка в junit или allure."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--prev-validation-result", "Путь к файлу с предыдущими результатами проверки проекта. Необязательный аргумент. | Если заполнен, то результат будет записан как разность новых ошибок и старых. @@ -32,19 +33,21 @@ | Если заполнен, то в отчетах аллюр будут ссылки на конкретные строки с ошибками. | Пример: --project-url https://github.com/1C-Company/GitConverter/tree/master/GitConverter/src "); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--EDTversion", - "Используемая версия EDT. Необязательный аргумент. + "Используемая версия EDT. Необязательный аргумент при указании --alwaysUseLastVersion. | Необходима, если зарегистрировано одновременно несколько версий. | Узнать доступные версии можно командой ""ring help"" | Пример: --EDTversion 1.9.1"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--alwaysUseLastVersion", + "Всегда использовать последнюю версию EDT. Необязательный аргумент."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--workspace-location", "Расположение рабочей области. Необязательный аргумент. - | Если не указан, то проверка выполнятся не будет. Актуально для создания отчетов по существующему файлу результатов."); + | Если не указан, то проверка выполняться не будет. Актуально для создания отчетов по существующему файлу результатов."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-list", "Список папок, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. - | Одновременно можно использовать только один агрумент: project-list или project-name-list"); + | Одновременно можно использовать только один аргумент: project-list или project-name-list"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-name-list", "Список имен проектов в текущей рабочей области, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. - | Одновременно можно использовать только один агрумент: project-list или project-name-list. + | Одновременно можно использовать только один аргумент: project-list или project-name-list. | | Примеры выполнения: | vanessa-runner edt-validate --project-list D:/project-1 D:/project-2 --workspace-location D:/workspace @@ -78,6 +81,11 @@ ПутьОтчетаВФорматеJUnitxml = ПараметрыКоманды["--junitpath"]; Если ПутьОтчетаВФорматеJUnitxml = Неопределено Тогда ПутьОтчетаВФорматеJUnitxml = ""; + Иначе + СообщениеОшибки = "Генерация отчетов тестирования JUnit невозможна, т.к. не существуют каталоги:"; + МассивПутей = Новый Массив; + МассивПутей.Добавить(ПутьОтчетаВФорматеJUnitxml); + ОбщиеМетоды.ОбеспечитьСуществованиеРодительскихКаталоговДляПутей(МассивПутей, СообщениеОшибки); КонецЕсли; ПутьОтчетаВФорматеAllure = ПараметрыКоманды["--allure-results"]; @@ -85,6 +93,8 @@ ПутьОтчетаВФорматеAllure = ""; ИначеЕсли ОчищатьКаталогОтчетов Тогда ФС.ОбеспечитьПустойКаталог(ПутьОтчетаВФорматеAllure); + Иначе + ФС.ОбеспечитьКаталог(ПутьОтчетаВФорматеAllure); КонецЕсли; ПутьОтчетаВФорматеAllure2 = ПараметрыКоманды["--allure-results2"]; @@ -92,6 +102,8 @@ ПутьОтчетаВФорматеAllure2 = ""; ИначеЕсли ОчищатьКаталогОтчетов Тогда ФС.ОбеспечитьПустойКаталог(ПутьОтчетаВФорматеAllure2); + Иначе + ФС.ОбеспечитьКаталог(ПутьОтчетаВФорматеAllure2); КонецЕсли; СохранятьОтчетВФайл = ЗначениеЗаполнено(ПутьОтчетаВФорматеJUnitxml) @@ -99,6 +111,7 @@ ИЛИ ЗначениеЗаполнено(ПутьОтчетаВФорматеAllure2); ВерсияEDT = ПараметрыКоманды["--EDTversion"]; + ВсегдаИспользоватьПоследнююВерсиюEDT = ПараметрыКоманды["--alwaysUseLastVersion"]; РабочаяОбласть = ПараметрыКоманды["--workspace-location"]; СписокПапокСПроектами = ПараметрыКоманды["--project-list"]; СписокИменПроектов = ПараметрыКоманды["--project-name-list"]; @@ -119,7 +132,8 @@ ИмяПредыдущегоФайлаРезультата = ПараметрыКоманды["--prev-validation-result"]; ДатаНачала = ТекущаяДата(); - Успешно = ВыполнитьПроверкуEDT(РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, ВерсияEDT); + Успешно = ВыполнитьПроверкуEDT(РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, + ВерсияEDT, ВсегдаИспользоватьПоследнююВерсиюEDT); Если СохранятьОтчетВФайл Тогда @@ -160,7 +174,8 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// -Функция ВыполнитьПроверкуEDT(Знач РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, ВерсияEDT) +Функция ВыполнитьПроверкуEDT(Знач РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, + Знач ВерсияEDT, ВсегдаИспользоватьПоследнююВерсиюEDT) Если Не ЗначениеЗаполнено(РабочаяОбласть) Тогда @@ -181,19 +196,33 @@ КонецЕсли; + // TODO убрать код преобразования в абсолютные пути после решения https://github.com/1C-Company/1c-edt-issues/issues/293 + РабочаяОбласть = ОбъединитьПути(ТекущийКаталог(), РабочаяОбласть); + ИмяФайлаРезультата = ОбъединитьПути(ТекущийКаталог(), ИмяФайлаРезультата); + + Если ПустаяСтрока(ВерсияEDT) И ВсегдаИспользоватьПоследнююВерсиюEDT Тогда + ВерсияEDT = НайтиМаксимальнуюУстановленнуюВерсиюEDT(); + КонецЕсли; + + Если НЕ ПустаяСтрока(ВерсияEDT) Тогда + ВерсияЕДТДляЗапуска = "@" + ВерсияEDT; + Иначе + ВерсияЕДТДляЗапуска = ""; + КонецЕсли; + Попытка // Для EDT критично, чтобы файла не существовало ОбщиеМетоды.УдалитьФайлЕслиОнСуществует(ИмяФайлаРезультата); Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring edt%1 workspace validate", ?(ПустаяСтрока(ВерсияEDT), "", "@" + ВерсияEDT))); + Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring edt%1 workspace validate", ВерсияЕДТДляЗапуска)); Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); Команда.ДобавитьПараметр("--workspace-location " + ОбщиеМетоды.ОбернутьПутьВКавычки(РабочаяОбласть)); Команда.ДобавитьПараметр("--file " + ОбщиеМетоды.ОбернутьПутьВКавычки(ИмяФайлаРезультата)); Если ЗначениеЗаполнено(СписокПапокСПроектами) Тогда - Команда.ДобавитьПараметр("--project-list " + ОбщиеМетоды.ОбернутьПутьВКавычки(СписокПапокСПроектами)); + Команда.ДобавитьПараметр("--project-list " + СписокПапокСПроектами); КонецЕсли; Если ЗначениеЗаполнено(СписокИменПроектов) Тогда @@ -213,8 +242,69 @@ КонецПопытки; - Возврат КодВозврата = 0; + Результат = (КодВозврата = 0); + Если Не Результат Тогда + Лог.Ошибка("Возникла ошибка: код возврата %1, + |%2", КодВозврата, Команда.ПолучитьВывод()); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция НайтиМаксимальнуюУстановленнуюВерсиюEDT() + Команда = Новый Команда; + Команда.УстановитьСтрокуЗапуска("ring edt platform-versions"); + Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); + + Лог.Отладка("Поиск максимальной установленной версии EDT"); + + КодВозврата = Команда.Исполнить(); + ЛогКоманды = Команда.ПолучитьВывод(); + Лог.Отладка("ЛогКоманды %1", ЛогКоманды); + Если КодВозврата = 0 Тогда + Возврат ""; + КонецЕсли; + + МассивВерсий = НайтиВерсииЕДТПоЛогу(ЛогКоманды); + Если Не ЗначениеЗаполнено(МассивВерсий) Тогда + ВызватьИсключение "Не найдено ни одной установленной версии 1C:EDT"; + КонецЕсли; + + Возврат Версии.МаксимальнаяИзМассива(МассивВерсий).ВСтроку(); +КонецФункции + +Функция НайтиВерсииЕДТПоЛогу(ЛогКоманды) + Результат = Новый Массив; + + РВ = Новый РегулярноеВыражение("""edt""|((\d+\.\d+\.\d+)[,\.])"); + Совпадения = РВ.НайтиСовпадения(ЛогКоманды); + + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадения.Количество() %1", Совпадения.Количество()); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадения %1", Совпадения); + Если Совпадения.Количество() > 2 Тогда + Лог.Отладка("Совпадения[0].Значение %1", Совпадения[0].Значение); + Если Совпадения[0].Значение = """edt""" Тогда + Для кк = 1 По Совпадения.Количество() - 1 Цикл + Совпадение = Совпадения[кк]; + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Значение %1", Совпадение.Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы.Количество() %1", Совпадение.Группы.Количество()); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[0].Значение %1", Совпадение.Группы[0].Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[1].Значение %1", Совпадение.Группы[1].Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[2].Значение %1", Совпадение.Группы[2].Значение); + Если Совпадение.Группы.Количество() = 3 Тогда + ВерсияСтрокой = Совпадение.Группы[2].Значение; + Результат.Добавить(Версии.ВерсияИзСтроки(ВерсияСтрокой)); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Для Каждого Версия Из Результат Цикл + Лог.Отладка("Нашли версию ЕДТ %1", Версия.ВСтроку()); + КонецЦикла; + + Возврат Результат; КонецФункции Функция ОбработатьЛогОшибок(ДатаНачала, ПутьКФайлуЛогаОшибок, ИмяФайлаИсключенийОшибок, ИмяПредыдущегоФайлаРезультата) @@ -226,6 +316,7 @@ РезультатТестирования.Вставить("КоличествоПроверок", 0); РезультатТестирования.Вставить("КоличествоПропущено", 0); РезультатТестирования.Вставить("КоличествоУпало", 0); + РезультатТестирования.Вставить("РазделитьВремя", Истина); Файл = Новый Файл(ПутьКФайлуЛогаОшибок); Если Не Файл.Существует() Тогда diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" index 5c792e15..f438c077 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" @@ -1,6 +1,5 @@ #Использовать fs -Перем Конфигуратор; Перем Лог; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -21,7 +20,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--testsuitename", "Указать имя тестового набора в отчете JUnit для раздельной проверки в различных режимах"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--groupbymetadata", - "Группировать проверки в по метаданным конфигурации"); + "Группировать проверки по метаданным конфигурации"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--exception-file", "Путь файла с указанием пропускаемых исключений @@ -143,12 +142,12 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Лог.Информация("Начало проверки проекта"); ДатаНачала = ТекущаяУниверсальнаяДата(); // UTC Попытка - ОшибокНет = МенеджерКонфигуратора.ВыполнитьСинтаксическийКонтроль( + Успешно = МенеджерКонфигуратора.ВыполнитьСинтаксическийКонтроль( КоллекцияПроверок, ЛогПроверкиИзКонфигуратора, ПараметрыКоманды["--storage-name"], @@ -165,21 +164,24 @@ МенеджерКонфигуратора.Деструктор(); ПараметрыОбработатьЛогОШибок = Новый Структура; - ПараметрыОбработатьЛогОШибок.вставить("ДатаНачала", ДатаНачала); - //ПараметрыОбработатьЛогОШибок.вставить("ДатаОкончания", ДатаОкончания); - ПараметрыОбработатьЛогОШибок.вставить("ЛогПроверкиИзКонфигуратора", ЛогПроверкиИзКонфигуратора); - ПараметрыОбработатьЛогОШибок.вставить("ГруппироватьПоМетаданным", ГруппироватьПоМетаданным); - ПараметрыОбработатьЛогОШибок.вставить("ИмяФайлаИсключенийОшибок", ИмяФайлаИсключенийОшибок); - ПараметрыОбработатьЛогОШибок.вставить("НеПоказыватьИсключения", НеПоказыватьИсключения); + ПараметрыОбработатьЛогОШибок.Вставить("ДатаНачала", ДатаНачала); + //ПараметрыОбработатьЛогОШибок.Вставить("ДатаОкончания", ДатаОкончания); + ПараметрыОбработатьЛогОШибок.Вставить("ЛогПроверкиИзКонфигуратора", ЛогПроверкиИзКонфигуратора); + ПараметрыОбработатьЛогОШибок.Вставить("ГруппироватьПоМетаданным", ГруппироватьПоМетаданным); + ПараметрыОбработатьЛогОШибок.Вставить("ИмяФайлаИсключенийОшибок", ИмяФайлаИсключенийОшибок); + ПараметрыОбработатьЛогОШибок.Вставить("НеПоказыватьИсключения", НеПоказыватьИсключения); РезультатТестирования = ОбработатьЛогОшибок(ПараметрыОбработатьЛогОШибок); Если РезультатТестирования.КоличествоУпало = 0 Тогда - ОшибокНет = Истина; + Успешно = Истина; + Лог.Информация("Результат синтакс-контроля: Ошибок не обнаружено"); + Иначе + Лог.Информация("Замечания синтаксической проверки: + |%1", СтрСоединить(ОставшиесяОшибки(РезультатТестирования), Символы.ПС)); КонецЕсли; Если СохранятьОтчетВФайл Тогда - Лог.Отладка("ЛогПроверкиИзКонфигуратора %1", ЛогПроверкиИзКонфигуратора); Если НРег(СокрЛП(ЛогПроверкиИзКонфигуратора)) = "ошибок не обнаружено" Тогда ЛогПроверкиИзКонфигуратора = ""; КонецЕсли; @@ -212,7 +214,7 @@ РезультатыКоманд = МенеджерКомандПриложения.РезультатыКоманд(); - Возврат ?(ОшибокНет, РезультатыКоманд.Успех, РезультатыКоманд.ОшибкаВремениВыполнения); + Возврат ?(Успешно, РезультатыКоманд.Успех, РезультатыКоманд.ОшибкаВремениВыполнения); КонецФункции @@ -230,26 +232,29 @@ РезультатТестирования.Вставить("КоличествоУпало", 0); РезультатТестирования.Вставить("РазделитьВремя", Параметры.ГруппироватьПоМетаданным); - МассивСтрокИсключений = МассивСтрокИсключений(); - ПропускаемыеОшибки = СодержимоеФайлаИсключенийОшибок(Параметры.ИмяФайлаИсключенийОшибок); ОбработанныйЛог = СтрЗаменить(Параметры.ЛогПроверкиИзКонфигуратора, Символы.ВК + Символы.Таб, Символы.Таб); ОбработанныйЛог = СтрЗаменить(ОбработанныйЛог, Символы.ПС + Символы.Таб, Символы.Таб); - Лог.Отладка("ОбработанныйЛог %1", ОбработанныйЛог); + ОставшиесяОшибки = ИзбавитьсяОтИсключений(ОбработанныйЛог, ТиповыеИсключения()); + ОбработанныйЛог = СтрСоединить(ОставшиесяОшибки, Символы.ПС); + ИмяТестСценарияПредыдущаяСтрока = "Синтаксическая проверка конфигурации"; - ОставшиесяОшибки = ИзбавитьсяОтИсключений(ОбработанныйЛог, МассивСтрокИсключений); - ОбработанныйЛог = СтрСоединить(ОставшиесяОшибки, Символы.ПС); + ПользовательскиеИсключения = СодержимоеФайлаИсключенийОшибок(Параметры.ИмяФайлаИсключенийОшибок); Если НЕ Параметры.ГруппироватьПоМетаданным Тогда Лог.Отладка("Ветка НЕ ГруппироватьПоМетаданным"); - Лог.Отладка("ОставшиесяОшибки %1", ОбработанныйЛог); - Если Не ПустаяСтрока(ОбработанныйЛог) Тогда + Если ЗначениеЗаполнено(ОставшиесяОшибки) Тогда + + Для Каждого ТекСтрока Из ОставшиесяОшибки Цикл - ОписаниеОшибкиТеста = ШаблонОписанияОшибки("Синтаксическая проверка конфигурации", ОбработанныйЛог); - ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибкиТеста); + ОписаниеОшибки = ШаблонОписанияОшибки(ИмяТестСценарияПредыдущаяСтрока, ТекСтрока); + ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПользовательскиеИсключения, + ТекСтрока, Параметры.НеПоказыватьИсключения); + КонецЦикла; КонецЕсли; + Возврат РезультатТестирования; КонецЕсли; @@ -259,35 +264,62 @@ Для Каждого ТекСтрока Из ОставшиесяОшибки Цикл ОписаниеОшибки = ПолучитьОписаниеОшибки(ТекСтрока, ИмяТестСценарияПредыдущаяСтрока); - ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПропускаемыеОшибки, ТекСтрока, Параметры.НеПоказыватьИсключения); + ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПользовательскиеИсключения, + ТекСтрока, Параметры.НеПоказыватьИсключения); КонецЦикла; + Возврат РезультатТестирования; КонецФункции +Функция ОставшиесяОшибки(РезультатТестирования) + Если Лог.Уровень() = УровниЛога.Отладка Тогда + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, РезультатТестирования); + СтрокаJson = ЗаписьJSON.Закрыть(); + Лог.Отладка("РезультатТестирования: %1", СтрокаJson); + КонецЕсли; + + Результат = Новый Массив; + Для каждого КлючЗначение Из РезультатТестирования["Ошибки"] Цикл + Ошибка = КлючЗначение.Значение.Получить("Ошибка"); + Если Не ЗначениеЗаполнено(Ошибка) Тогда + Продолжить; + КонецЕсли; + Для каждого ОписаниеОшибки Из Ошибка Цикл + Если ОписаниеОшибки["ТипОшибки"] = "Ошибка" Тогда + Результат.Добавить(ОписаниеОшибки["ИсходныйТекстОшибки"]); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; +КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////// // Определяем строки для исключения из ошибок // См. стандарт "Обработчики событий модуля формы, подключаемые из кода" // https://its.1c.ru/db/v8std#content:-2145783155:hdoc -Функция МассивСтрокИсключений() - МассивСтрокИсключений = Новый Массив(); - МассивСтрокИсключений.Добавить(Нрег("Не обнаружено ссылок на процедуру: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("Не обнаружено ссылок на функцию: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("Пустой обработчик: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("No links to function found: ""Attachable_")); - МассивСтрокИсключений.Добавить(Нрег("No links to procedure found: ""Attachable_")); - МассивСтрокИсключений.Добавить(Нрег("Empty handler: ""Attachable_")); +Функция ТиповыеИсключения() + Результат = Новый Массив(); + // TODO частичный дубль исключений с КомандаПроверкаПроектаEDT + Результат.Добавить(Нрег("Не обнаружено ссылок на процедуру: ""Подключаемый_")); + Результат.Добавить(Нрег("Не обнаружено ссылок на функцию: ""Подключаемый_")); + Результат.Добавить(Нрег("Пустой обработчик: ""Подключаемый_")); + Результат.Добавить(Нрег("No links to function found: ""Attachable_")); + Результат.Добавить(Нрег("No links to procedure found: ""Attachable_")); + Результат.Добавить(Нрег("Empty handler: ""Attachable_")); // Исключаем из ошибок статус усшешного завершения тестирования - МассивСтрокИсключений.Добавить(Нрег("Ошибок не обнаружено")); - МассивСтрокИсключений.Добавить(Нрег("No syntax errors found")); - МассивСтрокИсключений.Добавить(Нрег("No errors found")); + Результат.Добавить(Нрег("Ошибок не обнаружено")); + Результат.Добавить(Нрег("No syntax errors found")); + Результат.Добавить(Нрег("No errors found")); - Возврат МассивСтрокИсключений; + Возврат Результат; КонецФункции -Функция ИзбавитьсяОтИсключений(Знач ОбработанныйЛог, МассивСтрокИсключений) +Функция ИзбавитьсяОтИсключений(Знач ОбработанныйЛог, Исключения) ОставшиесяОшибки = Новый Массив; Если ПустаяСтрока(ОбработанныйЛог) Тогда @@ -306,10 +338,12 @@ Ит = Ит + 1; КонецЕсли; КонецЕсли; + //Лог.Отладка("Строка для проверки исключений: %1", ТекСтрока); - Если ИсключитьСтроку(ТекСтрока, МассивСтрокИсключений) Тогда + Если ИсключитьСтроку(ТекСтрока, Исключения) Тогда Продолжить; КонецЕсли; + //Лог.Отладка("Добавляю замечание для строки: %1", ТекСтрока); ОставшиесяОшибки.Добавить(ТекСтрока); КонецЦикла; @@ -355,17 +389,18 @@ КонецФункции -Функция ИсключитьСтроку(Знач ПроверяемаяСтрока, Знач МассивСтрокИсключений) +Функция ИсключитьСтроку(Знач ПроверяемаяСтрока, Знач Исключения) Если НЕ ЗначениеЗаполнено(ПроверяемаяСтрока) Тогда - Возврат ИСТИНА; + Возврат Истина; КонецЕсли; - Для Каждого СтрИсключения Из МассивСтрокИсключений Цикл + НормализованныйТекстОшибки = НормализованныйТекстОшибки(ПроверяемаяСтрока); + Для Каждого СтрИсключения Из Исключения Цикл - Если СтрНайти(НормализованныйТекстОшибки(ПроверяемаяСтрока), СтрИсключения) > 0 Тогда + Если СтрНайти(НормализованныйТекстОшибки, СтрИсключения) > 0 Тогда Возврат Истина; @@ -379,7 +414,11 @@ Функция ПолучитьОписаниеОшибки(Знач СтрокаЛога, ИмяПоУмолчанию) + ИсходныйТекстОшибки = СтрокаЛога; + Результат = ШаблонОписанияОшибки(ИмяПоУмолчанию); + Результат.ИсходныйТекстОшибки = ИсходныйТекстОшибки; + ЧастиСтрокиЛога = СтрРазделить(СокрЛП(СтрокаЛога), " ", Ложь); Если ЧастиСтрокиЛога.Количество() Тогда @@ -423,8 +462,8 @@ Функция ШаблонОписанияОшибки(ИмяПоУмолчанию, ТекстОшибки = "", НомерСтроки = 0, ТипОшибки = "Ошибка") - Возврат Новый Структура("ТекстОшибки, ИмяГруппы, НомерСтроки, ТипОшибки", ТекстОшибки, ИмяПоУмолчанию, - НомерСтроки, ТипОшибки); + Возврат Новый Структура("ТекстОшибки, ИмяГруппы, НомерСтроки, ТипОшибки, ИсходныйТекстОшибки", + ТекстОшибки, ИмяПоУмолчанию, НомерСтроки, ТипОшибки, ТекстОшибки); КонецФункции @@ -435,9 +474,10 @@ Возврат Ложь; КонецЕсли; + НормализованныйТекстОшибки = НормализованныйТекстОшибки(СтрокаСОшибкой); Для Каждого ТекИсключение Из ПропускаемыеОшибки Цикл - Если СтрНайти(НормализованныйТекстОшибки(СтрокаСОшибкой), ТекИсключение) > 0 Тогда + Если СтрНайти(НормализованныйТекстОшибки, ТекИсключение) > 0 Тогда Возврат Истина; @@ -450,7 +490,7 @@ Функция НормализованныйТекстОшибки(Знач ТекстОшибки) - Возврат СокрЛП(НРег(ТекстОшибки)); + Возврат НРег(СокрЛП(ТекстОшибки)); КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\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.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\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.os" index 47b57b05..808c95db 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\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.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\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.os" @@ -7,12 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,8 +33,12 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг выгрузки из текущей базы, краткая форма от --current"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--userenames", "Использовать файл переименований renames"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-v", "Путь к файлу версии, краткая от --versions"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--versions", "Путь к файлу версии или -v"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-v", + "Путь к файлу версии (ConfigDumpInfo.xml или его копия), краткая от --versions"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--versions", + "Путь к файлу версии (ConfigDumpInfo.xml или его копия) или -v"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -43,62 +48,91 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-i", "--in")); ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; ФайлВерсии = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-v", "--versions")); - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; + ИспользоватьПереименования = ПараметрыКоманды["--userenames"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + Если ИспользоватьТекущуюИБ Тогда + РазобратьНаИсходникиТекущуюКонфигурацию(ПараметрыКоманды, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + Иначе + РазобратьНаИсходникиФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + КонецЕсли; - Попытка - ИзТекущейКонфигурации = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - ИзТекущейКонфигурации = ?(ИзТекущейКонфигурации, ИзТекущейКонфигурации, - НЕ (ЗначениеЗаполнено(ПутьВходящий) И Новый Файл(ПутьВходящий).Существует())); - ТолькоИзмененные = ?(ИспользоватьПереименования, Ложь, Истина); - Если ИзТекущейКонфигурации Тогда + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - Лог.Информация("Запускаю выгрузку конфигурации в исходники"); +КонецФункции // ВыполнитьКоманду - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); +#КонецОбласти - МенеджерКонфигуратора.РазобратьНаИсходникиТекущуюКонфигурацию(ПутьИсходящий, ФайлВерсии, - ТолькоИзмененные, ИспользоватьПереименования); +#Область СлужебныеПроцедурыИФункции - Иначе +Процедура РазобратьНаИсходникиТекущуюКонфигурацию(ПараметрыКоманды, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования) + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ТолькоИзмененные = ?(ИспользоватьПереименования, Ложь, Истина); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F" +КаталогВременнойИБ; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, , , - ВерсияПлатформы, ПараметрыКоманды["--uccode"], - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - МенеджерКонфигуратора.УправлениеКонфигуратором().СоздатьФайловуюБазу(КаталогВременнойИБ); + Лог.Информация("Запускаем разборку конфигурации текущей ИБ на исходники..."); + Попытка + МенеджерСборки.РазобратьНаИсходникиТекущуюКонфигурацию(ПутьИсходящий, ФайлВерсии, + ТолькоИзмененные, ИспользоватьПереименования); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Разборка конфигурации текущей ИБ на исходники завершена."); - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВИсходники(ПутьВходящий, ПутьИсходящий, ФайлВерсии, - ИспользоватьПереименования); - ВременныеФайлы.УдалитьФайл(КаталогВременнойИБ); + МенеджерСборки.Деструктор(); + +КонецПроцедуры - КонецЕсли; +Процедура РазобратьНаИсходникиФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования) + + Если НЕ ФС.ФайлСуществует(ПутьВходящий) Тогда + ВызватьИсключение СтрШаблон("Файл cf %1 не найден", ПутьВходящий); + КонецЕсли; + + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + Лог.Информация("Запускаем разборку cf-файла на исходники..."); + Попытка + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.ВыгрузитьКонфигурациюВИсходники(ПутьВходящий, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Разборка cf-файла на исходники завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index cd5355d5..a3c8c182 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,12 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -24,6 +25,9 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, под которым оно зарегистрировано в списке расширений"); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "outputPath", "Путь к исходникам расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -32,54 +36,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - ПутьИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["outputPath"]); - - РазобратьНаИсходникиРасширение( - ПараметрыКоманды["extensionName"], ПутьИсходников, - ДанныеПодключения, - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--uccode"], ПараметрыКоманды - ); - - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции + ИмяРасширения = ПараметрыКоманды["extensionName"]; + КаталогВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["outputPath"]); -Процедура РазобратьНаИсходникиРасширение(Знач ИмяРасширения, Знач Каталог, - Знач ДанныеПодключения, - Знач ВерсияПлатформы, Знач КлючРазрешенияЗапуска, - Знач ПараметрыКоманды) - - Лог.Информация("Выполняю разборку расширения %1 на исходники в каталог %2", ИмяРасширения, Каталог); - Ожидаем.Что(ДанныеПодключения.СтрокаПодключения, "Ожидаем, что строка подключения к ИБ задана, а это не так").Заполнено(); - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.Инициализация(ДанныеПодключения.СтрокаПодключения, - ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль, - ВерсияПлатформы, КлючРазрешенияЗапуска, - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - - ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); - ПараметрыЗапуска.Добавить("/Visible"); - ПараметрыЗапуска.Добавить("/DumpConfigToFiles """ + Каталог + """"); - ПараметрыЗапуска.Добавить("-Extension """ + ИмяРасширения + """"); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем разборку расширения на исходники..."); Попытка - Конфигуратор.ВыполнитьКоманду(ПараметрыЗапуска); + МенеджерСборки.РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Разборка расширения на исходники завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Лог.Информация("Разборка расширения завершена"); + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции -КонецПроцедуры +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index 6b86092e..fd944d02 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,13 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать v8runner -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -26,6 +26,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, под которым оно будет зарегистрировано в списке расширений"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--updatedb", "Признак обновления расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -34,35 +36,38 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + КаталогИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["inputPath"]); + ИмяРасширения = ПараметрыКоманды["extensionName"]; + ОбновлятьИБ = ПараметрыКоманды["--updatedb"]; + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Собираем расширение %1 из исходников...", ИмяРасширения); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.СобратьИзИсходниковРасширение( - ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["inputPath"]), - ПараметрыКоманды["extensionName"], ПараметрыКоманды["--updatedb"]); + МенеджерСборки.СобратьИзИсходниковРасширение(КаталогИсходников, ИмяРасширения, ОбновлятьИБ); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; + Лог.Информация("Сборка расширения из исходников завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; КонецФункции // ВыполнитьКоманду + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" index be52f6ca..200b7514 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" @@ -11,14 +11,16 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера +Перем МенеджерВерсий; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем ДанныеПодключения; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,7 +34,10 @@ "Путь к каталогу с исходниками, пример: --src=./cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к исходникам --src', пример: -s ./cf"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", "Путь к файлу cf (*.cf), --out=./1Cv8.cf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", + "Путь к файлу cf (*.cf), --out=./1Cv8.cf. + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + |Пример: --out=1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-o", "Краткая команда 'Путь к файлу cf --out', пример: -o ./1Cv8.cf"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); @@ -42,6 +47,8 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--noupdate", "Флаг обновления СonfigDumpInfo.xml"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки для установки в последний разряд номера версии"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -51,23 +58,22 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); - ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды,"-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; + ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-o", "--out")); СписокФайлов = ПараметрыКоманды["--list"]; - ОбновлятьДамп = НЕ ПараметрыКоманды["--noupdate"]; + ОбновлятьФайлВерсий = НЕ ПараметрыКоманды["--noupdate"]; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); НомерСборки = ПараметрыКоманды["--build-number"]; Если ЗначениеЗаполнено(НомерСборки) Тогда @@ -75,46 +81,74 @@ ИзменитьНомерСборкиВИсходникахКонфигурации(ПутьВходящий, НомерСборки); КонецЕсли; + + Если ИспользоватьТекущуюИБ Тогда + СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, ПутьВходящий, СписокФайлов, ОбновлятьФайлВерсий); + Иначе + СобратьИзИсходниковФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ОбновлятьФайлВерсий); + КонецЕсли; + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; +#КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, + ПутьВходящий, СписокФайлов, ОбновлятьФайлВерсий) + + Лог.Информация("Запускаем сборку конфигурации из исходников в текущую ИБ..."); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Попытка - ВТекущуюКонфигурацию = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - Если ТипЗнч(ВТекущуюКонфигурацию) = Тип("Булево") И ВТекущуюКонфигурацию Тогда - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию( - ПутьВходящий, - СписокФайлов, Истина, ОбновлятьДамп); - Иначе - СобратьИзИсходниковФайлКонфигурации(ПутьВходящий, ПутьИсходящий, ДанныеПодключения, ВерсияПлатформы, - ОбновлятьДамп, ПараметрыКоманды); - КонецЕсли; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию( + ПутьВходящий, СписокФайлов, Истина, ОбновлятьФайлВерсий); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции + Лог.Информация("Сборка конфигурации из исходников в текущую ИБ завершена."); + +КонецПроцедуры -Процедура СобратьИзИсходниковФайлКонфигурации(ПутьВходящий, ПутьИсходящий, ДанныеПодключения, - ВерсияПлатформы, ОбновлятьФайлВерсий, Знач ПараметрыКоманды) +Процедура СобратьИзИсходниковФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ОбновлятьФайлВерсий) - КаталогВременнойБазы = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F""" + КаталогВременнойБазы + """"; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, "", "", ВерсияПлатформы, , - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); + Лог.Информация("Запускаем сборку конфигурации из исходников в файл cf..."); - Конфигуратор.СоздатьФайловуюБазу(КаталогВременнойБазы); + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(ПутьВходящий, , , ОбновлятьФайлВерсий); - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВФайл(ПутьИсходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - ВременныеФайлы.УдалитьФайл(КаталогВременнойБазы); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + ПутьИсходящийСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(ПутьВходящий, ПутьИсходящий); + Попытка + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьВходящий, , , ОбновлятьФайлВерсий); + МенеджерСборки.ВыгрузитьКонфигурациюВФайл(ПутьИсходящийСВерсией); + + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + + МенеджерСборки.Деструктор(); + + Лог.Информация("Сборка конфигурации из исходников в файл cf завершена."); КонецПроцедуры @@ -122,11 +156,12 @@ Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); - МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); Для каждого КлючЗначение Из СтарыеВерсии Цикл Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" index ac7f8142..1c66d506 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" @@ -11,14 +11,16 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера +Перем МенеджерВерсий; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем ИмяРасширения; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,16 +34,22 @@ "Путь к каталогу с исходниками, пример: --src=./cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к исходникам --src', пример: -s ./cfe"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", "Путь к файлу cf (*.cf), --out=./Extension.cfe"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", + "Путь к файлу cf (*.cf), --out=./Extension.cfe + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии расширения + |Пример: --out=1Cv8_$version.cfe выгрузит файл вида 1Cv8_1.2.3.4.cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-o", "Краткая команда 'Путь к файлу cf --out', пример: -o ./Extension.cfe"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг загрузки в указанную базу, краткая форма от --current"); + // TODO зачем объявлен параметр "--noupdate", который в коде не используется Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--noupdate", "Флаг обновления СonfigDumpInfo.xml"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки для установки в последний разряд номера версии"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -51,23 +59,20 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды,"-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - ОбновлятьДамп = НЕ ПараметрыКоманды["--noupdate"]; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); НомерСборки = ПараметрыКоманды["--build-number"]; Если ЗначениеЗаполнено(НомерСборки) Тогда @@ -75,48 +80,88 @@ ИзменитьНомерСборкиВИсходникахКонфигурации(ПутьВходящий, НомерСборки); КонецЕсли; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + ПутьИсходящийСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(ПутьВходящий, ПутьИсходящий); ИмяРасширения = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); + Если ИспользоватьТекущуюИБ Тогда + СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, ПутьВходящий, ПутьИсходящийСВерсией); + Иначе + СобратьИзИсходниковВоВременнойБазе(ПараметрыКоманды, ПутьВходящий, ПутьИсходящийСВерсией); + КонецЕсли; + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий) + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Запускаем сборку расширения из исходников в текущую ИБ..."); + + Попытка + + МенеджерСборки.СобратьИзИсходниковРасширение(ПутьВходящий, ИмяРасширения, Ложь); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + МенеджерСборки.Деструктор(); + + Лог.Информация("Сборка расширения из исходников в текущую ИБ завершена."); + +КонецПроцедуры + +Процедура СобратьИзИсходниковВоВременнойБазе(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий) + + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + Лог.Информация("Запускаем сборку расширения из исходников в файл cfe..."); + Попытка - ВТекущуюКонфигурацию = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - Если ТипЗнч(ВТекущуюКонфигурацию) = Тип("Булево") И ВТекущуюКонфигурацию Тогда - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - Иначе - КаталогВременнойБазы = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F""" + КаталогВременнойБазы + """"; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, "", "", ВерсияПлатформы, , - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - - Конфигуратор.СоздатьФайловуюБазу(КаталогВременнойБазы); - КонецЕсли; - - МенеджерКонфигуратора.СобратьИзИсходниковРасширение( - ПутьВходящий, - ИмяРасширения, - Ложь); - МенеджерКонфигуратора.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.СобратьИзИсходниковРасширение(ПутьВходящий, ИмяРасширения, Ложь); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - МенеджерКонфигуратора.Деструктор(); + Лог.Информация("Сборка расширения из исходников в файл cfe завершена."); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции +КонецПроцедуры Процедура ИзменитьНомерСборкиВИсходникахКонфигурации(Знач ПутьИсходников, Знач НомерСборки) Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); - МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); Для каждого КлючЗначение Из СтарыеВерсии Цикл Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index e297ae0e..959c3e5d 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -67,14 +67,9 @@ "Не заполнены роли пользователя. Они должны быть заданы через параметр ком.строки --storage-role").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СоздатьПользователяХранилища( diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" index cc9b0109..b7c05dc4 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" @@ -13,6 +13,14 @@ #Использовать v8runner Перем Лог; +Перем МенеджерКонфигуратора; +Перем МенеджерВерсий; + +// Параметры команды +Перем ИмяФайлаПоставки; +Перем КаталогИсходников; +Перем НомерСборки; +Перем ЗагружатьВТекущую; /////////////////////////////////////////////////////////////////////////////////////////////////// // Прикладной интерфейс @@ -26,7 +34,14 @@ ТекстОписания); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfpath", - "Путь к результату - выгружаемому файлу поставки конфигурации (*.cf)"); + "Путь к результату - выгружаемому файлу поставки конфигурации (*.cf) + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + |Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Каталог с исходниками конфигурации"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг загрузки в указанную базу, краткая форма от --current"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -44,13 +59,22 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ИмяФайлаПоставки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfpath"]); + КаталогИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + НомерСборки = ПараметрыКоманды["--build-number"]; + ЗагружатьВТекущую = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С; + + Если ЗагружатьВТекущую Или ПустаяСтрока(КаталогИсходников) Тогда + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Иначе + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); + КонецЕсли; Попытка - МенеджерКонфигуратора.СоздатьФайлПоставки( - ПараметрыКоманды["cfpath"] - ); + СоздатьФайлПоставки(); Исключение МенеджерКонфигуратора.Деструктор(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -59,4 +83,39 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +Процедура СоздатьФайлПоставки() + + Если ЗначениеЗаполнено(КаталогИсходников) Тогда + СобратьИзИсходниковТекущуюКонфигурацию(); + КонецЕсли; + + ИмяФайлаПоставкиСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(КаталогИсходников, ИмяФайлаПоставки); + МенеджерКонфигуратора.СоздатьФайлПоставки(ИмяФайлаПоставкиСВерсией); + +КонецПроцедуры + +Процедура СобратьИзИсходниковТекущуюКонфигурацию() + + Если ЗначениеЗаполнено(НомерСборки) Тогда + ИзменитьНомерСборкиВИсходникахКонфигурации(); + КонецЕсли; + + МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(КаталогИсходников, "", Ложь, Ложь); + МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь); + +КонецПроцедуры + +Процедура ИзменитьНомерСборкиВИсходникахКонфигурации() + + Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); + + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(КаталогИсходников, НомерСборки); + + Для каждого КлючЗначение Из СтарыеВерсии Цикл + Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); + КонецЦикла; + +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index f793d1ce..22e15689 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -33,7 +33,7 @@ Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // @@ -46,15 +46,9 @@ Лог = ДополнительныеПараметры.Лог; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - //Исключаем ситуацию с Неопределено или еще с Булево. - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = ""; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СоздатьХранилище( @@ -68,4 +62,4 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" index 22539eb2..09b819df 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" @@ -37,7 +37,7 @@ Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // @@ -59,14 +59,9 @@ Ожидаем.Что(ПарольПользователя, " не задан пароль создаваемого пользователя хранилища").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СохранитьВерсиюХранилищаВФайл( @@ -80,4 +75,4 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" new file mode 100644 index 00000000..55671832 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Формирование отчета о сравнении основной конфигурации с файлом или двух файлов конфигураций +// +// Служебный модуль с набором методов работы с командами приложения +// +// TODO добавить тесты\фичи +// +// Структура модуля реализована в соответствии с рекомендациями oscript-app-template (C) EvilBeaver +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#Использовать logos +#Использовать v8runner + +Перем Лог; +Перем МенеджерКонфигуратора; + + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Прикладной интерфейс + +Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт + + ТекстОписания = + " Формирование файла отчета сравнения конфигураций. + |"; + + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--secondFile", + "Путь к файлу cf/cfe, с которым идёт сравнение конфигурации. Обязательный параметр."); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportFile", + "Путь к файлу, где должен быть сохранён отчет. Обязательный параметр."); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportType", + "Тип отчёта о сравнении: по-умолчанию Full (полный) или указать Brief (краткий)"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportFormat", + "Формат файла отчета: по-умолчанию txt или указать mxl"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--extensionName", + "Имя расширения, если надо сравнить его вместо основной конфигурации"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--firstFile", + "Путь к первому файлу cf/cfe: если не указать - используется основная конфигурация (расширение)"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры // ЗарегистрироватьКоманду + +// Выполняет логику команды +// +// Параметры: +// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений +// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// +Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Попытка + Лог = ДополнительныеПараметры.Лог; + Исключение + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + КонецПопытки; + + Лог.Информация("Начинаю сравнение конфигураций"); + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--secondFile"]); + ПутьКОтчету = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--reportFile"]); + ТипОтчета = ПараметрыКоманды["--reportType"]; + ФорматОтчета = ПараметрыКоманды["--reportFormat"]; + ИмяРасширения = ПараметрыКоманды["--extensionName"]; + ПутьКФайлуПервойКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--firstFile"]); + + Лог.Отладка("ПутьКФайлуКонфигурации %1", ПутьКФайлуКонфигурации); + Лог.Отладка("ТипОтчета %1", ТипОтчета); + Лог.Отладка("ФорматОтчета %1", ФорматОтчета); + Лог.Отладка("ПутьКОтчету %1", ПутьКОтчету); + Лог.Отладка("ИмяРасширения %1", ИмяРасширения); + Лог.Отладка("ПутьКФайлуПервойКонфигурации %1", ПутьКФайлуПервойКонфигурации); + + Если Не ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда + ВызватьИсключение "Необходимо задать путь к файлу cf/cfe, с которым идёт сравнение, + |Параметр --secondFile является обязательным."; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПутьКОтчету) Тогда + ВызватьИсключение "Необходимо задать путь к файлу сохранения отчета, + |Параметр --reportFile является обязательным."; + КонецЕсли; + + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + + Попытка + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); + + Если ЗначениеЗаполнено(ТипОтчета) И НРег(ТипОтчета) <> "full" Тогда + ТипОтчета = ТипыОтчетовОСравнении.Краткий; + Иначе + ТипОтчета = ТипыОтчетовОСравнении.Полный; + КонецЕсли; + + Если ЗначениеЗаполнено(ФорматОтчета) И НРег(ФорматОтчета) <> "txt" Тогда + ФорматОтчета = "mxl"; + Иначе + ФорматОтчета = "txt"; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ПутьКФайлуПервойКонфигурации) Тогда + ПутьКФайлуПервойКонфигурации = Неопределено; + КонецЕсли; + + УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом(ПутьКФайлуКонфигурации, ПутьКОтчету, + ТипОтчета, ФорматОтчета, ИмяРасширения, ПутьКФайлуПервойКонфигурации); + + Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); + + Лог.Информация("Успешно завершено сравнение конфигураций"); + + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + МенеджерКонфигуратора.Деструктор(); + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" index b33de483..edc744dd 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" @@ -123,7 +123,7 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); НастройкиТестКлиента = Новый Структура; НастройкиТестКлиента.Вставить("Подключение", ПараметрыКоманды["--testclient"]); @@ -289,8 +289,6 @@ Функция КлючЗапускаЗагрузчика(ЗагружатьВстроенныеТесты, ПутьВходящихДанных) - ПараметрыЗапуска = Новый Массив(); - Если Не ЗагружатьВстроенныеТесты Тогда Если Новый Файл(ПутьВходящихДанных).ЭтоКаталог() Тогда diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" index cff8572a..85ae6202 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" @@ -80,7 +80,7 @@ ЗапускатьТолстыйКлиент = ОбщиеМетоды.УказанПараметрТолстыйКлиент(ПараметрыКоманды["--ordinaryapp"], Лог); ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ПутьКФичам = ""; Если ПараметрыКоманды.Получить("--path") <> Неопределено Тогда @@ -102,7 +102,7 @@ ПараметрыКоманды["--additional"], ПараметрыКоманды["--tags-ignore"], ПараметрыКоманды["--tags-filter"], - ПараметрыКоманды["additional-keys"] + ПараметрыКоманды["--additional-keys"] ); Исключение @@ -174,22 +174,28 @@ ПутьЛогаВыполненияСценариев = НастройкиДля1С.ПолучитьНастройку(Настройки, "ИмяФайлаЛогВыполненияСценариев", "./build/vanessaonline.txt", "путь к лог-файлу выполнения"); - Если ПустаяСтрока(ДопКлючи) И НЕ Лев(ДопКлючи, 1) = ";" Тогда - ДопКлючи = ";" + ДопКлючи; - КонецЕсли; + КлючиЗапуска = Новый Массив; + КлючиЗапуска.Добавить("StartFeaturePlayer"); + КлючиЗапуска.Добавить("workspaceRoot=" + РабочийКаталогПроекта); - КлючЗапуска = """StartFeaturePlayer;VBParams=" + ПутьКНастройкам - + ";workspaceRoot=" + РабочийКаталогПроекта - + ДопКлючи + """"; + Если ЗначениеЗаполнено(ПутьКНастройкам) Тогда + КлючиЗапуска.Добавить("VBParams=" + ПутьКНастройкам); + КонецЕсли; Если ЗначениеЗаполнено(ТегиОтбор) Тогда - КлючЗапуска = КлючЗапуска + ";TagsIgnore=" + ТегиОтбор; + КлючиЗапуска.Добавить("TagsIgnore=" + ТегиОтбор); КонецЕсли; Если ЗначениеЗаполнено(ТегиФильтр) Тогда - КлючЗапуска = КлючЗапуска + ";TagsFilter=" + ТегиФильтр; + КлючиЗапуска.Добавить("TagsFilter=" + ТегиФильтр); КонецЕсли; + Если ЗначениеЗаполнено(ДопКлючи) Тогда + КлючиЗапуска.Добавить(ДопКлючи); + КонецЕсли; + + КлючЗапуска = СтрШаблон("""%1""", СтрСоединить(КлючиЗапуска, ";")); + Лог.Отладка(КлючЗапуска); ДополнительныеКлючи = " /TESTMANAGER " + ДопПараметры; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" index d2be8650..51ef86f2 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" @@ -30,11 +30,11 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster-admin", - "Администратор кластера"); + "[env RUNNER_CLUSTERADMIN_USER] Администратор кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster-pwd", - "Пароль администратора кластера"); + "[env RUNNER_CLUSTERADMIN_PWD] Пароль администратора кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster", @@ -44,6 +44,10 @@ "--cluster-name", "Имя кластера"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, + "--try", + "Число попыток обращения по протоколу rac/ras"); + Если ЭтоУправлениеСеансами Тогда Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, @@ -61,11 +65,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--lockstartat", "Время старта блокировки через n сек"); - - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "--try", - "Число попыток обращения по протоколу rac/ras"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--with-nolock", "Не блокировать сеансы (y/n). Может применяться для действия kill, т.к. по умолчанию, при его выполнении автоматически блокируется начало сеансов. @@ -271,6 +271,8 @@ Пауза_ПолСекунды = 500; Пауза_ДесятьСек = 10000; + УспешноеУдалениеСеансов = Ложь; + ОшибкаУдаленияСеансов = ""; Для Сч = 1 По Настройки.ЧислоПопыток Цикл Попытка @@ -279,22 +281,28 @@ Приостановить(Пауза_ПолСекунды); Сеансы = ПолучитьСписокСеансов(); - Если Сеансы.Количество() Тогда - Лог.Информация("Пауза перед отключением соединений"); - Приостановить(Пауза_ДесятьСек); - ОтключитьСоединенияСРабочимиПроцессами(); - КонецЕсли; - + // соединения будет отключать всегда, так как могут быть зависшие + Лог.Информация("Пауза перед отключением соединений"); + Приостановить(Пауза_ДесятьСек); + ОтключитьСоединенияСРабочимиПроцессами(); + Сеансы = ПолучитьСписокСеансов(); Если Сеансы.Количество() = 0 Тогда + УспешноеУдалениеСеансов = Истина; Прервать; КонецЕсли; Исключение - ВызватьИсключение СтрШаблон("Попытка удаления сеансов не удалась. Текст ошибки: - |%1", ИнформацияОбОшибке().Описание); + УспешноеУдалениеСеансов = Ложь; + ОшибкаУдаленияСеансов = ИнформацияОбОшибке().Описание; + Лог.Информация("Попытка удаления сеансов №" + Сч + " неудачна. Текст ошибки: + |" + ОшибкаУдаленияСеансов); КонецПопытки; КонецЦикла; + Если Не УспешноеУдалениеСеансов Тогда + ВызватьИсключение СтрШаблон("Попытка удаления сеансов не удалась. Текст ошибки: + |%1", ОшибкаУдаленияСеансов); + КонецЕсли; КонецПроцедуры @@ -343,15 +351,24 @@ ВремяБлокировки, СтрокаОкончанияБлокировки) + " " + Настройки.АдресСервераАдминистрирования; + УспешныйЗапускRac = Ложь; + ОшибкаЗапускаRac = ""; Для Сч = 1 По Настройки.ЧислоПопыток Цикл Попытка ЗапуститьПроцесс(КомандаВыполнения); + УспешныйЗапускRac = Истина; Прервать; Исключение - ВызватьИсключение СтрШаблон("Попытка запуска rac не удалась. Текст ошибки: - |%1", ИнформацияОбОшибке().Описание); + УспешныйЗапускRac = Ложь; + ОшибкаЗапускаRac = ИнформацияОбОшибке().Описание; + Лог.Информация("Попытка запуска rac №" + Сч + " неудачна. Текст ошибки: + |" + ОшибкаЗапускаRac); КонецПопытки; КонецЦикла; + Если Не УспешныйЗапускRac Тогда + ВызватьИсключение СтрШаблон("Попытка запуска rac не удалась. Текст ошибки: + |%1", ОшибкаЗапускаRac); + КонецЕсли; Лог.Информация("Сеансы " + ?(Блокировать, "запрещены", "разрешены")); @@ -471,8 +488,9 @@ ЗапуститьПроцесс(СтрокаВыполнения); Исключение ТекстОшибки = ОписаниеОшибки(); - Если СтрНайти(ВРег(ТекстОшибки), ВРег("Сеанс отсутствует или удален")) = 0 - И СтрНайти(ВРег(ТекстОшибки), ВРег("Сеанс с указанным идентификатором не найден")) = 0 Тогда + ТекстОшибкиВРег = ВРег(ТекстОшибки); + Если СтрНайти(ТекстОшибкиВРег, "СЕАНС ОТСУТСТВУЕТ ИЛИ УДАЛЕН") = 0 + И СтрНайти(ТекстОшибкиВРег, "СЕАНС С УКАЗАННЫМ ИДЕНТИФИКАТОРОМ НЕ НАЙДЕН") = 0 Тогда ВызватьИсключение; КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); @@ -558,7 +576,7 @@ КонецФункции -Функция РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) +Процедура РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) ОписаниеКластера = МенеджерRac.ОписаниеКластера(); КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", @@ -577,16 +595,13 @@ Лог.Информация(Сообщение); Попытка - Результат = ЗапуститьПроцесс(КомандаРазрывСоединения); + ЗапуститьПроцесс(КомандаРазрывСоединения); Исключение ТекстОшибки = ВРег(ОписаниеОшибки()); Если СтрНайти(ТекстОшибки, "СОЕДИНЕНИЕ") = 0 И СтрНайти(ТекстОшибки, "НЕ НАЙДЕНО") = 0 Тогда ВызватьИсключение; КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); - Результат = Ложь; КонецПопытки; - Возврат Результат; - -КонецФункции +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" index 880e7a23..fd67a4e1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" @@ -19,12 +19,19 @@ Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт - ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты)."); + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, + " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты)."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--new-version", "Номер версии, который нужно установить"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--check-module", + "Исправление версии в модулях объектов внешних обработок\отчетов 1С (Ext/ObjectModule.bsl) или в общих модулях (Ext/Module.bsl) + | Формат версии в коде нужно задать в виде отдельной строки Версия = ""1.2.3.4""; // или ""1.2.3"""); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", - "Путь Configuration.xml или каталога, содержащего этот файл, или корневого каталога для поиска в подкаталогах - для исходников конфигурации или расширения"); + "Путь Configuration.xml или Configuration.mdo или каталога, содержащего любой из этих файлов, + |или корневого каталога для поиска в подкаталогах - для исходников конфигурации или расширения + |Если указан флаг --check-module, тогда в параметре передается путь к указанным модулям или к каталогам\подкаталогам с модулями + |и будут анализируются только указанные модули кода!"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -45,14 +52,25 @@ НомерВерсии = ПараметрыКоманды["--new-version"]; ПутьФайла = ПараметрыКоманды["--src"]; + ТолькоМодулиКода = ПараметрыКоманды["--check-module"]; - Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1 - %2", НомерВерсии, ПутьФайла); + Если ТолькоМодулиКода Тогда + Лог.Информация("Изменяю версию в исходниках модуля 1С на %1 - %2", НомерВерсии, ПутьФайла); + Иначе + Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1 - %2", НомерВерсии, ПутьФайла); + КонецЕсли; МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии); + СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии, ТолькоМодулиКода); Для каждого КлючЗначение Из СтарыеВерсии Цикл - Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); + ПредыдущаяВерсия = КлючЗначение.Значение; + Если ТолькоМодулиКода И Не ЗначениеЗаполнено(ПредыдущаяВерсия) Тогда + Лог.Информация(" Не найдена предыдущая установка версии, новая версия не установлена. Файл - %2", + ПредыдущаяВерсия, КлючЗначение.Ключ); + Иначе + Лог.Информация(" Предыдущая версия %1, файл - %2", ПредыдущаяВерсия, КлючЗначение.Ключ); + КонецЕсли; КонецЦикла; Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; diff --git "a/src/\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\200Ibcmd.os" "b/src/\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\200Ibcmd.os" new file mode 100644 index 00000000..e9a6081d --- /dev/null +++ "b/src/\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\200Ibcmd.os" @@ -0,0 +1,361 @@ + +#Использовать ibcmdrunner +#Использовать v8find + +#Область ОписаниеПеременных + +Перем Лог; // Содердит объект ллога +Перем ВременныйКаталогДанныхСервера; // Временный каталог данных автономного сервера +Перем КаталогВременнойИБ; +Перем УправлениеИБ; // :УправлениеИБ +Перем Локаль; // Локаль приложения + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаСоединения); + Лог.Отладка("Использовать каталог ИБ %1", КаталогБазы); + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); + +КонецПроцедуры + +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + + ОбщиеМетоды.ОбеспечитьПустойКаталог(Новый Файл(КаталогБазы)); + + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(ПутьКШаблону, ЛокальДляЗапуска()); + + СтрокаСоединения = СтрШаблон("File=""%1""", КаталогБазы); + ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения); + +КонецПроцедуры + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(Знач ВходнойКаталог, + Знач СписокФайловДляЗагрузки = "", СниматьСПоддержки = Ложь, ОбновитьФайлВерсий = Истина) Экспорт + + ИмяРасширения = ""; + + Если ТипЗнч(СписокФайловДляЗагрузки) = Тип("Строка") Тогда + Если СписокФайловДляЗагрузки <> "" Тогда + СписокФайловДляЗагрузки = СтрРазделить(СписокФайловДляЗагрузки, ";"); + КонецЕсли; + КонецЕсли; + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + + Если ЗначениеЗаполнено(СписокФайловДляЗагрузки) Тогда + УправлениеИБ.ЗагрузитьВыбранныеФайлыКонфигурации(ВходнойКаталог, СписокФайловДляЗагрузки, ИмяРасширения); + Иначе + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(ВходнойКаталог, ИмяРасширения); + КонецЕсли; + + Если ОбновитьФайлВерсий Тогда + УправлениеИБ.ВыгрузитьВФайлСостояниеКонфигурации(ВходнойКаталог, ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Выгружает информационную базу в файл +// +// Параметры: +// ПутьКВыгружаемомуФайлуСДанными - Строка - Путь к результату - выгружаемому файлу с данными (*.dt) +// +Процедура ВыгрузитьИнфобазуВФайл(Знач ПутьКВыгружаемомуФайлуСДанными) Экспорт + УправлениеИБ.ВыгрузитьДанныеИБ(ПутьКВыгружаемомуФайлуСДанными); +КонецПроцедуры + +// Загружает информационную базу из файла +// +// Параметры: +// ПутьКЗагружаемомуФайлуСДанными - Строка - Путь к файлу с данными (*.dt) +// КоличествоЗаданий - Число - Количество заданий (потоков) загрузки из файла с данными +// +Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными, Знач КоличествоЗаданий = 0) Экспорт + УправлениеИБ.ЗагрузитьДанныеИБ(ПутьКЗагружаемомуФайлуСДанными); +КонецПроцедуры + +Процедура ЗагрузитьФайлКонфигурации(Знач ПутьКФайлу, Знач СниматьСПоддержки = Истина) Экспорт + + ИмяРасширения = ""; + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + + УправлениеИБ.ЗагрузитьКонфигурацию(ПутьКФайлу, ИмяРасширения); + +КонецПроцедуры + +Процедура ОбновитьКонфигурациюБазыДанных(ДинамическоеОбновление = Ложь) Экспорт + + Если ДинамическоеОбновление Тогда + РежимДинамическогоОбновления = "disable"; + Иначе + РежимДинамическогоОбновления = "auto"; + КонецЕсли; + ЗавершатьСеансы = "force"; + + ИмяРасширения = ""; + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения, РежимДинамическогоОбновления, ЗавершатьСеансы); + + Лог.Информация("Обновление конфигурации БД завершено."); + +КонецПроцедуры + +// ОбновитьРасширение +// +// Параметры: +// ИмяРасширения - Строка - <описание параметра> +// +Процедура ОбновитьРасширение(Знач ИмяРасширения) Экспорт + + РежимДинамическогоОбновления = "disable"; + ЗавершатьСеансы = "force"; + + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения, РежимДинамическогоОбновления, ЗавершатьСеансы); +КонецПроцедуры + +Процедура ПоказатьСписокВсехРасширенийКонфигурации() Экспорт + СписокРасширений = УправлениеИБ.СписокРасширений(); + Лог.Информация("Список расширений конфигурации:%2%1", СписокРасширений, Символы.ПС); +КонецПроцедуры + +Процедура ВыгрузитьКонфигурациюВФайл(Знач ПутьКНужномуФайлуКонфигурации) Экспорт + + УправлениеИБ.ВыгрузитьКонфигурациюВФайл(ПутьКНужномуФайлуКонфигурации); + +КонецПроцедуры + +// Разбор текущей конфигураций на исходники штатной выгрузкой 1С +// +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// ИспользоватьПереименования - Булево - Переименовывать файлы в удобные имена и раскладывать по папкам согласно иерархии метаданных +// +Процедура РазобратьНаИсходникиТекущуюКонфигурацию(КаталогВыгрузки, Знач ФайлВерсии = "", + Знач ТолькоИзмененные = Истина, + Знач ИспользоватьПереименования = Ложь) Экспорт + + НеВыгружатьНеСуществующиеОбъекты = Истина; + ИмяРасширения = ""; + ВАрхив = Ложь; + НаСервере = Ложь; + КоличествоПотоков = 0; + + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); + + УправлениеИБ.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки, ФайлВерсии, ИмяРасширения, + Синхронизировать, ВАрхив, НаСервере, КоличествоПотоков, НеВыгружатьНеСуществующиеОбъекты); + +КонецПроцедуры + +// Выгружает расширение в исходники +// +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ИмяРасширения - Строка - Имя расширения +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// +Процедура РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения, + Знач ФайлВерсии = "", Знач ТолькоИзмененные = Истина) Экспорт + + НеВыгружатьНеСуществующиеОбъекты = Истина; + ВАрхив = Ложь; + НаСервере = Ложь; + КоличествоПотоков = 0; + + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); + + УправлениеИБ.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки, ФайлВерсии, ИмяРасширения, + Синхронизировать, ВАрхив, НаСервере, КоличествоПотоков, НеВыгружатьНеСуществующиеОбъекты); + +КонецПроцедуры + +// Выгружает файл конфигурации в исходники +// +// Параметры: +// ФайлКонфигурации - Строка - Путь к источнику - выгружаемому файлу конфигурации (*.cf) +// ВыходнойКаталог - Строка - Путь к каталогу выгрузки +// ФайлВерсии - Строка - Путь к файлу версии +// ИспользоватьПереименования - Булево - Переименовывать файлы в удобные имена и раскладывать по папкам согласно иерархии метаданных +// +Процедура ВыгрузитьКонфигурациюВИсходники(Знач ФайлКонфигурации, Знач ВыходнойКаталог, + Знач ФайлВерсии = "", Знач ИспользоватьПереименования = Ложь) Экспорт + + ЗагрузитьФайлКонфигурации(ФайлКонфигурации); + РазобратьНаИсходникиТекущуюКонфигурацию(ВыходнойКаталог, ФайлВерсии, Истина, ИспользоватьПереименования); + +КонецПроцедуры + +Процедура СобратьИзИсходниковРасширение(Каталог, ИмяРасширения, Обновить = Ложь) Экспорт + + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(Каталог, ИмяРасширения); + + Если Обновить Тогда + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Выгружает файл расширения из ИБ +// +// Параметры: +// ПутьКНужномуФайлуРасширения - Строка - Путь к результату - выгружаемому файлу конфигурации (*.cfe) +// ИмяРасширения - Строка - Имя расширения +// +Процедура ВыгрузитьРасширениеВФайл(Знач ПутьКНужномуФайлуРасширения, Знач ИмяРасширения) Экспорт + УправлениеИБ.ВыгрузитьКонфигурациюВФайл(ПутьКНужномуФайлуРасширения, ИмяРасширения); +КонецПроцедуры + +// Загружает файл расширения в текущую базу данных. +// Параметры: +// ПутьКФайлу - Строка - Путь к файлу *.cfe +// ИмяРасширения - Строка +// ОбновитьКонфигурациюИБ - Булево +// +Процедура ЗагрузитьФайлРасширения(Знач ПутьКФайлу, Знач ИмяРасширения, Знач ОбновитьКонфигурациюИБ = Ложь) Экспорт + + УправлениеИБ.ЗагрузитьКонфигурацию(ПутьКФайлу, ИмяРасширения); + + Если ОбновитьКонфигурациюИБ Тогда + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Возвращает каталог времнной ИБ +// +// Возвращаемое значение: +// Строка - Каталог временной ИБ +// +Функция КаталогВременнойИБ() Экспорт + Возврат КаталогВременнойИБ; +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта() + + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + ВременныйКаталогДанныхСервера = ВременныеФайлы.СоздатьКаталог(); + Локаль = ""; + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыАвтономногоСервера(ВременныйКаталогДанныхСервера); + +КонецПроцедуры + +Процедура Конструктор(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + ВерсияПлатформы = ДанныеПодключения.ВерсияПлатформы; + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Если ЗначениеЗаполнено(ДанныеПодключения.РазрядностьПлатформы) Тогда + Разрядность = ОбщиеМетоды.РазрядностьПлатформы(ДанныеПодключения.РазрядностьПлатформы); + Лог.Отладка("Разрядность платформы 1С указана %1", ДанныеПодключения.РазрядностьПлатформы); + Иначе + Разрядность = ОбщиеМетоды.РазрядностьПлатформы("x64x86"); + Лог.Отладка("Разрядность платформы 1С не указана"); + КонецЕсли; + + ПутьКIbcmd = ПутьКIbcmd(ВерсияПлатформы, Разрядность); + УправлениеИБ.ПутьКПриложению(ПутьКIbcmd); + КонецЕсли; + Лог.Информация("Используется ibcmd платформы %1", ТекущаяВерсияПлатформы()); + + ИспользоватьВременнуюБазу = ДанныеПодключения.ИспользоватьВременнуюБазу; + Если ИспользоватьВременнуюБазу Тогда + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + + КаталогВременнойИБ = ОбъединитьПути(ВременныйКаталогДанныхСервера, "db_data"); + + СтрокаСоединения = СтрШаблон("/F%1", КаталогВременнойИБ); + Пользователь = ""; + Пароль = ""; + + УстановитьКонтекст(СтрокаСоединения, Пользователь, Пароль); + + Иначе + УстановитьКонтекст(ДанныеПодключения.ПутьБазы, + ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль); + КонецЕсли; + +КонецПроцедуры + +Процедура Деструктор() Экспорт + + Попытка + ВременныеФайлы.УдалитьФайл(ВременныйКаталогДанныхСервера); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Отладка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + ВременныйКаталогДанныхСервера = ""; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПутьКIbcmd(ВерсияПлатформы, Разрядность) + + Если Не СтрНачинаетсяС(ВерсияПлатформы, "8.3") Тогда + ВызватьИсключение "Неверная версия платформы <" + ВерсияПлатформы + ">"; + КонецЕсли; + + Возврат Платформа1С.ПутьКIBCMD(ВерсияПлатформы, Разрядность); + +КонецФункции + +Функция ЛокальДляЗапуска() + + Если ЗначениеЗаполнено(Локаль) Тогда + Возврат Локаль; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Процедура ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения) + + Если ПустаяСтрока(ИмяБазыВСписке) Тогда + Возврат; + КонецЕсли; + + КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; + + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); + ДопДанныеСпискаБаз.Вставить("Version", УправлениеИБ.Версия()); + + ПолныйПуть = Новый Файл(КорневойПутьПроекта).ИмяБезРасширения; + + Попытка + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаСоединения, ПолныйПуть, ДопДанныеСпискаБаз); + Исключение + Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция ТекущаяВерсияПлатформы() + Возврат СокрЛП(УправлениеИБ.Версия()); +КонецФункции + +#КонецОбласти diff --git "a/src/\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\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" "b/src/\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\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" index fc2dec1f..165ddec3 100644 --- "a/src/\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\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" +++ "b/src/\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\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" @@ -1,5 +1,6 @@ #Использовать logos #Использовать fs +#Использовать fluent #Область ОписаниеПеременных @@ -12,11 +13,11 @@ // Возвращает версию конфигурации из исходников конфигурации или расширения // // Параметры: -// ПутьФайлаКонфигурации - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьФайлаКонфигурации - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // Функция ВерсияКонфигурации(Знач ПутьФайлаКонфигурации) Экспорт @@ -25,7 +26,7 @@ Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьФайлаКонфигурации, Ложь) Цикл + Для каждого Файл Из ФайлыИсходников(ПутьФайлаКонфигурации, Ложь) Цикл СтрокаXML = ПрочитатьФайл(Файл.ПолноеИмя); Результат.Вставить(Файл.ПолноеИмя, ВерсияКонфигурацииПоХМЛ(СтрокаXML)); КонецЦикла; @@ -37,21 +38,22 @@ // Устанавливает новую версию конфигурации или расширения в исходниках // // Параметры: -// ПутьИсходников - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьИсходников - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах // НовыйНомерВерсии - Строка - версия для установки +// ТолькоМодулиКода - Булево - выполнять поиск в модулях конфигурации (ObjectModule.bsl или Module.bsl) // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // -Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии) Экспорт +Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии, Знач ТолькоМодулиКода) Экспорт Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл - ПредыдущаяВерсия = ЗаписатьНомерВерсии(Файл.ПолноеИмя, НовыйНомерВерсии); + Для каждого Файл Из ФайлыИсходников(ПутьИсходников, Истина, ТолькоМодулиКода) Цикл + ПредыдущаяВерсия = ЗаписатьНомерВерсии(Файл.ПолноеИмя, НовыйНомерВерсии, ТолькоМодулиКода); Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); КонецЦикла; @@ -63,20 +65,20 @@ // Например, если старая версия 5.4.3.124, а номер сборки 125, то новая версия 5.4.3.125 // // Параметры: -// ПутьИсходников - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьИсходников - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах // НовыйНомерСборки - Строка - номер сборки для установки // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // Функция УстановитьНомерСборкиДляКонфигурации(Знач ПутьИсходников, Знач НовыйНомерСборки) Экспорт Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл + Для каждого Файл Из ФайлыИсходников(ПутьИсходников) Цикл ПредыдущаяВерсия = ЗаписатьНомерСборки(Файл.ПолноеИмя, НовыйНомерСборки); Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); КонецЦикла; @@ -85,24 +87,127 @@ КонецФункции +// Поиск файла подходящего под шаблон номера версии. +// +// Параметры: +// ПутьКФайлуКонфигурации - Строка - Файл с шаблоном номера версии. Например: 1cv8_$version.cf +// +// Возвращаемое значение: +// Строка - Имя файла подходящего под шаблон версии. Например: 1cv8_1.2.3.4.cf +// +Функция НайтиФайлСВерсией(Знач ПутьКФайлуКонфигурации) Экспорт + + ШаблонВерсии = "$version"; + + Если СтрНайти(ПутьКФайлуКонфигурации, ШаблонВерсии) = 0 Тогда + Возврат ПутьКФайлуКонфигурации; + КонецЕсли; + + Файл = Новый Файл(ПутьКФайлуКонфигурации); + Путь = Файл.Путь; + + ПутьКФайлу = ""; + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)"); + + Если ПустаяСтрока(Файл.Расширение) Тогда + МаскаПоиска = ПолучитьМаскуВсеФайлы(); + Иначе + МаскаПоиска = "*" + Файл.Расширение; + КонецЕсли; + + Лог.Отладка("Используем каталог поиска: %1", Путь); + Лог.Отладка("Используем маску поиска: %1", МаскаПоиска); + + НайденныеФайлы = НайтиФайлы(Путь, МаскаПоиска); + Для каждого НайденныйФайл Из НайденныеФайлы Цикл + + Лог.Отладка("Ищем номер версии в имени файла: %1", НайденныйФайл.Имя); + Совпадения = РегулярноеВыражение.НайтиСовпадения(НайденныйФайл.Имя); + Если Совпадения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ВерсияФайла = Совпадения[0].Группы[1].Значение; + Лог.Отладка("Нашли номер версии: %1", ВерсияФайла); + ИмяФайлаСВерсией = СтрЗаменить(Файл.Имя, ШаблонВерсии, ВерсияФайла); + Если ИмяФайлаСВерсией = НайденныйФайл.Имя Тогда + ПутьКФайлу = НайденныйФайл.ПолноеИмя; + Лог.Информация("Используем файл с версией " + ПутьКФайлу); + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ПустаяСтрока(ПутьКФайлу) Тогда + ВызватьИсключение "Не найден файл с шаблоном версии " + ПутьКФайлуКонфигурации; + КонецЕсли; + + Возврат ПутьКФайлу; + +КонецФункции + +// Подставляет номер версии в строку с шаблонной переменной $version +// +// Параметры: +// ПутьИсходников - Строка - Путь к исходникам конфигурации для получения версии +// СтрокаДляПодстановки - Строка - Строка для подставновки номера версии +// +// Возвращаемое значение: +// Строка - Итоговая строка с результатом подстановки +// +Функция ПодставитьНомерВерсии(ПутьИсходников, СтрокаДляПодстановки) Экспорт + + ШаблонВерсии = "$version"; + + Если СтрНайти(СтрокаДляПодстановки, ШаблонВерсии) = 0 Тогда + Возврат СтрокаДляПодстановки; + КонецЕсли; + + ВерсииКонфигураций = ВерсияКонфигурации(ПутьИсходников); + Если ВерсииКонфигураций.Количество() = 0 Тогда + ВызватьИсключение "Не найден файл конфигурации в каталоге " + ПутьИсходников; + КонецЕсли; + + Для Каждого КлючЗначение Из ВерсииКонфигураций Цикл + ВерсияКонфигурации = КлючЗначение.Значение; + Прервать; + КонецЦикла; + + Лог.Информация("Используем для подстановки в %1 версию %2", СтрокаДляПодстановки, ВерсияКонфигурации); + Возврат СтрЗаменить(СтрокаДляПодстановки, ШаблонВерсии, ВерсияКонфигурации); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция ПрочитатьФайл(Знач ПутьФайлаКонфигурации) +Функция ПрочитатьФайл(Знач ПутьФайла) ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.Прочитать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + ТекстовыйДокумент.Прочитать(ПутьФайла, КодировкаТекста.UTF8); Возврат ТекстовыйДокумент.ПолучитьТекст(); КонецФункции +Процедура ЗаписатьФайл(Знач ПутьФайла, ТекстФайла) + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(ТекстФайла); + ТекстовыйДокумент.Записать(ПутьФайла, КодировкаТекста.UTF8); + +КонецПроцедуры + Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации) - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+)<\/Version>"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)<\/Version>"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации); - Если Совпадения.Количество() = 0 Тогда + Если Не ЗначениеЗаполнено(Совпадения) Тогда РегулярноеВыражение = Новый РегулярноеВыражение(""); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Если РегулярноеВыражение.Совпадает(ХМЛСтрокаФайлаКонфигурации) Тогда Возврат ""; КонецЕсли; @@ -118,31 +223,71 @@ КонецФункции -Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НомерВерсии) +Функция ВерсияМодуля(Знач ТекстФайла) - Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурации); - СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); + Совпадения = НоваяРегуляркаДляВерсииМодуля().НайтиСовпадения(ТекстФайла); + Если Не ЗначениеЗаполнено(Совпадения) Тогда + Возврат ""; + КонецЕсли; - ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(СтрокаXML); + Результат = Совпадения[0].Группы[1].Значение; + + Лог.Отладка("текущая версия модуля %1", Результат); + + Возврат Результат; + +КонецФункции + +Функция НоваяРегуляркаДляВерсииМодуля() + + РегулярноеВыражение = Новый РегулярноеВыражение("^\s*Версия\s*=\s*""(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)"";\s*$"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Возврат РегулярноеВыражение; +КонецФункции + +Процедура ИзменитьНомерВерсииМодуля(ПутьФайла, ТекстФайла, НомерВерсии) - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии); + ШаблонПодстановки = СтрШаблон(" Версия = ""%1"";", НомерВерсии); + НовыйТекстФайла = НоваяРегуляркаДляВерсииМодуля().Заменить(ТекстФайла, ШаблонПодстановки); + ЗаписатьФайл(ПутьФайла, НовыйТекстФайла); + +КонецПроцедуры + +Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурацииИлиМодуля, НомерВерсии, ТолькоМодулиКода) + + Если ТолькоМодулиКода Тогда + Лог.Отладка("устанавливаю версию %1 в исходниках модуля %2", НомерВерсии, ПутьФайлаКонфигурацииИлиМодуля); + Иначе + Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурацииИлиМодуля); + КонецЕсли; + ТекстФайла = ПрочитатьФайл(ПутьФайлаКонфигурацииИлиМодуля); + + Если ТолькоМодулиКода Тогда + ПредыдущаяВерсия = ВерсияМодуля(ТекстФайла); + + ИзменитьНомерВерсииМодуля(ПутьФайлаКонфигурацииИлиМодуля, ТекстФайла, НомерВерсии); + Иначе + ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(ТекстФайла); + + ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурацииИлиМодуля, ТекстФайла, НомерВерсии); + КонецЕсли; Возврат ПредыдущаяВерсия; КонецФункции -Процедура ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии) +Процедура ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии) ШаблонПодстановки = СтрШаблон("%1", НомерВерсии); - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+<\/Version>)"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+<\/Version>)|(\d+\.\d+\.\d+<\/Version>)"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки); РегулярноеВыражение = Новый РегулярноеВыражение("()"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; НоваяСтрокаXML = РегулярноеВыражение.Заменить(НоваяСтрокаXML, ШаблонПодстановки); - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML); - ТекстовыйДокумент.Записать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + ЗаписатьФайл(ПутьФайлаКонфигурации, НоваяСтрокаXML); КонецПроцедуры @@ -155,7 +300,7 @@ ВерсияСоСборкой = ВерсияСоСборкой(ПредыдущаяВерсия, НомерСборки); - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, ВерсияСоСборкой); + ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурации, СтрокаXML, ВерсияСоСборкой); Возврат ПредыдущаяВерсия; @@ -164,48 +309,166 @@ Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки) ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки); - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+)\.(\d+)|(\d+\.\d+)\.(\d+)"); Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки); КонецФункции +Функция ФайлыИсходников(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина, + Знач ТолькоМодулиКода = Ложь) + + Если ТолькоМодулиКода Тогда + Результат = ФайлыМодулей(ПутьФайлаИлиКаталогИсходников, ИскатьВПодкаталогах); + ПоказатьИменаМодулейВРежимеОтладка(Результат); + Результат = СвернутьМассивФайлов(Результат); + Возврат Результат; + КонецЕсли; + + Результат = ФайлыКонфигураций(ПутьФайлаИлиКаталогИсходников, ИскатьВПодкаталогах); + Результат = СвернутьМассивФайлов(Результат); + ПоказатьИменаМодулейВРежимеОтладка(Результат); + Возврат Результат; + +КонецФункции + +Процедура ПоказатьИменаМодулейВРежимеОтладка(Знач Массив) + Лог.Отладка("Найдено файлов %1", Массив.Количество()); // TODO + Для каждого Элем Из Массив Цикл + Лог.Отладка(" файл %1", Элем.ПолноеИмя); // TODO + КонецЦикла; +КонецПроцедуры + +Функция СвернутьМассивФайлов(Знач Массив) + Соответствие = Новый Соответствие; + Для каждого Элемент Из Массив Цикл + Соответствие.Вставить(Элемент.ПолноеИмя, Элемент); + КонецЦикла; + Результат = Новый Массив; + Для каждого КлючЗначение Из Соответствие Цикл + Результат.Добавить(КлючЗначение.Значение); + КонецЦикла; + Возврат Результат; + // код ниже пока не работает, жду приема ПР https://github.com/nixel2007/oscript-fluent/pull/23 и выпуска релиза - + // Возврат ПроцессорыКоллекций.ИзКоллекции(Массив) + // .Различные("Результат = Элемент1.ПолноеИмя <> Элемент2.ПолноеИмя") + // .ВМассив(); +КонецФункции + Функция ФайлыКонфигураций(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) Результат = Новый Массив; ИмяФайлаКонфигурации = "Configuration.xml"; + ИмяФайлаКонфигурацииЕДТ = "Configuration.mdo"; //TODO нужно учесть и файл для EDT Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); Если Файл.ЭтоКаталог() Тогда ФайлКонфигурации = Новый Файл(ОбъединитьПути(Файл.ПолноеИмя, ИмяФайлаКонфигурации)); - Если Не ФайлКонфигурации.Существует() Тогда - Если ИскатьВПодкаталогах Тогда - Возврат НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурации, Истина); - Иначе - ВызватьИсключение СтрШаблон("В каталоге %1 не существует файл конфигурации %2", - Файл.ПолноеИмя, ИмяФайлаКонфигурации); - КонецЕсли; + Если ФайлКонфигурации.Существует() Тогда + Результат.Добавить(ФайлКонфигурации); + Возврат Результат; + КонецЕсли; + ФайлКонфигурацииЕДТ = Новый Файл(ОбъединитьПути(Файл.ПолноеИмя, ИмяФайлаКонфигурацииЕДТ)); + Если ФайлКонфигурацииЕДТ.Существует() Тогда + Результат.Добавить(ФайлКонфигурацииЕДТ); + Возврат Результат; КонецЕсли; - Результат.Добавить(ФайлКонфигурации); - Возврат Результат; - ИначеЕсли НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурации) Тогда + Если ИскатьВПодкаталогах Тогда + Результат = НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурации, Истина); + РезультатЕДТ = НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурацииЕДТ, Истина); + ОбщиеМетоды.ДополнитьМассив(Результат, РезультатЕДТ); + Возврат Результат; + Иначе + ВызватьИсключение СтрШаблон("В каталоге %1 не существует ни файла конфигурации %2, ни файл конфигурации EDT %3", + Файл.ПолноеИмя, ИмяФайлаКонфигурации, ИмяФайлаКонфигурацииЕДТ); + КонецЕсли; + + ИначеЕсли НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурации) Или + НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурацииЕДТ) Тогда Результат.Добавить(Файл); Возврат Результат; - ИначеЕсли ИскатьВПодкаталогах Тогда - Возврат НайтиФайлы(ПутьФайлаИлиКаталогИсходников, ИмяФайлаКонфигурации, Истина); Иначе - ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файл конфигурации %1 или на каталог, его содержащий - %2", - ИмяФайлаКонфигурации, ПутьФайлаИлиКаталогИсходников); + ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файл конфигурации %1 или файл конфигурации EDT %2 + |или на каталог, их содержащий - %3", + ИмяФайлаКонфигурации, ИмяФайлаКонфигурацииЕДТ, ПутьФайлаИлиКаталогИсходников); КонецЕсли; КонецФункции -Функция ПолучитьЛог() +Функция ФайлыМодулей(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) + + ИмяКаталогаСМодулем = "Ext"; + + ИменаМодулей = Новый Массив; + ИменаМодулей.Добавить("ObjectModule.bsl"); + ИменаМодулей.Добавить("Module.bsl"); + + ФункцияМодульНаходитсяВКаталогеExt = Новый ОписаниеОповещения("МодульНаходитсяВКаталогеExt", ЭтотОбъект, + Новый Структура("ИмяКаталогаСМодулем", ИмяКаталогаСМодулем)); + + Результат = Новый Массив; + + Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); + Лог.Отладка("Передан путь %1", Файл.ПолноеИмя); + Если Файл.ЭтоКаталог() Тогда + Результат = ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = Новый Файл(ОбъединитьПути(ДополнительныеПараметры.ПолноеИмяФайла, Элемент))", + Новый Структура("ПолноеИмяФайла", Файл.ПолноеИмя)) + .Фильтровать("Результат = Элемент.Существует()") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ВМассив(); + + ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = Новый Файл( + | ОбъединитьПути(ДополнительныеПараметры.ПолноеИмяФайла, + | ДополнительныеПараметры.ИмяКаталогаСМодулем, Элемент))", + Новый Структура("ПолноеИмяФайла, ИмяКаталогаСМодулем", + Файл.ПолноеИмя, ИмяКаталогаСМодулем)) + .Фильтровать("Результат = Элемент.Существует()") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ДляКаждого("ДополнительныеПараметры.Коллекция.Добавить(Элемент)", + Новый Структура("Коллекция", Результат)); + + Если ИскатьВПодкаталогах Тогда + ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = НайтиФайлы(ДополнительныеПараметры.ПолноеИмяФайла, Элемент, Истина);", + Новый Структура("ПолноеИмяФайла", Файл.ПолноеИмя)) + .Развернуть("Результат = ПроцессорыКоллекций.ИзКоллекции(Элемент)") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ДляКаждого("ДополнительныеПараметры.Коллекция.Добавить(Элемент)", + Новый Структура("Коллекция", Результат)); + + КонецЕсли; + + Возврат Результат; + КонецЕсли; + + НайденныеМодули = ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Фильтровать("Результат = (ДополнительныеПараметры.ИмяФайла = НРег(Элемент))", + Новый Структура("ИмяФайла", НРег(Файл.Имя))) + .ВМассив(); + Если ЗначениеЗаполнено(НайденныеМодули) Тогда + Результат.Добавить(Файл); + Возврат Результат; + КонецЕсли; + + ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файлы модулей (Ext/%1) или на каталог, их содержащий - %2", + СтрСоединить(ИменаМодулей, ", Ext/"), ПутьФайлаИлиКаталогИсходников); + +КонецФункции + +Процедура МодульНаходитсяВКаталогеExt(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Родитель = Новый Файл(Элемент.Путь); + + Результат = (НРег(Родитель.Имя) = НРег(ДополнительныеПараметры.ИмяКаталогаСМодулем)); +КонецПроцедуры + +Процедура ПолучитьЛог() Если Лог = Неопределено Тогда Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); КонецЕсли; - Возврат Лог; -КонецФункции +КонецПроцедуры #КонецОбласти diff --git "a/src/\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\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\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\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" index 87d032ab..c2e85351 100644 --- "a/src/\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\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\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\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -17,23 +17,70 @@ Возврат УправлениеКонфигуратором; КонецФункции -Процедура ИнициализацияИзПараметровКоманды(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт +// пост-конструктор +// +// Параметры: +// ДанныеПодключения - ФиксированнаяСтруктура, Структура +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// +Процедура Конструктор(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + // чтобы не было расхождений при передаче параметров + ПараметрыКоманды.Вставить("ДанныеПодключения", ДанныеПодключения); - Инициализация(ДанныеПодключения.СтрокаПодключения, + Инициализация(ПараметрыКоманды, ДанныеПодключения.СтрокаПодключения, ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль, ПараметрыКоманды["--v8version"], ПараметрыКоманды["--uccode"], - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, - ПараметрыКоманды); + ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса); +КонецПроцедуры + +// пост-конструкторДляНеобязательнойСтрокиСоединения - если строка соединения не передана, используется временная ИБ +// +// Параметры: +// ДанныеПодключения - ФиксированнаяСтруктура, Структура +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// +Процедура КонструкторДляНеобязательнойСтрокиСоединения(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; + Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда + ДанныеПодключения = Новый Структура(ДанныеПодключения); + ДанныеПодключения.ИспользоватьВременнуюБазу = Истина; + КонецЕсли; + Конструктор(ДанныеПодключения, ПараметрыКоманды); КонецПроцедуры -Процедура Инициализация(Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", +// еще один пост-конструктор с явной передачей кучи параметров +// +// Параметры: +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// СтрокаПодключения - Строка - СтрокаПодключения +// Пользователь - Строка - Пользователь +// Пароль - Строка - Пароль +// ВерсияПлатформы - Строка +// КлючРазрешенияЗапуска - Строка +// КодЯзыка - Строка - КодЯзыка +// КодЯзыкаСеанса - Строка - КодЯзыкаСеанса +// +Процедура Инициализация(Знач ПараметрыКоманды, Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач КлючРазрешенияЗапуска = "", - Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "", - Знач ПараметрыКоманды = Неопределено) Экспорт + Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "") Экспорт ТекущаяПроцедура = "Инициализация"; - Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); + ИспользоватьВременнуюБазу = Ложь; + Лог.Отладка("Заданы ПараметрыКоманды %1", ЗначениеЗаполнено(ПараметрыКоманды)); + Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда + ИспользоватьВременнуюБазу = ПараметрыКоманды["ДанныеПодключения"].ИспользоватьВременнуюБазу; + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + КонецЕсли; + Если ИспользоватьВременнуюБазу Тогда + СтрокаПодключения = ""; + Пользователь = ""; + Пароль = ""; + Иначе + Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); + КонецЕсли; УправлениеКонфигуратором = Новый УправлениеКонфигуратором(); @@ -51,7 +98,11 @@ Лог.Отладка("Разрядность платформы 1С не указана"); КонецЕсли; УправлениеКонфигуратором.ИспользоватьВерсиюПлатформы(ВерсияПлатформы, Разрядность); + Иначе + ПутьКПредприятию = Платформа1С.ПутьКПредприятию("8.3"); + УправлениеКонфигуратором.ПутьКПлатформе1С(ПутьКПредприятию); КонецЕсли; + Лог.Информация("Используется версия платформы %1", ТекущаяВерсияПлатформы()); Если Не ПустаяСтрока(КлючРазрешенияЗапуска) Тогда УправлениеКонфигуратором.УстановитьКлючРазрешенияЗапуска(КлючРазрешенияЗапуска); @@ -62,7 +113,7 @@ КонецЕсли; Если ЗначениеЗаполнено(КодЯзыкаСеанса) Тогда - УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыка); + УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыкаСеанса); КонецЕсли; КонецПроцедуры @@ -79,6 +130,10 @@ КаталогВременнойИБ = Неопределено; КонецПроцедуры +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + УправлениеКонфигуратором.УстановитьКонтекст(СтрокаСоединения, Пользователь, Пароль); +КонецПроцедуры + // Установить параметры подключения к хранилищу 1С // // Параметры: @@ -97,7 +152,6 @@ // Процедура ЗапуститьКонфигуратор(Знач ДопСообщения, Знач ДополнительныеКлючиЗапуска, Знач ОжидатьЗавершения) Экспорт - ПредставлениеКоманды = ДопСообщения.Ключ; Лог.Информация("Выполняю команду Конфигуратора"); Лог.Отладка("ДополнительныеКлючиЗапуска:" + ДополнительныеКлючиЗапуска); @@ -139,6 +193,29 @@ КонецПроцедуры +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + + Попытка + УправлениеКонфигуратором.СоздатьФайловуюБазу(КаталогБазы, ПутьКШаблону, ИмяБазыВСписке); + Текст = УправлениеКонфигуратором.ВыводКоманды(); + Если ЗначениеЗаполнено(Текст) Тогда + Лог.Информация(Текст); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если НЕ (СтрНайти(Текст, "успешно завершено") = 0 + ИЛИ СтрНайти(Текст, "completed successfully") = 0) Тогда + + ВызватьИсключение "Результат работы не успешен"; + + КонецЕсли; + +КонецПроцедуры + // Обновить конфигурацию БД на сервере // // Параметры: @@ -196,10 +273,10 @@ КонецПроцедуры -// <Описание процедуры> +// ОбновитьРасширение // // Параметры: -// ИмяРасширения - <Строка> - <описание параметра> +// ИмяРасширения - Строка - <описание параметра> // Процедура ОбновитьРасширение(Знач ИмяРасширения) Экспорт ТекущаяПроцедура = "ОбновитьРасширение"; @@ -253,12 +330,12 @@ // // Параметры: // ДопСообщения - Структура - из метода НовыеДопСообщенияДляЗапускаПредприятия -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ТолстыйКлиент - <Булево> - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// ОжидатьЗавершения - <Булево> - признак запуска толстого клиента -// ПутьФайлаИнформации - Строка - путь файла информации 1С по ключу "/out". +// ПараметрЗапуска - Строка - параметр запуска, передаваемый в 1С +// ОбработкаДляЗапуска - Строка -запускаемая обработка +// ТолстыйКлиент - Булево - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ОжидатьЗавершения - Булево - признак запуска толстого клиента +// ПутьЛогаВыполненияСценариев - Строка - путь файла информации 1С по ключу "/out". // ПутьКФайлуСтатусаВыполнения - Строка - путь файла статуса (внутри файла должно быть 1 или 0) // Процедура ЗапуститьВРежимеПредприятияСПроверкойВыполнения( @@ -271,8 +348,6 @@ Знач ПутьЛогаВыполненияСценариев = Неопределено, Знач ПутьКФайлуСтатусаВыполнения = Неопределено) Экспорт - ПредставлениеКоманды = ДопСообщения.Ключ; - Если Не ОжидатьЗавершения И ЗначениеЗаполнено(ПутьЛогаВыполненияСценариев) Тогда ВызватьИсключение "Нельзя получать лог выполнения без включенного признака ожидания выполнения 1С"; КонецЕсли; @@ -334,250 +409,14 @@ КонецПроцедуры -// Выполнить команду/действие в режиме 1С:Предприятия -// -// Параметры: -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ТолстыйКлиент - <Булево> - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// ОжидатьЗавершения - Булево - по умолчанию Истина, Ложь - запускает и завершает свой процесс. -// -Процедура ЗапуститьВРежимеПредприятия(Знач ПараметрЗапуска, - Знач ОбработкаДляЗапуска, Знач ТолстыйКлиент, - Знач ДополнительныеКлючиЗапуска, - Знач ОжидатьЗавершения, Знач ДопСообщения) - - Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); - - ТекущаяПроцедура = ДопСообщения.Ключ; - - Если ТолстыйКлиент = Ложь Тогда - ТонкийКлиент1С = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(УправлениеКонфигуратором.ПутьКПлатформе1С()); - УправлениеКонфигуратором.ПутьКПлатформе1С(ТонкийКлиент1С); - КонецЕсли; - - УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(ОжидатьЗавершения); - - Если Не ОжидатьЗавершения Тогда - УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла()); - КонецЕсли; - - ДополнительныеКлючи = ДополнительныеКлючиЗапуска; - Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда - ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); - КонецЕсли; - - Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); - Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); - - Попытка - УправлениеКонфигуратором.ЗапуститьВРежимеПредприятия(ПараметрЗапуска, - ?(ТипЗнч(ТолстыйКлиент) = Тип("Булево"), Не ТолстыйКлиент, ТолстыйКлиент), - ДополнительныеКлючи - ); - Текст = УправлениеКонфигуратором.ВыводКоманды(); - Если Не ПустаяСтрока(Текст) Тогда - Лог.Информация(Текст); - КонецЕсли; - - Исключение - Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); - Лог.Ошибка(ОписаниеОшибки()); - ВызватьИсключение ТекущаяПроцедура; - КонецПопытки; - - Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); -КонецПроцедуры - -// Выполнить команду/действие в режиме 1С:Предприятия с ожиданием выполнения и чтением лог-файла -// -// Параметры: -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ПутьФайлаИнформации - Строка - путь файла информации 1С по ключу "/out". -// ТолстыйКлиент - Булево, Неопределено - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// -Функция ЗапуститьВРежимеПредприятияСЛогФайлом(Знач ПараметрЗапуска, - Знач ОбработкаДляЗапуска, - Знач ПутьЛогаВыполненияСценариев, - Знач ТолстыйКлиент, - Знач ДополнительныеКлючиЗапуска, - Знач ДопСообщения) - - Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); - - Результат = ""; - - ТекущаяПроцедура = "ЗапуститьВРежимеПредприятияСЛогФайлом"; - - УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(Истина); - - ПутьДамп = ВременныеФайлы.НовоеИмяФайла(); - УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ПутьДамп); - - ДополнительныеКлючи = ДополнительныеКлючиЗапуска; - Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда - ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); - КонецЕсли; - - Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); - Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); - - ПараметрыСвязиСБазой = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); - ПараметрыСвязиСБазой[0] = "ENTERPRISE"; - ПараметрыСвязиСБазой.Удалить(2); - - Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда - ПараметрыСвязиСБазой.Добавить("/C" + ПараметрЗапуска); - КонецЕсли; - - Если ТолстыйКлиент = Истина Тогда - ПараметрыСвязиСБазой.Добавить("/RunModeOrdinaryApplication "); - КонецЕсли; - - ПараметрыСвязиСБазой.Добавить("/out""" + ПутьДамп + """"); - - Если ДополнительныеКлючи <> Неопределено Тогда - ПараметрыСвязиСБазой.Добавить(ДополнительныеКлючи); - КонецЕсли; - - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыСвязиСБазой Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; - - Приложение = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(); - Если ТолстыйКлиент = Истина Тогда - Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); - КонецЕсли; - - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); - КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; - Лог.Отладка(Приложение); - - Попытка - ЗапуститьПроцесс1С(Приложение, ПутьЛогаВыполненияСценариев ); - Результат = ПоказатьЛогПредприятия(ПутьДамп, ДопСообщения.ПоказыватьДополнительноЛогПредприятия); - - Исключение - ОписаниеОшибки = ОписаниеОшибки(); - - Результат = ПоказатьЛогПредприятия(ПутьДамп, Истина); - - Лог.Ошибка(ОписаниеОшибки); - ВызватьИсключение ТекущаяПроцедура; - КонецПопытки; - - Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); - - Возврат Результат; -КонецФункции - -Процедура ЗапуститьПроцесс1С(Знач СтрокаЗапуска, Знач ПутьКФайлуЛога) - - ПериодОпросаВМиллисекундах = 1000; - - НадоЧитатьЛог = Истина; - КолСтрокЛогаПрочитано = 0; - - Процесс = СоздатьПроцесс(СтрокаЗапуска); - Процесс.Запустить(); - - ТаймаутПоУмолчанию = 500; - Приостановить(ТаймаутПоУмолчанию); - - Пока НЕ Процесс.Завершен Цикл - Если ПериодОпросаВМиллисекундах <> 0 Тогда - Приостановить(ПериодОпросаВМиллисекундах); - КонецЕсли; - - Если НадоЧитатьЛог Тогда - ВывестиНовыеСообщения(ПутьКФайлуЛога, КолСтрокЛогаПрочитано); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВывестиНовыеСообщения(ИмяФайлаЛога, КолСтрокЛогаПрочитано) - Попытка - МассивСтрок = ПолучитьНовыеСтрокиЛога(ИмяФайлаЛога, КолСтрокЛогаПрочитано); - Для Каждого Стр Из МассивСтрок Цикл - Если СокрЛП(Стр) = "" Тогда - Продолжить; - КонецЕсли; - Лог.Информация(СокрЛП(Стр)); - КонецЦикла; - Исключение - Лог.Ошибка(ОписаниеОшибки()); - КонецПопытки; - -КонецПроцедуры - -Функция ПолучитьНовыеСтрокиЛога(Знач ИмяФайла, КолСтрокЛогаПрочитано) - Файл = Новый Файл(ИмяФайла); - Если Не Файл.Существует() Тогда - Возврат Новый Массив; - КонецЕсли; - - Текст = Новый ЧтениеТекста; - Текст.Открыть(ИмяФайла, "UTF-8", , , Ложь); - - ВесьТекст = Текст.Прочитать(); - - Текст.Закрыть(); - - Массив = Новый Массив(); - - МассивСтрок = СтрРазделить(ВесьТекст, Символы.ПС, Истина); - Если МассивСтрок[МассивСтрок.Количество() - 1] = "" Тогда - МассивСтрок.Удалить(МассивСтрок.Количество() - 1); - КонецЕсли; - - Для Ккк = (КолСтрокЛогаПрочитано + 1) По МассивСтрок.Количество() Цикл - Массив.Добавить(МассивСтрок[Ккк - 1]); - КонецЦикла; - - КолСтрокЛогаПрочитано = МассивСтрок.Количество(); - - Возврат Массив; -КонецФункции - -Функция ПоказатьЛогПредприятия(Знач ПутьДамп, Знач ПоказыватьДополнительноЛогПредприятия) - Результат = ""; - Если ФС.Существует(ПутьДамп) Тогда - Результат = ОбщиеМетоды.ПрочитатьФайл(ПутьДамп, КодировкаТекста.ANSI); - - Если Не ПустаяСтрока(Результат) Тогда - Сообщение = СтрШаблон("Дополнительный лог выполнения 1С:Предприятие - | - |%1", Результат); - Если ПоказыватьДополнительноЛогПредприятия Тогда - Лог.Информация(Сообщение); - Иначе - Лог.Отладка(Сообщение); - КонецЕсли; - КонецЕсли; - Иначе - Лог.Отладка("Не существует файл вывода от 1С - %1", ПутьДамп); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// <Описание процедуры> +// ЗапуститьОбновлениеИзХранилища // // Параметры: -// СтрокаПодключенияХранилище - <Тип.Вид> - <описание параметра> -// ПользовательХранилища - <Тип.Вид> - <описание параметра> -// ПарольХранилища - <Тип.Вид> - <описание параметра> -// ВерсияХранилища - <Тип.Вид> - <описание параметра> -// ДополнительныеКлючиЗапуска - <Тип.Вид> - <описание параметра> +// СтрокаПодключенияХранилище - Строка - <описание параметра> +// ПользовательХранилища - Строка - <описание параметра> +// ПарольХранилища - Строка - <описание параметра> +// ВерсияХранилища - Строка - <описание параметра> +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> // Процедура ЗапуститьОбновлениеИзХранилища( Знач СтрокаПодключенияХранилище = "", Знач ПользовательХранилища = "", Знач ПарольХранилища = "", @@ -627,9 +466,9 @@ // Создать хранилище 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// ЛогинАдминистратора - Строка - <описание параметра> +// ПарольАдминистратора - Строка - <описание параметра> // Процедура СоздатьХранилище(Знач ПутьХранилища, Знач ЛогинАдминистратора, Знач ПарольАдминистратора) Экспорт @@ -670,9 +509,11 @@ // Создать хранилище 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ИгнорироватьНаличиеПодключеннойБД - Булево - <описание параметра> +// ЗаменитьКонфигурациюБД - Булево - <описание параметра> // Процедура ПодключитьсяКХранилищу(Знач ПутьХранилища, Знач Логин, Знач Пароль, Знач ИгнорироватьНаличиеПодключеннойБД = Ложь, @@ -711,7 +552,7 @@ // Отлючить конфигурацию от хранилища // // Параметры: -// ДополнительныеКлючиЗапуска (необязательно) - Строка - дополнительные ключи запуска Конфигуратора +// ДополнительныеКлючиЗапуска - Строка - (необязательно) дополнительные ключи запуска Конфигуратора // Процедура ОтключитьсяОтХранилища(Знач ДополнительныеКлючиЗапуска = "") Экспорт @@ -745,12 +586,12 @@ // Создать пользователя хранилища 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> -// ЛогинПользователя - <Строка> - <описание параметра> -// ПарольПользователя - <Строка> - <описание параметра> -// РольПользователя - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ЛогинПользователя - Строка - <описание параметра> +// ПарольПользователя - Строка - <описание параметра> +// РольПользователя - Строка - <описание параметра> // Процедура СоздатьПользователяХранилища(Знач ПутьХранилища, Знач Логин, Знач Пароль, Знач ЛогинПользователя, Знач ПарольПользователя, @@ -827,11 +668,11 @@ // Выгрузить файл конфигурации определенной версии из хранилища 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> -// ВерсияХранилища - <Строка> - версия хранилища -// ПутьКФайлу - <Строка> - путь к файлу выгрузки +// ПутьХранилища - Строка - <описание параметра> +// ЛогинАдминистратора - Строка - <описание параметра> +// ПарольАдминистратора - Строка - <описание параметра> +// ВерсияХранилища - Строка - версия хранилища +// ПутьКФайлу - Строка - путь к файлу выгрузки // Процедура СохранитьВерсиюХранилищаВФайл(Знач ПутьХранилища, Знач ЛогинАдминистратора, Знач ПарольАдминистратора, Знач ВерсияХранилища, Знач ПутьКФайлу) Экспорт @@ -914,13 +755,60 @@ КонецПроцедуры +// Отмена захвата объектов для редактирования в хранилище конфигурации +// +// Параметры: +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ПутьКФайлуСоСпискомОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 +// путь к файлу формата XML со списком объектов. Если опция используется, будет выполнена попытка отменить захват только +// для объектов, указанных в файле. Если опция не используется, захват будет отменен для всех объектов конфигурации. +// При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет +// Подробнее о формате файла см в документации. +// ИгнорироватьИзменения - Булево - Флаг игнорирования локальных изменений (По умолчанию равно "Ложь") +// Локально измененные объекты будут получены из хранилища, и внесенные изменения будут потеряны. +// Если опция не указана, то при наличии локально измененных объектов операция будет отменена и будет выдана ошибка. +// +Процедура ОтпуститьОбъектыВХранилище(Знач ПутьХранилища, Знач Логин, Знач Пароль, + Знач ПутьКФайлуСоСпискомОбъектов = "", + Знач ИгнорироватьИзменения = Ложь) Экспорт + + Лог.Информация("Отпускаю захваченные объекты в хранилище"); + + ТекущаяПроцедура = "ОтпуститьОбъектыВХранилище"; + + Ожидаем.Что(ПутьХранилища, ТекущаяПроцедура + " не задана строка подключения к хранилищу").Заполнено(); + Ожидаем.Что(Логин, ТекущаяПроцедура + " не задан пользователь хранилища").Заполнено(); + + ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации(); + ХранилищеКонфигурации.УстановитьУправлениеКонфигуратором(УправлениеКонфигуратором); + ХранилищеКонфигурации.УстановитьПараметрыАвторизации(Логин, Пароль); + + ХранилищеКонфигурации.УстановитьПутьКХранилищу(ПутьХранилища); + + Попытка + + ХранилищеКонфигурации.ОтменитьЗахватОбъектовВХранилище(ПутьКФайлуСоСпискомОбъектов, ИгнорироватьИзменения); + + Лог.Информация("Отменение захвата объектов завершено"); + + Исключение + Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + ВызватьИсключение ТекущаяПроцедура + " + |" + Сообщение; + КонецПопытки; + +КонецПроцедуры + // Помещение изменений объектов в хранилище конфигурации // // Параметры: // ПутьХранилища - Строка - <описание параметра> // Логин - Строка - <описание параметра> // Пароль - Строка - <описание параметра> -// СписокОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 +// ПутьКФайлуСоСпискомОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 // Если опция используется, будет выполнена попытка поместить только объекты, указанные в файле. // Если опция не используется, будут помещены изменения всех объектов конфигурации. // При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет @@ -1050,90 +938,26 @@ КонецПроцедуры -// Выполняет перенос файлов из каталога плоской выгрузки в каталог с иерархической структурой метаданных. +// Выгружает расширение в исходники // -Процедура РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(Знач КаталогПлоскойВыгрузки, - Знач КаталогИерархическойВыгрузки) - - Лог.Отладка("Раскладываем модули по папкам согласно иерархии метаданных"); - - КэшПереименований = Новый Соответствие; - - //УбедитьсяЧтоФайлИлиКаталогСуществует(КаталогПлоскойВыгрузки); - - Если ПустаяСтрока(КаталогИерархическойВыгрузки) Тогда - ВызватьИсключение "Не задан каталог выгрузки модулей по иерархии"; - КонецЕсли; - - ФайлВыгрузкиКаталог = Новый Файл(КаталогИерархическойВыгрузки); - Если Не ФайлВыгрузкиКаталог.Существует() Тогда - СоздатьКаталог(КаталогИерархическойВыгрузки); - //ЗарегистрироватьВременныйФайл(КаталогИерархическойСтруктурыМодулей); TODO выяснить почему временный? - КонецЕсли; - - Переименования = Новый ТаблицаЗначений; - Переименования.Колонки.Добавить("Источник"); - Переименования.Колонки.Добавить("Приемник"); - - ИскатьВПодкаталогах = Истина; - СписокФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы(), ИскатьВПодкаталогах); - Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); - Для Каждого Файл Из СписокФайлов Цикл - ИмяФайлаДляПереименования = Файл.Имя; - - ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогПлоскойВыгрузки, ""); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - Если Файл.ЭтоКаталог() Тогда - ИмяКаталога = ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла); - ФайлКаталога = Новый Файл(ИмяКаталога); - Если ФайлКаталога.Существует() = Ложь Тогда - СоздатьКаталог(ИмяКаталога); - КонецЕсли; - Продолжить; - КонецЕсли; - ИмяФайлаДляПереименования = ИмяНовогоФайла; - - НовыйФайл = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла)); - НовыйКаталог = Новый Файл(НовыйФайл.Путь); - Если НЕ НовыйКаталог.Существует() Тогда - СоздатьКаталог(НовыйКаталог.ПолноеИмя); - КонецЕсли; - - ДобавитьПереименование(Переименования, ИмяФайлаДляПереименования, ИмяНовогоФайла); - - КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); - - Если Нрег(Прав(Файл.ПолноеИмя, 5)) = ".form" Или Нрег(Файл.Имя) = "form.bin" Тогда - КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); - ФайлКаталога = Новый Файл(КаталогФормы); - Если ФайлКаталога.Существует() Тогда - УдалитьФайлы(ФайлКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - СоздатьКаталог(КаталогФормы); - УпаковщикМетаданных.РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы); - КонецЕсли; +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ИмяРасширения - Строка - Имя расширения +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// +Процедура РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения, + Знач ФайлВерсии = "", Знач ТолькоИзмененные = Истина) Экспорт - КонецЦикла; + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); - ТекстовыйДокумент = Новый ЗаписьТекста(ОбъединитьПути(КаталогИерархическойВыгрузки, "renames.txt")); - Для Каждого ЭлементСтроки Из Переименования Цикл - ТекстовыйДокумент.ЗаписатьСтроку(ЭлементСтроки.Источник + "-->" +СтрЗаменить(ЭлементСтроки.Приемник, "/", "\")); - КонецЦикла; - ТекстовыйДокумент.Закрыть(); + ФорматВыгрузки = ""; // Всегда иерархический + УправлениеКонфигуратором.ВыгрузитьРасширениеВФайлы(КаталогВыгрузки, ИмяРасширения, ФорматВыгрузки, + Синхронизировать, ФайлВерсии); КонецПроцедуры -Функция ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) - - СтрокаПереименования = Переименования.Добавить(); - СтрокаПереименования.Источник = Источник; - СтрокаПереименования.Приемник = Приемник; - - Возврат СтрокаПереименования; - -КонецФункции - // Выгружает файл конфигурации в исходники // // Параметры: @@ -1146,7 +970,6 @@ Знач ФайлВерсии = "", Знач ИспользоватьПереименования = Ложь) Экспорт Лог.Информация("Запускаю выгрузку конфигурации в исходники"); - ТекущаяПроцедура = "ВыгрузитьКонфигурациюВИсходники"; ОбъектФайл = Новый Файл(ФайлКонфигурации); Если ОбъектФайл.Существует() = Ложь Тогда ВызватьИсключение СтроковыеФункции.ПодставитьПараметрыВСтроку("Файл cf %1 не найден", ФайлКонфигурации); @@ -1180,6 +1003,9 @@ Лог.Информация("Запускаю выгрузку расширения в файл"); ТекущаяПроцедура = "ВыгрузитьРасширенияВФайл"; + Файл = Новый Файл(ПутьКНужномуФайлуРасширения); + ФС.ОбеспечитьКаталог(Файл.Путь); + Попытка ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); @@ -1264,21 +1090,21 @@ // // Параметры: // ПутьКЗагружаемомуФайлуСДанными - Строка - Путь к файлу с данными (*.dt) +// КоличествоЗаданий - Число - Количество заданий (потоков) загрузки из файла с данными // -Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными) Экспорт +Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными, Знач КоличествоЗаданий = 0) Экспорт Лог.Информация("Запускаю загрузку информационной базы из файла"); - ТекущаяПроцедура = "ЗагрузитьИнфобазуИзФайла"; Попытка - УправлениеКонфигуратором.ЗагрузитьИнформационнуюБазу(ПутьКЗагружаемомуФайлуСДанными); + УправлениеКонфигуратором.ЗагрузитьИнформационнуюБазу(ПутьКЗагружаемомуФайлуСДанными, КоличествоЗаданий); Текст = УправлениеКонфигуратором.ВыводКоманды(); Если Не ПустаяСтрока(Текст) Тогда Лог.Информация(Текст); КонецЕсли; Исключение Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); - ВызватьИсключение ТекущаяПроцедура; + ВызватьИсключение; КонецПопытки; Лог.Информация("Загрузка из файла завершена."); @@ -1292,7 +1118,6 @@ Знач ПарольХранилища = "") Экспорт Лог.Информация("Выполняю синтакс-контроль конфигурации"); - ТекущаяПроцедура = "ВыполнитьСинтаксическийКонтроль"; РезультатПроверки = ""; Успешно = ПолучитьРезультатыСинтаксическогоКонтроля(УправлениеКонфигуратором, КоллекцияПроверок, РезультатПроверки, @@ -1300,7 +1125,7 @@ ПользовательХранилища, ПарольХранилища); - Лог.Информация("Результат синтакс-контроля: %1", РезультатПроверки); + Лог.Отладка("Результат синтакс-контроля: %1", РезультатПроверки); Возврат Успешно; @@ -1402,9 +1227,11 @@ // Загружает файл расширения в текущую базу данных. // Параметры: // ПутьКФайлу - Строка - Путь к файлу *.cfe +// ИмяРасширения - Строка +// ОбновитьКонфигурациюИБ - Булево // Процедура ЗагрузитьФайлРасширения(Знач ПутьКФайлу, Знач ИмяРасширения, Знач ОбновитьКонфигурациюИБ = Ложь) Экспорт - Перем ФайлЗагрузки, Конфигуратор, ПараметрыЗапуска; + Перем ФайлЗагрузки, Конфигуратор; Лог.Информация("Загружаю файл расширения %1", ПутьКФайлу); ФайлЗагрузки = Новый Файл(ПутьКФайлу); @@ -1418,6 +1245,15 @@ КонецПроцедуры +// Возвращает каталог времнной ИБ +// +// Возвращаемое значение: +// Строка - Каталог временной ИБ +// +Функция КаталогВременнойИБ() Экспорт + Возврат КаталогВременнойИБ; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1467,12 +1303,11 @@ КонецФункции -Функция ПолучитьЛог() +Процедура ПолучитьЛог() Если Лог = Неопределено Тогда Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); КонецЕсли; - Возврат Лог; -КонецФункции +КонецПроцедуры Функция ПодготовитьКаталогЗагрузкиПоФайлуПереименований(ВходнойКаталог, ФайлПереименований) Перем БылаОшибка; @@ -1505,8 +1340,9 @@ СоздатьКаталог(КаталогФормыНовый); МассивФайлов = НайтиФайлы(КаталогФормыСтарый, ПолучитьМаскуВсеФайлы()); Для Каждого Элемент из МассивФайлов Цикл - Лог.Отладка("Копируем " + Элемент.ПолноеИмя + "--> " +ОбъединитьПути(КаталогФормыНовый, Элемент.Имя)); - КопироватьФайл(Элемент.ПолноеИмя, ОбъединитьПути(КаталогФормыНовый, Элемент.Имя)); + НовыйПутьФормы = ОбъединитьПути(КаталогФормыНовый, Элемент.Имя); + Лог.Отладка("Копируем " + Элемент.ПолноеИмя + "--> " + НовыйПутьФормы); + КопироватьФайл(Элемент.ПолноеИмя, НовыйПутьФормы); КонецЦикла; УпаковщикМетаданных.УпаковатьКонтейнерМетаданных(КаталогФормыНовый, ФайлНовый.ПолноеИмя); @@ -1544,7 +1380,9 @@ Если ФайлПереименований.Существует() Тогда ПутьВыгрузки = ФайлПереименований.Путь; ФайлКонфигурации = Новый Файл(ОбъединитьПути(ПутьВыгрузки, "Configuration.xml")); - Если ФайлКонфигурации.ПолучитьВремяИзменения() <= ФайлПереименований.ПолучитьВремяИзменения() Тогда + ФайлКонфигурацииВремяИзменения = ФайлКонфигурации.ПолучитьВремяИзменения(); + ФайлПереименованийВремяИзменения = ФайлПереименований.ПолучитьВремяИзменения(); + Если ФайлКонфигурацииВремяИзменения <= ФайлПереименованийВремяИзменения Тогда Рез = Истина; Лог.Отладка("Файл конфигурации %1 создан не позже файла переименований %2", @@ -1554,9 +1392,9 @@ Лог.Отладка("Файл конфигурации %1 создан позже файла переименований %2", ФайлКонфигурации.Имя, ФайлПереименований.Имя); Лог.Отладка(" Дата/время файла конфигурации %1 - %2", - ФайлКонфигурации.Имя, ФайлКонфигурации.ПолучитьВремяИзменения()); + ФайлКонфигурации.Имя, ФайлКонфигурацииВремяИзменения); Лог.Отладка(" Дата/время файла переименований %1 - %2", - ФайлПереименований.Имя, ФайлПереименований.ПолучитьВремяИзменения()); + ФайлПереименований.Имя, ФайлПереименованийВремяИзменения); Лог.Отладка("Файл переименований использовать нельзя, использую только штатную загрузку через Конфигуратор."); КонецЕсли; Иначе @@ -1566,6 +1404,372 @@ Возврат Рез; КонецФункции +// Выполнить команду/действие в режиме 1С:Предприятия +// +// Параметры: +// ПараметрЗапуска - Строка - <описание параметра> +// ОбработкаДляЗапуска - Строка - <описание параметра> +// ТолстыйКлиент - Булево - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ОжидатьЗавершения - Булево - по умолчанию Истина, Ложь - запускает и завершает свой процесс. +// ДопСообщения - Структура +// +Процедура ЗапуститьВРежимеПредприятия(Знач ПараметрЗапуска, + Знач ОбработкаДляЗапуска, Знач ТолстыйКлиент, + Знач ДополнительныеКлючиЗапуска, + Знач ОжидатьЗавершения, Знач ДопСообщения) + + Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); + + ТекущаяПроцедура = ДопСообщения.Ключ; + + Если ТолстыйКлиент = Ложь Тогда + ТонкийКлиент1С = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(УправлениеКонфигуратором.ПутьКПлатформе1С()); + УправлениеКонфигуратором.ПутьКПлатформе1С(ТонкийКлиент1С); + КонецЕсли; + + УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(ОжидатьЗавершения); + + Если Не ОжидатьЗавершения Тогда + УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла()); + КонецЕсли; + + ДополнительныеКлючи = ДополнительныеКлючиЗапуска; + Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда + ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); + КонецЕсли; + + Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); + Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); + + Попытка + УправлениеКонфигуратором.ЗапуститьВРежимеПредприятия(ПараметрЗапуска, + ?(ТипЗнч(ТолстыйКлиент) = Тип("Булево"), Не ТолстыйКлиент, ТолстыйКлиент), + ДополнительныеКлючи + ); + Текст = УправлениеКонфигуратором.ВыводКоманды(); + Если Не ПустаяСтрока(Текст) Тогда + Лог.Информация(Текст); + КонецЕсли; + + Исключение + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + Лог.Ошибка(ОписаниеОшибки()); + ВызватьИсключение ТекущаяПроцедура; + КонецПопытки; + + Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); +КонецПроцедуры + +// Выполнить команду/действие в режиме 1С:Предприятия с ожиданием выполнения и чтением лог-файла +// +// Параметры: +// ПараметрЗапуска - Строка - <описание параметра> +// ОбработкаДляЗапуска - Строка - <описание параметра> +// ПутьЛогаВыполненияСценариев - Строка - путь файла информации 1С по ключу "/out". +// ТолстыйКлиент - Булево, Неопределено - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ДопСообщения - Структура - см. НовыеДопСообщенияДляЗапускаПредприятия +// * ПоказыватьДополнительноЛогПредприятия - Булево +// +// Возвращаемое значение: +// Строка - лог 1С:Предприятие +// +Функция ЗапуститьВРежимеПредприятияСЛогФайлом(Знач ПараметрЗапуска, + Знач ОбработкаДляЗапуска, + Знач ПутьЛогаВыполненияСценариев, + Знач ТолстыйКлиент, + Знач ДополнительныеКлючиЗапуска, + Знач ДопСообщения) + + Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); + + Результат = ""; + + ТекущаяПроцедура = "ЗапуститьВРежимеПредприятияСЛогФайлом"; + + УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(Истина); + + ПутьДамп = ВременныеФайлы.НовоеИмяФайла(); + УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ПутьДамп); + + ДополнительныеКлючи = ДополнительныеКлючиЗапуска; + Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда + ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); + КонецЕсли; + + Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); + Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); + + ПараметрыСвязиСБазой = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); + ПараметрыСвязиСБазой[0] = "ENTERPRISE"; + ПараметрыСвязиСБазой.Удалить(2); + + Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда + ПараметрыСвязиСБазой.Добавить("/C" + ПараметрЗапуска); + КонецЕсли; + + Если ТолстыйКлиент = Истина Тогда + ПараметрыСвязиСБазой.Добавить("/RunModeOrdinaryApplication "); + КонецЕсли; + + ПараметрыСвязиСБазой.Добавить("/out""" + ПутьДамп + """"); + + Если ДополнительныеКлючи <> Неопределено Тогда + ПараметрыСвязиСБазой.Добавить(ДополнительныеКлючи); + КонецЕсли; + + СтрокаЗапуска = ""; + Для Каждого Параметр Из ПараметрыСвязиСБазой Цикл + СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; + КонецЦикла; + + Приложение = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(); + Если ТолстыйКлиент = Истина Тогда + Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); + КонецЕсли; + + Если Найти(Приложение, " ") > 0 Тогда + Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); + КонецЕсли; + Приложение = Приложение + " " + СтрокаЗапуска; + Лог.Отладка(Приложение); + + Попытка + ЗапуститьПроцесс1С(Приложение, ПутьЛогаВыполненияСценариев ); + Результат = ВыводПредприятия(ПутьДамп); + + ПроверитьЛогПредприятияНаИзвестныеОшибки(Результат); + + ПоказатьВыводПредприятия(Результат, ДопСообщения.ПоказыватьДополнительноЛогПредприятия); + + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + + Результат = ВыводПредприятия(ПутьДамп); + ПоказатьВыводПредприятия(Результат, Истина); + + Лог.Ошибка(ОписаниеОшибки); + ВызватьИсключение ТекущаяПроцедура; + КонецПопытки; + + Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); + + Возврат Результат; +КонецФункции + +Процедура ЗапуститьПроцесс1С(Знач СтрокаЗапуска, Знач ПутьКФайлуЛога) + + ПериодОпросаВМиллисекундах = 1000; + + НадоЧитатьЛог = Истина; + КолСтрокЛогаПрочитано = 0; + + Процесс = СоздатьПроцесс(СтрокаЗапуска); + Процесс.Запустить(); + + ТаймаутПоУмолчанию = 500; + Приостановить(ТаймаутПоУмолчанию); + + Пока НЕ Процесс.Завершен Цикл + Если ПериодОпросаВМиллисекундах <> 0 Тогда + Приостановить(ПериодОпросаВМиллисекундах); + КонецЕсли; + + Если НадоЧитатьЛог Тогда + ВывестиНовыеСообщения(ПутьКФайлуЛога, КолСтрокЛогаПрочитано); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Выполняет перенос файлов из каталога плоской выгрузки в каталог с иерархической структурой метаданных. +// +Процедура РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(Знач КаталогПлоскойВыгрузки, + Знач КаталогИерархическойВыгрузки) + + Лог.Отладка("Раскладываем модули по папкам согласно иерархии метаданных"); + + Если ПустаяСтрока(КаталогИерархическойВыгрузки) Тогда + ВызватьИсключение "Не задан каталог выгрузки модулей по иерархии"; + КонецЕсли; + + ФайлВыгрузкиКаталог = Новый Файл(КаталогИерархическойВыгрузки); + Если Не ФайлВыгрузкиКаталог.Существует() Тогда + СоздатьКаталог(КаталогИерархическойВыгрузки); + //ЗарегистрироватьВременныйФайл(КаталогИерархическойСтруктурыМодулей); TODO выяснить почему временный? + КонецЕсли; + + Переименования = Новый ТаблицаЗначений; + Переименования.Колонки.Добавить("Источник"); + Переименования.Колонки.Добавить("Приемник"); + + ИскатьВПодкаталогах = Истина; + СписокФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы(), ИскатьВПодкаталогах); + Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); + Для Каждого Файл Из СписокФайлов Цикл + + ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогПлоскойВыгрузки, ""); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + Если Файл.ЭтоКаталог() Тогда + ИмяКаталога = ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла); + ФайлКаталога = Новый Файл(ИмяКаталога); + Если ФайлКаталога.Существует() = Ложь Тогда + СоздатьКаталог(ИмяКаталога); + КонецЕсли; + Продолжить; + КонецЕсли; + ИмяФайлаДляПереименования = ИмяНовогоФайла; + + НовыйФайл = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла)); + НовыйКаталог = Новый Файл(НовыйФайл.Путь); + Если НЕ НовыйКаталог.Существует() Тогда + СоздатьКаталог(НовыйКаталог.ПолноеИмя); + КонецЕсли; + + ДобавитьПереименование(Переименования, ИмяФайлаДляПереименования, ИмяНовогоФайла); + + КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); + + Если Нрег(Прав(Файл.ПолноеИмя, 5)) = ".form" Или Нрег(Файл.Имя) = "form.bin" Тогда + КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); + ФайлКаталога = Новый Файл(КаталогФормы); + Если ФайлКаталога.Существует() Тогда + УдалитьФайлы(ФайлКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы()); + КонецЕсли; + СоздатьКаталог(КаталогФормы); + УпаковщикМетаданных.РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы); + КонецЕсли; + + КонецЦикла; + + ТекстовыйДокумент = Новый ЗаписьТекста(ОбъединитьПути(КаталогИерархическойВыгрузки, "renames.txt")); + Для Каждого ЭлементСтроки Из Переименования Цикл + ТекстовыйДокумент.ЗаписатьСтроку(ЭлементСтроки.Источник + "-->" +СтрЗаменить(ЭлементСтроки.Приемник, "/", "\")); + КонецЦикла; + ТекстовыйДокумент.Закрыть(); + +КонецПроцедуры + +Процедура ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) + СтрокаПереименования = Переименования.Добавить(); + СтрокаПереименования.Источник = Источник; + СтрокаПереименования.Приемник = Приемник; +КонецПроцедуры + +Процедура ВывестиНовыеСообщения(ИмяФайлаЛога, КолСтрокЛогаПрочитано) + Попытка + МассивСтрок = ПолучитьНовыеСтрокиЛога(ИмяФайлаЛога, КолСтрокЛогаПрочитано); + Для Каждого Стр Из МассивСтрок Цикл + Если СокрЛП(Стр) = "" Тогда + Продолжить; + КонецЕсли; + Лог.Информация(СокрЛП(Стр)); + КонецЦикла; + Исключение + Лог.Ошибка(ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьНовыеСтрокиЛога(Знач ИмяФайла, КолСтрокЛогаПрочитано) + Файл = Новый Файл(ИмяФайла); + Если Не Файл.Существует() Тогда + Возврат Новый Массив; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ИмяФайла, "UTF-8", , , Ложь); + + ВесьТекст = Текст.Прочитать(); + + Текст.Закрыть(); + + Массив = Новый Массив(); + + МассивСтрок = СтрРазделить(ВесьТекст, Символы.ПС, Истина); + Если ЗначениеЗаполнено(МассивСтрок) Тогда + КоличествоМинус1 = МассивСтрок.Количество() - 1; + Если МассивСтрок[КоличествоМинус1] = "" Тогда + МассивСтрок.Удалить(КоличествоМинус1); + КонецЕсли; + КонецЕсли; + + Для Ккк = (КолСтрокЛогаПрочитано + 1) По МассивСтрок.Количество() Цикл + Массив.Добавить(МассивСтрок[Ккк - 1]); + КонецЦикла; + + КолСтрокЛогаПрочитано = МассивСтрок.Количество(); + + Возврат Массив; +КонецФункции + +Процедура ПроверитьЛогПредприятияНаИзвестныеОшибки(ЛогПредприятия) + + НормализованныйЛог = НРег(ЛогПредприятия); + Для каждого Ошибка Из ИзвестныеНормализованныеОшибки() Цикл + Если Найти(НормализованныйЛог, Ошибка) > 0 Тогда + ВызватьИсключение Ошибка; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ИзвестныеНормализованныеОшибки() + Ошибки = Новый Массив; + Ошибки.Добавить("Пользователь ИБ не идентифицирован"); + Ошибки.Добавить("Уже существуют пользователи. Пользователь-администратор не создан"); + + Результат = Новый Массив; + Для каждого Ошибка Из Ошибки Цикл + Результат.Добавить(НРег(Ошибка)); + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ВыводПредприятия(Знач ПутьДамп) + Результат = ""; + Если ФС.Существует(ПутьДамп) Тогда + Результат = ОбщиеМетоды.ПрочитатьФайл(ПутьДамп, КодировкаТекста.ANSI); + Иначе + Лог.Отладка("Не существует файл вывода от 1С - %1", ПутьДамп); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ПоказатьВыводПредприятия(Знач ТекстВывода, Знач ПоказыватьВЛоге) + + Если Не ПустаяСтрока(ТекстВывода) Тогда + Сообщение = СтрШаблон("Дополнительный лог выполнения 1С:Предприятие + | + |%1", ТекстВывода); + + Если ПоказыватьВЛоге Тогда + Лог.Информация(Сообщение); + Иначе + Лог.Отладка(Сообщение); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ТекущаяВерсияПлатформы() + + ПутьПредприятия = УправлениеКонфигуратором.ПутьКПлатформе1С(); + ШаблонВерсии = Новый РегулярноеВыражение("8(\.\d+){3}"); + ВсеСовпадения = ШаблонВерсии.НайтиСовпадения(ПутьПредприятия); + Если ВсеСовпадения.Количество() = 0 Тогда + ВызватьИсключение "Неопределена версия платформы!"; + КонецЕсли; + + Возврат ВсеСовпадения[0].Значение; + +КонецФункции + #КонецОбласти ПолучитьЛог(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" index 335ad444..ea10dba1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" @@ -18,15 +18,13 @@ Процедура Разобрать(Знач Путь, Знач КаталогВыгрузки, Знач СтрокаПодключения = "", Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач КлючКэша = Неопределено) Экспорт - Перем КаталогВременнойИБ; - Инициализировать(); Файл = Новый Файл(Путь); КорневойПутьВыходной = Файл.ПолноеИмя; КлючКэша = ?(КлючКэша = Неопределено ИЛИ Не ЗначениеЗаполнено(КлючКэша), "compileepfrunner", КлючКэша); - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json", "./build/cache.json"); + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, ИмяКешФайла(), ИмяКешФайла()); Если НастройкиИзФайла.Количество() = 0 Тогда НастройкиИзФайла = Новый Соответствие(); @@ -48,19 +46,15 @@ ЕстьИзмененияДляЗаписи = Ложь; СледитьЗаИзменениямиФайловВРабочемКаталоге(ЗначенияПараметровСборки, НастройкиИзФайла, , ЕстьИзмененияДляЗаписи); Если ЕстьИзмененияДляЗаписи Тогда - ПутьККэшу = Новый Файл(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json")).Путь; - Если Новый Файл(ПутьККэшу).Существует() Тогда - ЗаписатьФайлJSON(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json"), НастройкиИзФайла); - КонецЕсли; + ЗаписатьВКешФайл(НастройкиИзФайла); КонецЕсли; -КонецПроцедуры // Разобрать +КонецПроцедуры Процедура Собрать(Знач Путь, Знач КаталогВыгрузки, Знач СтрокаПодключения = "", Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач ТолькоКопировать = Ложь, Знач КлючКэша = Неопределено) Экспорт Перем КаталогВременнойИБ; - Рекурсивно = Истина; ПутьКИсходникам = ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, Путь); ПапкаИсходников = Новый Файл(ПутьКИсходникам); @@ -82,7 +76,7 @@ НастройкиИзФайла.Вставить(КлючКэша, Новый Соответствие); Иначе Лог.Отладка("Начали читать"); - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json", "./build/cache.json"); + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, ИмяКешФайла(), ИмяКешФайла()); Лог.Отладка("Закончили читать"); Если НастройкиИзФайла.Количество() = 0 Тогда НастройкиИзФайла = Новый Соответствие(); @@ -106,12 +100,7 @@ СледитьЗаИзменениямиФайловВРепозиторииИсходников(ЗначенияПараметровСборки, НастройкиИзФайла, , ЕстьИзмененияДляЗаписи); Лог.Отладка("Закончили собирать " + ЕстьИзмененияДляЗаписи + " " + ТолькоКопировать); Если ЕстьИзмененияДляЗаписи И НЕ ТолькоКопировать Тогда - ПутьККэшу = Новый Файл(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json")).Путь; - Если Новый Файл(ПутьККэшу).Существует() Тогда - Лог.Отладка("Начали записывать"); - ЗаписатьФайлJSON(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json"), НастройкиИзФайла); - Лог.Отладка("закончили записывать"); - КонецЕсли; + ЗаписатьВКешФайл(НастройкиИзФайла); КонецЕсли; КонецПроцедуры @@ -213,7 +202,11 @@ ЕстьИзменения = Истина; - Если НЕ ЭтоБинарныйОбъект1С И НЕ РежимОдногоКаталога Тогда + Если НЕ ЭтоБинарныйОбъект1С Тогда + Если РежимОдногоКаталога Тогда + Продолжить; + КонецЕсли; + ФайлНовый = Новый Файл(ПутьФайлаНазначения); КаталогНовый = Новый Файл(ФайлНовый.Путь); Если НЕ КаталогНовый.Существует() Тогда @@ -233,8 +226,7 @@ Кэш.Вставить(ФайлНовый.ПолноеИмя, ХэшФайла(ФайлНовый)); КэшОбновляемый.Вставить(ФайлНовый.ПолноеИмя, Кэш.Получить(ФайлНовый.ПолноеИмя)); Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", Файл.Имя, ФайлНовый.ПолноеИмя)); - Продолжить; - ИначеЕсли НЕ ЭтоБинарныйОбъект1С И РежимОдногоКаталога Тогда + Продолжить; КонецЕсли; @@ -245,7 +237,6 @@ Лог.Отладка(" назначение :%1", КаталогИсходящий); Лог.Отладка(" новый путь :%1", ПутьФайлаНазначения); - Лог.Отладка("Разбираем внешнюю обработку/отчет %1", Файл.ПолноеИмя); СоздатьКаталог(ПутьФайлаНазначения); КаталогРазобранный = РазобратьФайлВнешняяОбработка(Файл, КаталогИсходящий, КаталогВходящийДляРазбора, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); @@ -522,22 +513,21 @@ КонецЕсли; Для Каждого Файл Из Файлы Цикл - Если Лев(Файл.Имя, 4) = ".git" Или Врег(Файл.Имя) = Врег("build") Или Врег(Файл.Имя) = Врег("cache.txt") Тогда + ИмяФайла = Файл.Имя; + ИмяФайлаВРег = Врег(ИмяФайла); + Если Лев(ИмяФайла, 4) = ".git" Или ИмяФайлаВРег = "BUILD" Или ИмяФайлаВРег = "CACHE.TXT" Тогда Продолжить; КонецЕсли; Если Файл.ЭтоКаталог() Тогда - Если Лев(Файл.Имя, 4) = ".git" Тогда - Продолжить; - КонецЕсли; - Если Файл.ЭтоКаталог() И - ОбъединитьПути(Новый Файл(Файл.ПолноеИмя).ПолноеИмя, "./") = ОбъединитьПути(Новый Файл(КаталогВыгрузки).ПолноеИмя, "./") Тогда + ПолноеИмяКаталога = Файл.ПолноеИмя; + ФайлНовый = Новый Файл(ПолноеИмяКаталога); + Если ОбъединитьПути(ФайлНовый.ПолноеИмя, "./") = ОбъединитьПути(Новый Файл(КаталогВыгрузки).ПолноеИмя, "./") Тогда Продолжить; КонецЕсли; - ФайлНовый = Новый Файл(Файл.ПолноеИмя); ФайлКаталогВВыгрузке = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталога)); Если НЕ ФайлКаталогВВыгрузке.Существует() Тогда Лог.Отладка(СтрШаблон("Создаем новый каталог %1", ФайлКаталогВВыгрузке.ПолноеИмя)); @@ -547,13 +537,13 @@ РазобратьКаталог(ФайлНовый, КаталогВыгрузки, КаталогКорень, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); ИначеЕсли ОбщиеМетоды.ТипФайлаПоддерживается(Файл) Тогда - Лог.Отладка(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Отладка(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", ИмяФайла, ИмяКаталогаВыгрузки)); РазобратьФайлВнешняяОбработка(Файл, КаталогВыгрузки, КаталогКорень, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); - Лог.Отладка(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Отладка(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", ИмяФайла, ИмяКаталогаВыгрузки)); Иначе - ОтносительныйПутьКаталогаФайла = ФС.ОтносительныйПуть(КаталогКорень, Файл.ПолноеИмя); + ОтносительныйПутьКаталогаФайла = ФС.ОтносительныйПуть(КаталогКорень, ПолноеИмяКаталога); Лог.Отладка("ОтносительныйПутьКаталогаФайла <" + ОтносительныйПутьКаталогаФайла + ">"); ПутьФайлаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); Лог.Отладка("ПутьФайлаИсходников <" + ПутьФайлаИсходников + ">"); @@ -575,9 +565,9 @@ КонецЕсли; - КопироватьФайл(Файл.ПолноеИмя, ФайлНовый.ПолноеИмя); + КопироватьФайл(ПолноеИмяКаталога, ФайлНовый.ПолноеИмя); - Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", Файл.Имя, ФайлНовый.ПолноеИмя)); + Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", ИмяФайла, ФайлНовый.ПолноеИмя)); КонецЕсли; КонецЦикла; @@ -625,7 +615,6 @@ КонецФункции - Процедура ЗапуститьРаспаковкуВнешнихОбработок(Знач Файл, Знач ПапкаИсходников, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы) Лог.Отладка("Запускаем распаковку файла"); @@ -660,7 +649,6 @@ Лог.Отладка("Очищаем каталог временной ИБ"); УдалитьФайлы(Конфигуратор.ФайлИнформации()); - ИскатьВПодкаталогах = Истина; СписокФайлов = НайтиФайлы(ВременныйКаталог, "*.bin", ИскатьВПодкаталогах); Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); @@ -694,18 +682,15 @@ КонецПроцедуры - -Функция ЗаписатьФайлJSON(ИмяФайла, Значение) +Процедура ЗаписатьФайлJSON(ИмяФайла, Значение) Лог.Отладка(ИмяФайла); - ФайлСуществующий = Новый Файл(ИмяФайла); ПарсерJSON = Новый ПарсерJSON(); JsonСтрока = ПарсерJSON.ЗаписатьJSON(Значение); Запись = Новый ЗаписьТекста(ИмяФайла); Запись.Записать(JsonСтрока); Запись.Закрыть(); - Возврат Истина; -КонецФункции +КонецПроцедуры Процедура ОбновитьЗависимыйКэш(АвтоОбновление, КэшПутей, КэшОбновляемый) @@ -738,14 +723,10 @@ КонецПроцедуры - Функция СобратьФайлВнешнейОбработки(Знач ПутьКИсходникам, Знач КаталогВыгрузки, Знач СтрокаПодключения, Знач Пользователь, Знач Пароль, Знач ВерсияПлатформы) Лог.Отладка("Собираю исходники <" + ПутьКИсходникам + ">"); - ПапкаИсходников = Новый Файл(ПутьКИсходникам); - ИмяПапки = ПапкаИсходников.Имя; - НайденныйФайл = НайтиФайлы(ПутьКИсходникам, "*.xml"); Ожидаем.Что(НайденныйФайл.Количество(), "Базовый файл xml <" + ПутьКИсходникам + ">*.xml должен существовать").Больше(0); @@ -819,20 +800,18 @@ Функция ЭтоПутьКИсходнымКодамОбработок(ПутьКПапке) - Результат = Ложь; - МассивИмен = НайтиФайлы(ПутьКПапке, "*.xml", Ложь); Для Каждого Элемент Из МассивИмен Цикл ЧтениеТекста = Новый ЧтениеТекста(Элемент.ПолноеИмя); Содержание = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - Если Найти(Врег(Содержание), Врег(" файл по пути <%2> существует, а его нет!", + ЗначениеПараметраФайлНастроек, + ФайлОбщихНастроек.ПолноеИмя) + ).ЭтоИстина(); + КонецЕсли; + + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, + ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); + + ЗначенияПараметровНизкийПриоритет = Новый Соответствие; + + Если ЗначениеЗаполнено(НастройкиИзФайла) Тогда + ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); + КонецЕсли; + + СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); + + ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); + + ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); + + // на случай переопределения этой настройки повторная установка + ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); + + ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + ДобавитьДанныеПодключения(ЗначенияПараметров); + + НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); + НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); + + НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + +КонецПроцедуры // ДополнитьЗначенияПараметров + +Процедура ВключитьВыводОтладочногоЛогаВОтдельныйФайл(Знач ЗначенияПараметров) + + Лог = Лог(); + + ПутьФайлаВывода = ""; + Если ЗначенияПараметров["--debuglogfile"] <> Неопределено Тогда + ПутьФайлаВывода = ЗначенияПараметров["--debuglogfile"]; + ФайлВывода = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайлаВывода)); + ФС.ОбеспечитьКаталог(ФайлВывода.Путь); + ИначеЕсли ЗначенияПараметров["--debuglog"] Тогда + // специально не через ВременныеФайлы для возможности сохранения файла после завершения + ПутьФайлаВывода = ПолучитьИмяВременногоФайла(".log"); // BSLLS:MissingTemporaryFileDeletion-off + ФайлВывода = Новый Файл(ПутьФайлаВывода); + ПутьФайлаВывода = ОбъединитьПути(ФайлВывода.Путь, "vrunner-" + ФайлВывода.Имя); // BSLLS:MissingTemporaryFileDeletion-off + Иначе + Возврат; + КонецЕсли; + + ФайлЖурнала = Новый ВыводЛогаВФайл; + ФайлЖурнала.ОткрытьФайл(ПутьФайлаВывода); + + Если Не Лог.ДобавленыСобственныеСпособыВывода() Тогда + ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); + Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); + КонецЕсли; + + Лог.ДобавитьСпособВывода(ФайлЖурнала, УровниЛога.Отладка); + + Лог.Отладка("Подключил вывод отладочного лога в отдельный файл %1", ПутьФайлаВывода); + +КонецПроцедуры + +Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) + + Лог = ДополнительныеПараметры.Лог; + + ИмяСтрокаСоединения = "--ibconnection"; + ИмяСтрокаСоединенияСтарое = "--ibname"; + СтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединения]; + ИмяБазы = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда + ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", ИмяСтрокаСоединения, "--ibname"); + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПодключения) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, СтрокаПодключения); + Иначе + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИмяБазы); + + Если ЗначениеЗаполнено(ИмяБазы) Тогда + Лог.Предупреждение("------------------------------------------------------------------"); + Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); + Лог.Предупреждение("------------------------------------------------------------------"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, + ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое])); + + ИсходнаяСтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( + ИсходнаяСтрокаПодключения, + ЗначенияПараметров["--nocacheuse"]); + + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, НоваяСтрокаПодключения); + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИсходнаяСтрокаПодключения); + + КонецЕсли; + + ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); +КонецПроцедуры + +Функция ДанныеПодключения(ЗначенияПараметров) + СтруктураПодключения = Новый Структура; + + // здесь может находиться и имя базы и строка подключения + СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); + + // если ИспользоватьВременнуюБазу, тогда используется временная база, + // что важно для некоторых команд, например, при работе с хранилищем + СтруктураПодключения.Вставить("ИспользоватьВременнуюБазу", Ложь); + + // здесь может находиться только строка подключения в виде пути к базе + СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); + + СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); + СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); + СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); + СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); + СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); + СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); + + Рез = Новый Структура; + Для каждого КлючЗначение Из СтруктураПодключения Цикл + Значение = КлючЗначение.Значение; + Если Значение = Неопределено Тогда + Значение = ""; + КонецЕсли; + Рез.Вставить(КлючЗначение.Ключ, Значение); + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Рез); +КонецФункции + +Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) + Рез = ЗначенияПараметров["--root"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ЗначенияПараметров["--workspace"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ""; + КонецЕсли; + КонецЕсли; + Возврат Рез; +КонецФункции + +Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) + Если Не ПараметрыСистемы.ЭтоWindows Тогда + Возврат; + КонецЕсли; + РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); + РегулярноеВыражение.Многострочный = Истина; + Для каждого КлючЗначение Из ЗначенияПараметров Цикл + Значение = КлючЗначение.Значение; + Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда + ВызватьИсключение СтрШаблон( + "Запрещено использование слешей как последних символов в параметрах.%1" + + " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", + Символы.ПС, КлючЗначение.Ключ, Значение); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" index 6bd73474..6c221cdd 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" @@ -14,23 +14,26 @@ КонецФункции -// Возвращает парсер списка баз, для возможности его модификации. +// Возвращает парсер списка баз для возможности его модификации. +// +// Возвращаемое значение: +// ПарсерСпискаБаз - результат +// Функция ПолучитьПарсерБаз() Экспорт - Перем Парсер; - Парсер = Новый ПарсерСпискаБаз; + Результат = Новый ПарсерСпискаБаз; Если ЗначениеЗаполнено(ФайлПарсераСпискаБаз) Тогда - Парсер.УстановитьФайл(ФайлПарсераСпискаБаз); + Результат.УстановитьФайл(ФайлПарсераСпискаБаз); Иначе СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; Если НЕ ЭтоWindows Тогда - ЗначениеПеременной = ПолучитьПеременнуюСреды(ВРег("HOME")); + ЗначениеПеременной = ПолучитьПеременнуюСреды("HOME"); ФайлСпискаБаз = Новый Файл(ОбъединитьПути(ЗначениеПеременной, ".1C/1cestart/ibases.v8i")).ПолноеИмя; - Парсер.УстановитьФайл(ФайлСпискаБаз); + Результат.УстановитьФайл(ФайлСпискаБаз); КонецЕсли; КонецЕсли; - Возврат Парсер; + Возврат Результат; КонецФункции // Получает строку названия базы в списке подключения @@ -46,9 +49,8 @@ // Неопределено - в случаи ошибки поиска, парсинга или какой другой. // Функция ПолучитьИмяБазыВСписке(Знач СтрокаПодключения, Знач ВидЗначения = "Name", Знач Парсер = Неопределено) Экспорт - Лог = ПолучитьЛог(); Результат = Неопределено; - СтрокаПоиска = ""; + Лог = ПолучитьЛог(); Попытка Если Парсер = Неопределено Тогда Парсер = ПолучитьПарсерБаз(); @@ -92,7 +94,7 @@ Возврат Результат; -КонецФункции // ПолучитьИмяБазыВСписке +КонецФункции // Добавляет в список базу новую базу по наименованию проекта, в случаи задвоения к наименованию // добавляем еще и CRC32 от полного пути проекта. @@ -129,7 +131,6 @@ Возврат; КонецЕсли; - ДобавилиБазу = Ложь; Попытка Парсер = ПолучитьПарсерБаз(); СписокБаз = Парсер.ПолучитьСписокБаз(); @@ -140,7 +141,6 @@ Для Каждого ИмяБазы из МассивНаименований Цикл Если Парсер.НайтиПоИмени(ИмяБазы) = Неопределено Тогда - ДобавилиБазу = Истина; ОписаниеБазы = ОписаниеБазыВСписке(ДопПараметры); ОписаниеБазы.Вставить("Name", ИмяБазы); ОписаниеБазы.Вставить("Connect", Новый Структура("String", СтрокаКоннекта(СтрокаПодключения))); @@ -155,11 +155,12 @@ КонецЕсли; КонецЦикла; -КонецПроцедуры // ДобавитьБазуВСписокБаз +КонецПроцедуры Функция СтрокаКоннекта(Знач СтрокаПодключения) Результат = ""; - Если Врег(Лев(СтрокаПодключения, 2)) = "/F" Тогда + ВариантСтрокиПодключения = Врег(Лев(СтрокаПодключения, 2)); + Если ВариантСтрокиПодключения = "/F" Тогда // Connect=File="/home/evgensosna/projects/land/build/ib"; // Кавычки убираем два раза, вдруг кавычки в кавычках. СтрокаПредварительно = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); @@ -167,7 +168,7 @@ СтрокаПредварительно = СтрЗаменить(СтрокаПредварительно, "\", ПолучитьРазделительПути()); СтрокаПредварительно = Новый Файл(СтрокаПредварительно).ПолноеИмя; Результат = "Connect=File=""" + СтрокаПредварительно + """"; - ИначеЕсли Врег(Лев(СтрокаПодключения, 2)) = "/S" Тогда + ИначеЕсли ВариантСтрокиПодключения = "/S" Тогда // Connect=Srvr="serverssl.service.th.consul";Ref="ssl"; РезультатПромежуточный = ОбщиеМетоды.УбратьКавычкиВокругПути( ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3)) @@ -182,7 +183,7 @@ Результат = СтрокаПодключения; КонецЕсли; Возврат Результат; -КонецФункции // СтрокаКоннекта(Знач СтрокаПодключения) +КонецФункции // Возвращает структуру с описанием базы данных // @@ -211,7 +212,7 @@ КонецЕсли; Возврат Результат; -КонецФункции // ОписаниеБазыВСписке +КонецФункции Функция ПреобразоватьСтрокуПодключения(Знач СтрокаПодключения = Неопределено) Экспорт Лог = ПолучитьЛог(); @@ -241,7 +242,7 @@ Возврат Результат; -КонецФункции // ПреобразоватьСтрокуПодключения +КонецФункции // Возвращает строку с именем в общем списке баз или же исходную, с условием использования кэша. // Параметры: @@ -263,4 +264,4 @@ Результат = ?(НеИспользоватьКэш, СтрокаПодключения, ПреобразоватьСтрокуПодключения(СтрокаПодключения)); Возврат Результат; -КонецФункции // ПолучитьСтрокуПодключенияСКэшем() +КонецФункции diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" index b328ef64..2caf423b 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" @@ -64,13 +64,27 @@ // Значение - Строка - значение, на которое нужно заменить // Процедура ДобавитьШаблоннуюПеременную(Знач Переменная, Знач Значение) Экспорт + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - Если Не ЗначениеЗаполнено(Переменные) Тогда - Переменные = Новый Структура; - КонецЕсли; - Лог.Отладка("Добавляю шаблонную переменную %1, значение <%2>", Переменная, Значение); - Переменные.Вставить(Переменная, Значение); + БлокировкаРесурса = Новый БлокировкаРесурса(Переменные); + БлокировкаРесурса.Заблокировать(); + + Попытка + + Лог.Отладка("Добавляю шаблонную переменную %1, значение <%2>", Переменная, Значение); + Переменные.Вставить(Переменная, Значение); + + Исключение + + БлокировкаРесурса.Разблокировать(); + + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + КонецПопытки; + + БлокировкаРесурса.Разблокировать(); + КонецПроцедуры // ЗаменитьШаблонныеПеременныеВКоллекции @@ -96,15 +110,36 @@ Функция ЗаменитьШаблонныеПеременныеВСтроке(Знач ИсходнаяСтрока) Рез = ИсходнаяСтрока; - Для каждого КлючЗначение Из Переменные Цикл - Рез = СтрЗаменить(Рез, "$" + КлючЗначение.Ключ, КлючЗначение.Значение); - Рез = СтрЗаменить(Рез, "$" + НРег(КлючЗначение.Ключ), КлючЗначение.Значение); - Рез = СтрЗаменить(Рез, "$" + ВРег(КлючЗначение.Ключ), КлючЗначение.Значение); - КонецЦикла; + + БлокировкаРесурса = Новый БлокировкаРесурса(Переменные); + БлокировкаРесурса.Заблокировать(); + + Попытка + + Для каждого КлючЗначение Из Переменные Цикл + Рез = СтрЗаменить(Рез, "$" + КлючЗначение.Ключ, КлючЗначение.Значение); + Рез = СтрЗаменить(Рез, "$" + НРег(КлючЗначение.Ключ), КлючЗначение.Значение); + Рез = СтрЗаменить(Рез, "$" + ВРег(КлючЗначение.Ключ), КлючЗначение.Значение); + КонецЦикла; + + Исключение + + БлокировкаРесурса.Разблокировать(); + + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + КонецПопытки; + + БлокировкаРесурса.Разблокировать(); + Если Рез <> ИсходнаяСтрока Тогда Лог.Отладка("Выполнена замена с помощью шаблонных переменных. | Исходное значение <%1>, | Результат <%2>", ИсходнаяСтрока, Рез); КонецЕсли; + Возврат Рез; + КонецФункции + +Переменные = Новый Структура; \ No newline at end of file diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" index e3290338..20d012a0 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" @@ -152,17 +152,23 @@ Если КоллекцияДоп = Неопределено Тогда Возврат; КонецЕсли; - + ПолучитьЛог(); Для Каждого Элемент Из КоллекцияДоп Цикл + Лог.Отладка("Обрабатываю параметр: %1", Элемент.Ключ); + ЗначениеПодстановки = Элемент.Значение; + Лог.Отладка("Значение параметра: %1 Тип: %2", ЗначениеПодстановки, ТипЗнч(ЗначениеПодстановки)); + Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда + ЗначениеПодстановки = ПодставитьЗначенияПеременныхСреды(ЗначениеПодстановки); + КонецЕсли; Значение = КоллекцияОсновная.Получить(Элемент.Ключ); Если Значение = Неопределено Тогда - КоллекцияОсновная.Вставить(Элемент.Ключ, Элемент.Значение); + КоллекцияОсновная.Вставить(Элемент.Ключ, ЗначениеПодстановки); ИначеЕсли ТипЗнч(Значение) = Тип("Булево") И НЕ Значение Тогда - Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда - Если Элемент.Значение = "1" ИЛИ Нрег(Элемент.Значение) = "истина" ИЛИ Нрег(Элемент.Значение) = "true" Тогда + Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда + Если ЗначениеПодстановки = "1" ИЛИ Нрег(ЗначениеПодстановки) = "истина" ИЛИ Нрег(ЗначениеПодстановки) = "true" Тогда КоллекцияОсновная.Вставить(Элемент.Ключ, Истина); КонецЕсли; - ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") И Элемент.Значение Тогда + ИначеЕсли ТипЗнч(ЗначениеПодстановки) = Тип("Булево") И ЗначениеПодстановки Тогда КоллекцияОсновная.Вставить(Элемент.Ключ, Истина); КонецЕсли; КонецЕсли; @@ -318,7 +324,7 @@ Лог.Отладка("Использован системный корневой путь проекта - <%1>", КаталогПроекта); КонецЕсли; - Если Лев(Путь, 1) = "." И КаталогПроекта <> Путь Тогда + Если ЭтоОтносительныйПуть(Путь) И КаталогПроекта <> Путь Тогда Путь = ОбъединитьПути(КаталогПроекта, Путь); Лог.Отладка("Нашли абсолютный путь проекта - <%1>", Путь); КонецЕсли; @@ -329,6 +335,27 @@ КонецФункции // ПолныйПуть() + +Функция ЭтоОтносительныйПуть(Знач Путь) + + // BSLLS:IfElseDuplicatedCodeBlock-off + Если СтрНачинаетсяС(Путь, ".") Тогда + Возврат Истина; + + ИначеЕсли СтрНачинаетсяС(Путь, "/") Тогда + Возврат Ложь; + + ИначеЕсли Сред(Путь, 2, 1) = ":" Тогда + Возврат Ложь; + + Иначе + Возврат Истина; + + КонецЕсли; + // BSLLS:IfElseDuplicatedCodeBlock-on + +КонецФункции + Функция КаталогПроекта() Экспорт ФайлИсточника = Новый Файл(ТекущийСценарий().Источник); Возврат ОбъединитьПути(ФайлИсточника.Путь, "..", ".."); @@ -375,6 +402,27 @@ Возврат ?(Параметры[Ключ1] = Неопределено, ЗначениеПоУмолчанию, Параметры[Ключ1]); КонецФункции +// Получить значение флага по полному и краткому ключу +// +// Параметры: +// Параметры - Соответствие - разобранные параметры командной строки +// КраткийКлючФлага - Строка - Краткий ключ флага (например "-f") +// ПолныйКлючФлага - Строка - Полный ключ флага (например "--force") +// +// Возвращаемое значение: +// Булево - Истина, если в параметрах задано хоть одно значение флага +// +Функция ЕстьФлагКоманды(Параметры, КраткийКлючФлага, ПолныйКлючФлага) Экспорт + + ЗначениеКраткогоФлага = (Параметры[КраткийКлючФлага] = Истина); + ЗначениеПолногоФлага = (Параметры[ПолныйКлючФлага] = Истина); + ЗначениеФлага = ЗначениеКраткогоФлага Или ЗначениеПолногоФлага; + Лог.Отладка("Результат вычисления флага (%1=%2) Или (%3=%4) = %5", + КраткийКлючФлага, ЗначениеКраткогоФлага, ПолныйКлючФлага, ЗначениеПолногоФлага, ЗначениеФлага); + Возврат ЗначениеФлага; + +КонецФункции + // Показать параметры командной строки через Лог.Отладка() // // Параметры: @@ -481,7 +529,7 @@ КонецЕсли; Исключение МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -503,48 +551,154 @@ // Получить стек вызовов методов скриптов с отступами вправо // +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке +// // Возвращаемое значение: // Строка - стек вызовов кода с отступами вправо // -Функция СтекВызовов() Экспорт +Функция СтекВызовов(ИнформацияОбОшибке) Экспорт + + СтекВызовов = ИнформацияОбОшибке.ПолучитьСтекВызовов(); + МассивТекстИсключения = Новый Массив; + МассивТекстИсключения.Добавить("Стек вызовов:"); + + Отступ = ""; + СимволОтступа = " "; + ПервыйКадр = Истина; + Для Каждого КадрСтекаВызовов Из СтекВызовов Цикл + // пропустим первый кадр стека, т.к. он ведет на служебный вызов исключения + Если ПервыйКадр Тогда + ПервыйКадр = Ложь; + Продолжить; + КонецЕсли; - ТекстИсключения = ""; - Попытка - ВызватьИсключение ТекстИсключения; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - СтекВызовов = ИнформацияОбОшибке.ПолучитьСтекВызовов(); - МассивТекстИсключения = Новый Массив; - МассивТекстИсключения.Добавить(ТекстИсключения); - МассивТекстИсключения.Добавить("Стек вызовов:"); - - Отступ = ""; - СимволОтступа = " "; - ПервыйКадр = Истина; - Для Каждого КадрСтекаВызовов Из СтекВызовов Цикл - // пропустим первый кадр стека, т.к. он ведет на служебный вызов исключения - Если ПервыйКадр Тогда - ПервыйКадр = Ложь; - Продолжить; + Отступ = Отступ + СимволОтступа; + + СтрокаСтекТрейса = СтрШаблон( + "%1%2 / Метод %3 / Строка %4", + Отступ, + КадрСтекаВызовов.ИмяМодуля, + КадрСтекаВызовов.Метод, + Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") + ); + МассивТекстИсключения.Добавить(СтрокаСтекТрейса); + КонецЦикла; + Результат = СтрСоединить(МассивТекстИсключения, Символы.ПС); + + Возврат Результат; +КонецФункции + +// Подменяет значения параметров значением переменных среды. +// +// Параметры: +// СтрокаПодстановки - Строка - Строка в которую необходимо подставить переменные среды +// Возвращаемое значение: +// Строка - Значение после подстановки переменных среды +// +Функция ПодставитьЗначенияПеременныхСреды(СтрокаПодстановки) + СтрокаРезультат = СтрокаПодстановки; + ПолучитьЛог(); + РВ = Новый РегулярноеВыражение("(?<=\${)([^\s{""]*?)(?=})"); + Совпадения = РВ.НайтиСовпадения(СтрокаПодстановки); + Для каждого Совпадение Из Совпадения Цикл + ИмяПеременнойСреды = Совпадение.Значение; + ЗначениеПеременнойСреды = ПолучитьПеременнуюСреды(ИмяПеременнойСреды); + Если Не ЗначениеЗаполнено(ЗначениеПеременнойСреды) Тогда + Лог.Отладка("Не удалось получить значение переменной среды, или передано пустое значение: %1", ИмяПеременнойСреды); + КонецЕсли; + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "${" + ИмяПеременнойСреды + "}", ЗначениеПеременнойСреды); + Лог.Отладка("Значение переменной среды ""%1"" изменено на ""%2""", ИмяПеременнойСреды, ЗначениеПеременнойСреды); + КонецЦикла; + Возврат СтрокаРезультат; +КонецФункции + +// Дополняет массив (взята типовая процедура) +// +// Параметры: +// МассивПриемник - Массив - массив, в который необходимо добавить значения. +// МассивИсточник - Массив - массив значений для заполнения. +// ТолькоУникальныеЗначения - Булево - если истина, то в массив будут включены только уникальные значения. +// +Процедура ДополнитьМассив(МассивПриемник, Знач МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт + + Если ТолькоУникальныеЗначения Тогда + + УникальныеЗначения = Новый Соответствие; + + Для Каждого Значение Из МассивПриемник Цикл + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + + Для Каждого Значение Из МассивИсточник Цикл + Если УникальныеЗначения[Значение] = Неопределено Тогда + МассивПриемник.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); КонецЕсли; + КонецЦикла; - Отступ = Отступ + СимволОтступа; + Иначе - СтрокаСтекТрейса = СтрШаблон( - "%1%2 / Метод %3 / Строка %4", - Отступ, - КадрСтекаВызовов.ИмяМодуля, - КадрСтекаВызовов.Метод, - Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") - ); - МассивТекстИсключения.Добавить(СтрокаСтекТрейса); + Для Каждого Значение Из МассивИсточник Цикл + МассивПриемник.Добавить(Значение); КонецЦикла; - ТекстИсключения = СтрСоединить(МассивТекстИсключения, Символы.ПС); - КонецПопытки; + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоФайловаяИБ(СтрокаСоединения) Экспорт + Возврат СтрНачинаетсяС(СтрокаСоединения, "/F"); +КонецФункции + +Функция КаталогФайловойИБ(СтрокаСоединения) Экспорт + + Если ЭтоФайловаяИБ(СтрокаСоединения) Тогда + Возврат УбратьКавычкиВокругПути(Сред(СтрокаСоединения, 3)); + Иначе + Возврат ""; + КонецЕсли; - Возврат ТекстИсключения; КонецФункции +Функция ФабрикаМенеджераСборки(ПараметрыКоманды) Экспорт + + ИспользоватьIbcm = ПараметрыКоманды["--ibcmd"]; + СтрокаПодключенияИБ = ПараметрыКоманды["ДанныеПодключения"].ПутьБазы; + + Если Не ИспользоватьIbcm Тогда + Лог.Отладка("Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + ИначеЕсли ЗначениеЗаполнено(СтрокаПодключенияИБ) И Не ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключенияИБ) Тогда + Лог.Информация("Серверные ИБ не поддерживаются ibcmd. Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + Иначе + Лог.Отладка("Используем ibcmd."); + Возврат Новый МенеджерIbcmd(); + + КонецЕсли; + +КонецФункции + +Функция НовыйМенеджерКонфигуратора() Экспорт + Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); + Возврат Новый МенеджерКонфигуратора(); +КонецФункции + +Функция ЛогКоманды(ДополнительныеПараметры) Экспорт + Возврат ДополнительныеПараметры.Лог; +КонецФункции + +Процедура УстановитьИспользованиеВременнойБазы(ПараметрыКоманды) Экспорт + + ДанныеПодключения = Новый Структура(ПараметрыКоманды["ДанныеПодключения"]); + ДанныеПодключения.ИспользоватьВременнуюБазу = Истина; + ПараметрыКоманды["ДанныеПодключения"] = Новый ФиксированнаяСтруктура(ДанныеПодключения); + +КонецПроцедуры + // из-за особенностей загрузки модуль ОбщиеМетоды грузится раньше ПараметрыСистемы, // поэтому сразу в конце кода модуля использовать ПараметрыСистемы нельзя 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\241\320\270\321\201\321\202\320\265\320\274\321\213.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\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index f371c90a..a8530986 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\241\320\270\321\201\321\202\320\265\320\274\321\213.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\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -30,7 +30,7 @@ // Функция ВерсияПродукта() Экспорт - Версия = "1.11.11"; // присвоение "Версия = " важно для проверки Сонара + Версия = "2.2.2"; // присвоение "Версия = " важно для проверки Сонара Возврат Версия; КонецФункции @@ -87,12 +87,14 @@ мВозможныеКоманды.Вставить("ЗахватитьВХранилище", "lockrepo"); мВозможныеКоманды.Вставить("ПоместитьВХранилище", "commit"); мВозможныеКоманды.Вставить("ОтключитьсяОтХранилища", "unbindrepo"); + мВозможныеКоманды.Вставить("ОтпуститьВХранилище", "unlockrepo"); мВозможныеКоманды.Вставить("СобратьИзИсходниковФайлКонфигурации", "compile"); мВозможныеКоманды.Вставить("РазборкаКонфигурации", "decompile"); мВозможныеКоманды.Вставить("ЗагрузитьФайлКонфигурации", "load"); мВозможныеКоманды.Вставить("ОбъединитьСФайломКонфигурации", "merge"); мВозможныеКоманды.Вставить("ОбновитьКонфигурацию", "update"); + мВозможныеКоманды.Вставить("СравнитьКонфигурации", "compare"); мВозможныеКоманды.Вставить("УправлениеСеансами", "session"); мВозможныеКоманды.Вставить("УправлениеРегламентнымиЗаданиями", "scheduledjobs"); @@ -159,12 +161,14 @@ КлассыРеализацииКоманд[ВозможныеКоманды().ЗахватитьВХранилище] = "КомандаЗахватитьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().ПоместитьВХранилище] = "КомандаПоместитьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().ОтключитьсяОтХранилища] = "КомандаОтключитьсяОтХранилища"; + КлассыРеализацииКоманд[ВозможныеКоманды().ОтпуститьВХранилище] = "КомандаОтпуститьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().СобратьИзИсходниковФайлКонфигурации] = "КомандаСобратьИзИсходников"; КлассыРеализацииКоманд[ВозможныеКоманды().РазборкаКонфигурации] = "КомандаРазборкаКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ЗагрузитьФайлКонфигурации] = "КомандаЗагрузитьФайлКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ОбъединитьСФайломКонфигурации] = "КомандаОбъединитьСФайломКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ОбновитьКонфигурацию] = "КомандаОбновитьКонфигурацию"; + КлассыРеализацииКоманд[ВозможныеКоманды().СравнитьКонфигурации] = "КомандаСравнитьКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().УправлениеСеансами] = "КомандаУправлениеСеансами"; КлассыРеализацииКоманд[ВозможныеКоманды().УправлениеРегламентнымиЗаданиями] = "КомандаУправлениеСеансами"; diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tasks/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tests/fixtures/1Cv8.dt b/tests/fixtures/1Cv8.dt new file mode 100644 index 0000000000000000000000000000000000000000..d7e9a89e7256b4059af7409b435a53c745dd9b11 GIT binary patch literal 3791 zcmV;=4lwaCLrFqJZE!|2?OJ(wQ&ko(*frguR49m{C>Gja(xjUx+9njD-E3MAMDXS1 zwtbT1#g`Xo6@&yqu%CjWEYB5WbUws&hQ(zRXa%((C=5C&s9pF*tO}z{or&Y;-1}bM znuMi;-~7|A$vyX+^EIr=I=kLdH&CL z)lRA0#C&F*as18n=l8E4X?`~0=tmnopH_c-{W>CDaV z?_YN=ux)8dpzqMqv4794%q;oS_TJ;FxAf*f|LIdr^PXJ%IYq1bN%kKKo*!yAB_%j{#fa?_H*P*{Fuj|YyY~A{C;pw1)?4vADdA(@Ojx#=M+D}s_{${>q`<*|2-~DxFBK63e|CBY(J>9eB(M5}I zxpC{AU!U3CZ`m}peC@sCHoM;YA}5ZzzW3l;VD!y-09T`*ytpFJh1?K zYyK=%*_ea{aoa9`Zf9U04V%7?gjbR~OkEN>4SICbJ!d)ck&-SaZuXq@x%CwFw+ zIxdi5U=m+i{9JqGv#-8(;@2zH-AraMS7rjrO^{BFkUHw}Fsaj;3o|G8%scPjugwEi zy%k_UuhANcY#IY*DAZuZz^W-QXbUiHVS_{7Ihk-aNKFf`yuOE^ z4nOzrQo9}<=<~if@Dd4_D2MQJV3tywR z*-MgD=m*Z$99*lj78N%XYGD2sXyCG})0E)2PE%L{^fs)Z*p`psT;hx6!k)E%5fVR* zEf*H*|5@0Qw5??MYsq!1mM(p`H9FRQ*8Ir4NwbewR*zr4t8?#1=h_ZW-aR+DvGb

zAIflx1(v(8GB<5amUWM%5SgVuyyRw zNmH`CuMNo>vT@#DV>Hd9z2Cff_p;2nIcHN|c=f$|+eiF%iI>!~ z%eH@6actD+v;+O8CzL%kwPyFopN6I$KDK-5sV^RA_T8TK)v2{pa(;2mUVQrI{Ktn) ze0%ZF8-7WDvM+5;|ID2w>zT}A-OIjHCwHVIu37Tj@xSfEreOxTTdREDeg0vUfW~aFx!QUU!0GyWv&p-!qpUT} z>-DNPd(~ZCTUsr9yEc2h0hP&W0gVm-ld-jGxwqY)5PWO4NmT-g!DduTK!IgV)R3rU zL0L3PTt%b0tH&?Z@$F-zZ@2io0nrl_ifUOP7PUQ6knW!ZJAkOCuUIA7|Zn#`xH0oPN$5-*q;ueOCYMtV z6D?sgX^_oOu}dKAfE&0^U7%yMN%~si37JA_LlIPGRW)ykf-&v6{u#T zoR}SfhJ2ccYUI zUBeM6#c^N<@c2to(t|`itRU?C37UoOL(Q=!YiMIUy1=0pvIi@f3)nlHXV{FwRyM0l zR{kbTDT+5z08($VMmXz;XZ&t|3P%DTwy%u|(!vN-Z1G9cl4ntpmc!5mR2VW7QJay3 zdCcBBC{hHg9#h1-i9kwP6eUf3r6nS<0;cXX;$Z~~)C7mw`tWubq zKtNJh8$u6XJ0o@vf@6X<*{el~t)N&2HI;|To#YYH5fEv(VZAu?Xvh*dZLYtVSps#U z`wW38mM04x#E=;wwIWgzP_Yu$fPCJCfsHVx1~Cdmia13lGOWXStY#-c6PUdMbJGy& zmEHrF2sOUUPT~tf5;VS?pxkI-Q!cA<$Wxeh6>BFnWE9?&itu=s=n^+1Oh!N?3pia& zV{TzbBQx@nM@BIj*+GdmHp%tF4T(1_)?gNeO=1KT?hg>=C~uoT#7Q8A6^BgkZmuhu z%jmz%_Q*=oO4xzXPQcX+ZFGY81_HIY09`uN7T=N2P=|lx!nUiKnwj|1(RCEKPpn>Osq+4%iu|_ zA>9Nm->U*~;kP`5YNTkJv&QSg=_v8b1bs1reOW3Fmp~6@8OnmO-i{=Hak3#rMJQZ_ZJov2iI(XwTs$3I47!)#-Lvao`KzF)?NBoIbG&xD7}$ncvl(gt`aokbBeVAo6t zA{#E%kw6S2ml49r;Sio@vdS0Fi=Vi0#wH5qcAW9Q|Be$2Gm>+5&F}9l!FU_tw7EHd z*Z%(g(%8>u%p$1;LH42B39uqomL;)5=^?gVQD0l3yqO5uaN=O6keh=}y^ua$RToo^2HFlXTtGoSiLGsbf4f{e$yc+hslrObf F{a^l0Rt5k7 literal 0 HcmV?d00001 diff --git a/tests/fixtures/1cv8.cf b/tests/fixtures/1cv8.cf new file mode 100644 index 0000000000000000000000000000000000000000..fec9c58714fea66dce4e0e8fe3adf81b791b4f14 GIT binary patch literal 15538 zcmeHt1#nzRwq=RgVrHS;FW&!}Jfd;~5tN;K5+izHo0|1By+Rt__ z0N@;GApC+C08j@S2><@c{;vKFGw_QZoXo$`gBb|^M32D3hi=XhaqOJHQlR z46p#009XOc00w|L@Gu3oG60PWh>d}W8;Dr}oInIRn*s0Q0`UCoX90W#>IW*n56@-% z`|u#}r{O!a#$zdXP&=#HnUwX$hK<7sx9H*mAw9zbVqJ{}tU1uoBIrEdfk%$Xzbe|vL`dQSXctN7N+!&!8W zAnr(?R0Ugx<$S;9-PMQVFJC5^p1tlLkBJRB1MZKH&kY0auF@8TI{ls>K8%f%QR*2X zbj1 zgS+!bW2@oQ*PWrutg%~Bp}XTdmuxsoKdy(U$AAXuBl7#Tq5Xopc}n~G_V0)_k&DZ= z?&F_@sWFvf&~nl;%WB>#AINZR`w76j+ZA6G>D|aZzQ6Esl6A)NAeTp}A-k+k@C=%3 zCCfX?wVhh&9b;mQgWz9yKKdANw&DL&zvkxf`iAOmKk2w{vy%(!L>3iJ(*6&mW0chWyIKAU$XP+^?CvCph^VfJ#2=-)koa<*yBUjQ&hq+Q!Du+2M?Y zNjb9=ooI!$F|%T(G)*be~ukygu}}TlvCJ_9&~*wWc=;f#!yT zqYW>MKvn!o(0yW0)|D66K*sh0jUg{zOpXKc=p#&O#bW8mtylSULMv;NYG_h_H6)$Y&x^2ZGS~2DEwSBO+gP9qsLI^f%7mVz)XxTpLl+}@VJI2pGLf^AAXq~fZ?&I_C)`O!23NsbSr@u(D z%i=}zt(yJ9vSlmwL4^-h$MQID@^kZ{p!!rM7c<3};+w!a=VS5J6AVozgXx9EO|tJt zi3sh>6<1Ta9Txjkb*8d=F*VXiSYUx#j`-lxDe5jBEOAFm5YXz(ScLP;jHTZ?N#kKQ zuhFtcOlXn7@YVEDPD!=TIOZ4*eUAxzog3zNo8O$!J3AK=NK{=^kIQ2xvR9G7MWOjY z@hY$_kzCO3N>eMX)Us1uvLI6R62U6LXldvl2_RR_zTzs6<09UPb`(4)U4-EBb*F^Z zyp$h?wcd@a1nV|BYzZf5uqT`5r!pLM!l>L7PSrmgX@lz%{HA1PX=7WYNOM$}N9#%{ zmqL_HqA6GLQf5W%WJ~s4*!j$88JryzE6k%W7HQ2=Y*YtII+Ajab}pu|n9<7^%}ElN zX?o9`r;CGn;uKde^DHUWxBfgSbK2wfBFUMxH5GKDY%+I;@M{L!B7u4W6cBLFU+Awh zT4jXg%*9_mZpnbZl)z>d1b1CyUmC+{!ZxH$;>-&X{Si2Yx;@g9l(oF_`Y6sEw}GMn zj~lB;(<1t!6`9L!dxsuiR2LOf9l5#3-aN909$PeU+Xy>?L3VEat~_=a)=~VkC|-A+ z10l*v#M|6sGT%(q8paX0<<`QNyJEH@P}ixm^mPy8K?E%3q1?%+o%BR_w8lJ*NIgu- zVMJn61T2lgbH%NXHn@hGN;$00Z`7GFHv5d^hHse^b4IN@cwSUHOI#5I*urNq&fAF6AiBoJN_W% z*=7vgMuCblSP+p6;=M73%YO@Nm&Q+R{YoS}{{vKUeg%dY4`C&KKL?$r&;IkU44#Gn z66#4LUQnl;re6VS0g28P&%-8XkdSZ@&B3ZjBrCLo6ED1rCc}eUU4U+KFo|qW{meER z2I<^3q=r|s8biO}3}0GtUNXai=M}e@q?2nt}&-X8U<&0oH#~ z56oOVf2nPKyLEk z5MGlJjt)eDcdJEV&NWpkhj77)XDxyH`D}lm{^K+7f5A==7g>NDGXv^bZXoYKiWa0_ zL7W7sULN4V0DJ|~zaZty2JFoS>-AXxkpE-{wu5{s$WyWaF$2&{fZml8*wYx;3d$201A77UKfv;9 zc$43A1OJe@N{JPL?`1|2zYAR#+2({u;QSd-89jKvPe6uBfU$r8U^$d}4^8zesRo9_BS3s&8{p@CKOk#@`RjKLUwd;Uw; zq3;ur&%X5w7=}Y^G^4*~tX+!~*Fzc_&=Wr_AEZUC9?XCcs(ED+v3KLcDOwS#27Ovg z8vJ>l$jySzsbvHV3Dd0px>H3ZwCjexaHRcm7yo}SQT`(z?H4_OZu4hi^Plja|1Ng^ zga73ImAwLiKV`2@byghkhj2Tq039JU&{2?^`D}G{AFw)V7_t&&N6JdByD zG7J6raqm02PG&F?DWG&_rj}AhL1ZcYWdhtU7f|vG9$c%5m%2{JDC|mih(Y#M|&LM6NxXWnM0-P}PBLt?i9YUZ_-_34BDD}e^j3jqtyh(5f? zhH{55m>^G{tz~qD$b%BJ-1^T-O4cIZ+h<%Bqqzq)=(u!Q6Qm%TLUO}x+NsfgNDxum zJ4#YnWs4Hie&1NvLqzBnBMCa?xl71;1*IR5Y~9E24! zjX-0qkEoVtEQ{{RQvMSB6_pnBAsNgHqd`jr{ED>Gg$N_yX^S|lEZZ2n9)7cTIo%lj zU-_}wj7<%jq~-@D)82a4E7f?LM(kEnhM|i?Wh%t>b(Qa)2iyk1@bh~#kCm8U6SYY4 zTz~ zT-d@NUX_x_<+p!jhFxTouaj+Q)*ULQ7HcZexXDQQd8{Q5$5n3tQ9Q$(dJq}{b)>nK znzqG;-6wq7vU_0JZ$e>rwYStygn2c&enRep1f}NmcUnT<*+|r{@RKo&AA3*jEUY-u zH(nt_d5yq7MM zyF_h~j{nfv0#Zv(1N+>mRKgw0+1({&F>3+q;qh?cP7Kddn0)%vj~0*352RPLjqxMr zpY(EP<@4&OsiGJVsty}h^l&FqwD8@MU4s+|^z3|MuNh${-7s>3f(pd1n?_$=e8s35 z6?pzYPn&68z*gv);i#2HNzcf6N<6YuZtq?95xZ-Hbk6;zL;j0%Y0S_Em)a4=k(M39 ztrpJvv5U8y4IWaXWtLlqDUsiUVEWK-C#vrFN}E+W@KbdMUa(!YxHmL5WpFUoNm15G z9B<8iZk1=BUJS`kc%7t8VU(O*k}rkC_YsEusc7Bv37X(WCmaWIefO1I(0j3w@+ZsD zP}Ky*Zfv0YxP3;HkL{a%!rqDtfPKa#DiBI)mNA3I z1QhoV2Zy?*on;DyXFrtlcDY#YWGE>t+CFT>D!bSXW{_aajO|d~3M}3zT>C>Q4oS)(o7$hj?O2cs+R{NwA$lN48 zezTUzPIJoxOJ5>gGZY_JxMK{LVkR7UoE5*77AD<2$A-W(LJG_N?E3RZC8dGb}PE6teu#>BuUa;;S4z2%(aEaM&e zYN6|5sgbMZMfdFT?o^7M`D;Bt?AK#o9UT1zQl_4f_I7wnDWdG{Dd($Au!$e~q(iWY zFvD=HSVmIdiQwOMC`cdzr%$Jpov*BToU0_F+p0&6nrN2%H5+(KPFP6?q~z4JB^il_ zf0WrZ9F31}1yYYK*wv{Dl~7%NtYJbns~bqB`l!yfoc^5xf#}@HgM{$GcG3RX#`yCG zzuUv&CGA7#!s)G*5<$%(Ma$zmJU`3MI%S7?E}xRlj~}(F={v!?exOXe4&f%#3p?YFd6*{-C(9h}A?}eoffvQ4OI_ z+IZ9imj98{5oW<8MDxcx(YGX)T;{mM7kk-t%J0rA(YxA|Uf0uEV7(Wt@+GWAiZ6FP z&23o)ix|2)G!CVAh`b8HQnQCL?;2Xby5r8P?6$diWuDSFh@ogx9pz2GMQ$ z)v(r9kF$9fzT0bCQ+G~;x*=C)_-#>qM5FF$#pahjxaJ2DJfSaJ8#xvmdb~v}9UjkA z19c5`1od>NbdfqANXSPt;uw%9lvVWB+M!g0{rK&wlfL*ANe1wFK#m2Jk3Ih(u>S>p zZ}C&ZvjcTHX!XwwsNl_j2PiKG()Y~2t9s*~kt#^v8w0Pg0tdZ~1UVHC&D5*=Fag+_gf0H57`f5)Pk5ogHHrgCLJLK~sDq;$zmpw$LPD$k@>aD~Ov z9-8^Ix)e(?PT+4IARJg3poba>V01|PZIGi;{2LO;KFsLk3*fpT2iD@JkW;=3Y^6~lx~+-pI3Abi=sb_y5`(?%?uG9|e(mnN zA<-(C+=)a19-3xw`?~ZEWYGsYDrpR-*Cbka*NOcUhm<Cr)O|Xj3XMhc!-$8l$tqlO`hyyed`*SxCO&ym3nYP zjO?TiMOxgD-i;fwx!rF<*6eh6F)uL!Z<)DT%TC&gEIsN5#fcFNwzVSrgYcjEf&E7r z%K7sNe?5XJ+g~#D5x84M00JEXf*b z=#;Sd#pA=mU=zYK3l~?5L3Y@b&^Soo8HnD9)`<7ijd+DL!tMoD0iYF?+St68s(Ak1?{6e>u38(@^M|@C0Y>rU8j>d1CQx_p8Ag2nf}vf97lW zyU%|)1Hb6;FZj@Z*FXF}_)uOU4*e|-I5VE5x|B0gXAThk9*S+icrEd}?b zHjJjTOC)=%N_mI)U=P&+?OIRP_j&>wRsMB;tq(4@EAJ_icL$E9uSTwz#`en%nYs)G z^##S8QSNMCf02Dx(HUFqU+V8)|9$^T+V9ruUbMl#-LKIv@!R3#Ghg%%nhsz1%^)22 z9pybr{?2X*m*Xew2=5I8%E)#-6MlILF0z-MsDhCL3qQossA%?*kD>QI_o_m)*vqak z2a?AF)DF;K5taj$@_9tz<=`&c4DS?z&!iI{#$Q+Bk4hv`IFL=TQc969m7+)lcoP@tV`2&IYB~mQHBYs^*Ss^(MsUoUhpzT-@I!OB zOj(cPV()sxiL~Y52KnABcM^MtLN;Fs5MqB>L=lM6$*{LnE$2rQy_;^@CD@VJXX~VB zBc0EiS7js~U*vA7tIRw=sd&m*2d3>qzfwn7% zN@*?KWZ4j9&WmJPuw}Z+<{R|n0y^0%jwi;9B=JLd70xBj-!Bg`)J&C$BjNH>DZ!G0 z!H=ltSYjABV1}kh+}=RkhcDN8b|2|~=>~YY%F=f!Yi3K9GtDpGb_A4O(lRBw*`tRn zaN%mIFGwCn#ZV!lFI_Y!L<6Ln3_63NDh_@7wpweSB=pyx@U#!`QKki|UI!2R3is>I z0C4#039BKXyTTB9NPvXq;UuS9ga0 zDxX;OmKA9Y<$Hw@F%j3y;ivu+3uL+-^!!_F?{ z(`%bf6(!n1m}U0U@fl=jiw25AzifOWj7F+88wT|a2d?S*3AUlC*snR8Zvfh~4yuFgL{qoX5k|N^K5V@lgtMq#bhZ(NBLxsER$$69NCY((q z$PnUGqX4DF_z$DF4+^+3`$tE|hBB!e_QeFO?B+L)PO-Q#{@bhi*}iMEF!VQ$vySHye&*vavEW z6tR%=oK_^W4J*`(qgVni=}(|+^3p)41Fxd zRCr93cP-kHL*Ewq`uW6fV}oe;aa^!_Fp`qmO2S1~Q%dK=e@4Gd|htvi7C zW<4XYn%=RSAM)I2{cYAXjQRS6*g(7XU`76ebD8Jd^7;FHsV}KjA~ULzQ=&+(v_(3X5`I zgcjdd;r8ZP?zYTQlZ|k6qcDAQ=2&$Pqmk6P-+DLs_I20F`?1u05;}*&glj^q{N)GH zYT52}wHE3x^f6OxSxF?hjo9AeCy5);Wp`U+W?`Sp} z1hamE92ff*?Ag*%V=xN(izB@^K<%Nf&Bsz${yN zHJHN#k2#@x=W9>#uVA=`dQPX388~bj}b`<0TV^1Weyxxa4@=!J$(^zT^r1q z8d6zJYTYj}mhw=vR$Hl>d3KX zdWJB)7i73$d<8DdflZscbe0=@{ad{vRlc1My_#KNnC#m+ce#qZ1iKQ~cOP0~9VAk*4Z3Rm+OXbWJF`P+tPR$!0`TG|9H zV}cegK}itMQYL7-hzanT=}!dO?!*Ob1sP~z6twus4y-}t_u*Op2r+@+Px5G9U4DXs z192^mJ&n4t)@*;V6AEn`;G9jboxA*2N7SwvdKExQDu@)^B04VJ3|>`s=E#mFN*sYC zJ$88HUyJ^DKTq7%86dlLTi#R@Mq8v*04YZYxdFlAerkPj%zi;sjW zbP6lM@y(!=8xXL5M~#Fh{)XQdjHO&jdo)oE-vVL4qL%}kLKfP4E6|~~Z(C4ORy>r) zOdn$&hZmhV7jg{-V~j9Ox+peCxsnC<75-S?JamofkDHlpF z6uJ3G9lMFVaUog}Bh;4qn(A41J_JPurU|1!HMy==x*HBW&O$o*5M|(Jw%v8idT)=Y z#&uqWB7R5Xm4Kytm9JWyE=&L9zU3iF(w^y)~=qS9^+x7H9rwhk$9R zDBd3KlM}BkFl7h1F4vcU(MKN3Sl7PQ@T;#R%*$c64M#J=J^X^JZaWRt$`q z3Po3?ShU35=d$w13`@STO!H=xWkOz!GhW}2IRY6sqHb~U1eQAY{FjSJ$Rqp<+%s!1h-E6G{ltNjm3!OWzf2!`{ z6|gh33(Ag<8{MM1?HT(K^ytziP|bwsxo<4uXT}veM0&Ox@WLb8bj2YKo;W(`z{4^K zB9-CmVic86E1qv7LP`BLYBb$pKjQ%Zb~Hwb{IzGw@$Dxu5=*;vm)KX84W3ndbAsDX zaDV*r{`m#mf7dVXAA%ERi@)AL`2Qq)CV7V`s=a2x$HLNWg#s9GMipZ$^FW8<4hj6K zm+Qf*q6sHPD+U$+s&SqIPV=a>=Au`SWYw$ox;Hjj9^02aIgsp;iBoUM$#^#OHTDYA zNk`32FQXWgekg)#;87!Rr&!ISNgTMA>|$sowuio5YmJEXtPjA%3?mmHrH8MRE-Zt_ z3{gqJ!n(NirHr#4kU;YHp0VEp>R$|H{q^4f1b=eQzqV%mszG2ss zaHsOv7?kM$oQeGVll+%6@CV0!Ut?ot<^I<==K5!rv9kU0WI*sINBA~bWa1?k?3?qM zV@mKC7Qq)wB<4v87WsDh+4Ru_)>SA5SlZ878pn~00qTtFlU>jENd_}_-UdT#qt(4g z&hdEAq_W*97umc?Utbd^?qJ5mdqbKPg}~9(80hdR>T6H7y)ND}O6P>wmFfN3AkxfO zOls7H{!UZ0Y?>f;8JrZYhQ(JV=7sZR#XU!*;e~gf z*K!Yn-G>p2HuiBS=lYp%kcVFHFIjvAhibphEw{lC7*92u>SEvvIZDoetJQF+w0-io zebJos$!#oqDYCLXVmZO$I1rYxh6EB(-E;Ps^}S~V*OPr()Us+_LY2;k>U`e>)-Q|o zf{buX^2gs1@MR=o_Jqc@RQIGSL$3rqiSkv7 z2Q}MW^!&)st;maxIgGaXY-j3NCrn-RHP^#vkwX}ZuIVuON$@3g({^tM64Mf8P91U2 zN8PdHM`#JNjq@C&`C!(T+(=m1Qh0{@s!NW_IK?5x)^UjFaz6HCBU|6;orU=$T_%Ty z+3|e`ys$gyX36)<`kA$UJQnf0*B0MKf}qR@)6_gL&qdSMW+`u8hIbaZn4N0nnS<|JlrMURz`I4B>`}{J2B>lRv_M|Jg1bLK4OSe|$%Gj literal 0 HcmV?d00001 diff --git a/tests/fixtures/feature/env.json b/tests/fixtures/feature/env.json index 8e79ebb4..7a0fefb8 100644 --- a/tests/fixtures/feature/env.json +++ b/tests/fixtures/feature/env.json @@ -2,11 +2,11 @@ "$schema": "https://raw.githubusercontent.com/vanessa-opensource/vanessa-runner/develop/vanessa-runner-schema.json", "default": { "--ibconnection":"/F./build/ib", + "--workspace":".", "--db-user":"", "--db-pwd":"" }, "xunit":{ - "--workspace":"./build", "--ibconnection": "/Fbuild/ib", // "--db-user": "Admin", // "--db-pwd": "", @@ -18,7 +18,6 @@ }, "vanessa":{ "--vanessasettings":"./build/feature/vb-conf.json", - "--workspace":"./build", "--additional":"/DisplayAllFunctions" }, "create":{ diff --git a/tests/fixtures/feature/vb-conf.json b/tests/fixtures/feature/vb-conf.json index 918e0af7..10ad7e26 100644 --- a/tests/fixtures/feature/vb-conf.json +++ b/tests/fixtures/feature/vb-conf.json @@ -6,24 +6,24 @@ "$instrumentsRoot/./features/libraries/" ], "ВыполнитьСценарии": "Истина", - "ЗавершитьРаботуСистемы": "Истина", + "ЗавершитьРаботуСистемы": true, "ЗакрытьTestClientПослеЗапускаСценариев": "Истина", "ДелатьЛогВыполненияСценариевВЖР": "Истина", "ДелатьОтчетВФорматеАллюр": "Истина", "ДелатьОтчетВФорматеjUnit": "Истина", "ДелатьОтчетВФорматеCucumberJson": "Истина", - "ДелатьЛогВыполненияСценариевВТекстовыйФайл": "Истина", + "ДелатьЛогВыполненияСценариевВТекстовыйФайл": true, + "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/vanessaonline.txt", "КаталогOutputAllureБазовый": "$workspaceRoot/allurereport", "КаталогOutputjUnit": "$workspaceRoot/junitreport", "КаталогOutputCucumberJson": "$workspaceRoot/cucumber", "СоздаватьПодкаталогВКаталогеAllureДляЭтойСборки": "Ложь", "ДелатьСкриншотПриВозникновенииОшибки": "Ложь", "КаталогOutputСкриншоты": "$workspaceRoot/allurereport/screen", - "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/vanessaonline.txt", "КомандаСделатьСкриншот": "nircmd.exe savescreenshot ", "ВыгружатьСтатусВыполненияСценариевВФайл": "Истина", - "ДобавлятьКИмениСценарияУсловияВыгрузки": "Ложь", "ПутьКФайлуДляВыгрузкиСтатусаВыполненияСценариев": "$workspaceRoot/buildstatus.log", + "ДобавлятьКИмениСценарияУсловияВыгрузки": "Ложь", "СписокТеговИсключение":[ "IgnoreOnCIMainBuild", "IgnoreOn8310", @@ -37,4 +37,3 @@ "СписокТеговОтбор":[ ] } - \ No newline at end of file diff --git a/tests/xunits/compile.os b/tests/xunits/compile.os new file mode 100644 index 00000000..ff0cdb4b --- /dev/null +++ b/tests/xunits/compile.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compile"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьФлаг("--noupdate"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка конфигурации из исходников в текущую ИБ завершена."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compile"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "1Cv8.cf"); + Исполнитель.ДобавитьФлаг("--noupdate"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка конфигурации из исходников в файл cf завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.cf"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/compileext.os b/tests/xunits/compileext.os new file mode 100644 index 00000000..3b0c5fb7 --- /dev/null +++ b/tests/xunits/compileext.os @@ -0,0 +1,53 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьРасширениеИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + ИмяРасширения = "РасширениеНовое1"; + + Исполнитель = Новый Тест_ИсполнительКоманд("compileext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьПараметр(КаталогSrc); + Исполнитель.ДобавитьПараметр(ИмяРасширения); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/compileexttocfe.os b/tests/xunits/compileexttocfe.os new file mode 100644 index 00000000..c5324f63 --- /dev/null +++ b/tests/xunits/compileexttocfe.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьРасширениеИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compileexttocfe"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "./Расширение1.cfe"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников в текущую ИБ завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("Расширение1.cfe"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compileexttocfe"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "Расширение1.cfe"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников в файл cfe завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("Расширение1.cfe"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/decompile.os b/tests/xunits/decompile.os new file mode 100644 index 00000000..f13fe92c --- /dev/null +++ b/tests/xunits/decompile.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_РазобратьТекущуюКонфигурациюНаИсходникиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("decompile"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "src"); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка конфигурации текущей ИБ на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Catalogs/Справочник1.xml"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_РазобратьФайлКонфигурацииНаИсходникиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("decompile"); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1Cv8.cf"); + Исполнитель.ДобавитьПараметр("--in", ФайлCf); + Исполнитель.ДобавитьПараметр("--out", "src"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка cf-файла на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Catalogs/Справочник1.xml"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/decompileext.os b/tests/xunits/decompileext.os new file mode 100644 index 00000000..d616bd69 --- /dev/null +++ b/tests/xunits/decompileext.os @@ -0,0 +1,56 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_РазобратьРасширениеНаИсходникиIbcmd() Экспорт + + // Дано + ИмяРасширения = "РасширениеНовое1"; + + Исполнитель = Новый Тест_ИсполнительКоманд("decompileext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.СоздатьРасширениеИзФайлов(ИмяРасширения, КаталогSrc); + + Исполнитель.ДобавитьПараметр(ИмяРасширения); + Исполнитель.ДобавитьПараметр("src"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка расширения на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Ext/ManagedApplicationModule.bsl"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/dump.os b/tests/xunits/dump.os new file mode 100644 index 00000000..a668d686 --- /dev/null +++ b/tests/xunits/dump.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("dump"); + Исполнитель.ДобавитьПараметр("1Cv8.dt"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка информационной базы в dt завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.dt"); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/init-dev.os b/tests/xunits/init-dev.os new file mode 100644 index 00000000..70b14ae2 --- /dev/null +++ b/tests/xunits/init-dev.os @@ -0,0 +1,100 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СоздатьПустуюФайловуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана пустая база данных."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из исходников."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаВыгрузкиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр("--dt", ФайлDt); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла выгрузки."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаКонфигурацииIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1cv8.cf"); + Исполнитель.ДобавитьПараметр("--cf", ФайлCf); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла конфигурации."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/load.os b/tests/xunits/load.os new file mode 100644 index 00000000..2af3feb0 --- /dev/null +++ b/tests/xunits/load.os @@ -0,0 +1,49 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ЗагузитьКонфигурациюИзФайлаIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("load"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1cv8.cf"); + Исполнитель.ДобавитьПараметр("--src", ФайлCf); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка конфигурации из cf завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/loadext.os b/tests/xunits/loadext.os new file mode 100644 index 00000000..c6611ebf --- /dev/null +++ b/tests/xunits/loadext.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ЗагузитьРасширениеИзФайлаIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("loadext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлCfe = Исполнитель.ПутьТестовыхДанных("Extension1.cfe"); + Исполнитель.ДобавитьПараметр("--file", ФайлCfe); + Исполнитель.ДобавитьПараметр("--extension", "Расширение1"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка расширения из cfe завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/restore.os b/tests/xunits/restore.os new file mode 100644 index 00000000..7e38145e --- /dev/null +++ b/tests/xunits/restore.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("restore"); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр(ФайлDt); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка информационной базы из dt завершена."); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/unload.os b/tests/xunits/unload.os new file mode 100644 index 00000000..f51d965b --- /dev/null +++ b/tests/xunits/unload.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьКонфигурациюВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("unload"); + Исполнитель.ДобавитьПараметр("1Cv8.cf"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка конфигурации в cf завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.cf"); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/unloadext.os b/tests/xunits/unloadext.os new file mode 100644 index 00000000..bb3ce417 --- /dev/null +++ b/tests/xunits/unloadext.os @@ -0,0 +1,51 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьРасширениеВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("unloadext"); + Исполнитель.ДобавитьПараметр("РасширениеНовое1.cfe"); + Исполнитель.ДобавитьПараметр("Расширение1"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка расширения в cfe завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("РасширениеНовое1.cfe"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/update-dev.os b/tests/xunits/update-dev.os new file mode 100644 index 00000000..3c374f9a --- /dev/null +++ b/tests/xunits/update-dev.os @@ -0,0 +1,143 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать gitrunner +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из исходников."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИзФайлаВыгрузкиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр("--dt", ФайлDt); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из файла выгрузки."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИнкрементальноIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + УстановитьКонтекстИнкрементальнойЗагрузки(Исполнитель); + Исполнитель.ДобавитьПараметр("--src", "src/cf"); + Исполнитель.ДобавитьПараметр("--git-increment"); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + //ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(Исполнитель.КаталогКоманды(), ".git")); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Будет выполнена инкрементальная загрузка"); + Исполнитель.ОжидаемЧтоВыводСодержит("ManagedApplicationModule.bsl"); + + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из исходников"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление конфигурации БД завершено."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьТекст(ИмяФайла, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); + ЗаписьТекста.ЗаписатьСтроку(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Процедура УстановитьКонтекстИнкрементальнойЗагрузки(Исполнитель) + + КаталогПроекта = Исполнитель.КаталогКоманды(); + КаталогИсходников = ОбъединитьПути(КаталогПроекта, "src", "cf"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + + ФС.КопироватьСодержимоеКаталога(КаталогSrc, КаталогИсходников); + + Репозиторий = Новый ГитРепозиторий(); + Репозиторий.УстановитьРабочийКаталог(КаталогПроекта); + Репозиторий.Инициализировать(); + + _gitignore = ОбъединитьПути(КаталогПроекта, ".gitignore"); + ЗаписатьТекст(_gitignore, "lastUploadedCommit.txt"); + + Репозиторий.ДобавитьФайлВИндекс("."); + Репозиторий.Закоммитить("first commit"); + + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("rev-parse"); + ПараметрыКоманды.Добавить("--short"); + ПараметрыКоманды.Добавить("HEAD"); + Репозиторий.ВыполнитьКоманду(ПараметрыКоманды); + ПоследнийКоммит = Репозиторий.ПолучитьВыводКоманды(); + + lastUploadedCommit = ОбъединитьПути(КаталогИсходников, "lastUploadedCommit.txt"); + ЗаписатьТекст(lastUploadedCommit, ПоследнийКоммит); + + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогИсходников); + + ManagedApplicationModule = ОбъединитьПути(КаталогИсходников, "Ext", "ManagedApplicationModule.bsl"); + ЗаписатьТекст(ManagedApplicationModule, "Процедура ПриНачалеРаботыСистемы() КонецПроцедуры"); + Репозиторий.ДобавитьФайлВИндекс("."); + Репозиторий.Закоммитить("second commit"); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/updatedb.os b/tests/xunits/updatedb.os new file mode 100644 index 00000000..ba6f44d9 --- /dev/null +++ b/tests/xunits/updatedb.os @@ -0,0 +1,48 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updatedb"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогSrc); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление конфигурации базы данных завершено."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/updateext.os b/tests/xunits/updateext.os new file mode 100644 index 00000000..cdbed212 --- /dev/null +++ b/tests/xunits/updateext.os @@ -0,0 +1,68 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ОбновитьРасширение() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updateext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьПараметр("Расширение1"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется версия платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление базы данных расширения завершено."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьРасширениеIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updateext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьПараметр("Расширение1"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление базы данных расширения завершено."); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" new file mode 100644 index 00000000..4a3ed034 --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" @@ -0,0 +1,38 @@ +#Использовать tempfiles + +Перем ТекстовыйДокумент; + +#Область ПрограммныйИнтерфейс + +Функция ВыводЛога() Экспорт + Возврат ТекстовыйДокумент.ПолучитьТекст(); +КонецФункции + +#КонецОбласти + +#Область InterfaceImplementaion + +Процедура ВывестиСобытие(Знач СобытиеЛога) Экспорт + + Сообщение = СобытиеЛога.ПолучитьФорматированноеСообщение(); + ТекстовыйДокумент.ДобавитьСтроку(Сообщение); + +КонецПроцедуры + +Процедура Закрыть() Экспорт +КонецПроцедуры + +// Устанавливает свойство аппендера, заданное в конфигурационном файле +// +Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт +КонецПроцедуры // УстановитьСвойство() + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта() + ТекстовыйДокумент = Новый ТекстовыйДокумент(); +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" new file mode 100644 index 00000000..85de8a6c --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -0,0 +1,139 @@ +#Использовать "..\..\..\.." +#Использовать cmdline +#Использовать ibcmdrunner +#Использовать asserts + +#Область ОписаниеПеременных + +Перем Команда; +Перем Аргументы; +Перем СпособВывода; +Перем КаталогКоманды; +Перем УправлениеИБ; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьПараметр(ИмяПараметра, ЗначениеПараметра = Неопределено) Экспорт + + Аргументы.Добавить(ИмяПараметра); + Если ЗначениеПараметра <> Неопределено Тогда + Аргументы.Добавить(ЗначениеПараметра); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьФлаг(ИмяФлага) Экспорт + Аргументы.Добавить(ИмяФлага); +КонецПроцедуры + +Процедура ВыполнитьКоманду() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + ПараметрыСистемы.ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; + + ДобавитьПараметр("--root", КаталогКоманды); + ДобавитьФлаг("--nocacheuse"); + + МенеджерКомандПриложения.РегистраторКоманд(ПараметрыСистемы); + + ДобавитьСпособВывода(МенеджерКомандПриложения); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + МенеджерКомандПриложения.ЗарегистрироватьКоманды(Парсер); + ПараметрыКоманды = Парсер.Разобрать(Аргументы); + МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ПараметрыКоманды.ЗначенияПараметров); + +КонецПроцедуры + +Функция ЛогКоманды() Экспорт + Возврат СпособВывода; +КонецФункции + +Функция КаталогКоманды() Экспорт + Возврат КаталогКоманды; +КонецФункции + +Функция ПутьТестовыхДанных(Путь1, Путь2 = Неопределено, Путь3 = Неопределено) Экспорт + + КаталогШаблонов = ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures"); + Возврат ОбъединитьПути(КаталогШаблонов, Путь1, Путь2, Путь3); + +КонецФункции + +Процедура ОжидаемЧтоВыводСодержит(Строка) Экспорт + Ожидаем.Что(СпособВывода.ВыводЛога()).Содержит(Строка); +КонецПроцедуры + +Процедура ОжидаемЧтоФайлСуществует(ПутьКФайлу) Экспорт + + ПолныйПуть = ОбъединитьПути(КаталогКоманды, ПутьКФайлу); + Файл = Новый Файл(ПолныйПуть); + ФайлСуществует = Файл.Существует() И Файл.ЭтоФайл(); + Сообщение = СтрШаблон("Ожидали, что файл %1 существует", ПутьКФайлу); + + Ожидаем.Что(ФайлСуществует, Сообщение).ЭтоИстина(); + +КонецПроцедуры + +Процедура УстановитьКонтекстПустаяИБ() Экспорт + + КаталогПустойИБ = ОбъединитьПути(КаталогКоманды, "db-data"); + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогПустойИБ); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(""); + + СтрокаСоединения = СтрШаблон("/F""%1""", КаталогПустойИБ); + ДобавитьПараметр("--ibconnection", СтрокаСоединения); + +КонецПроцедуры + +Процедура УстановитьКонтекстИБИзФайловКонфигурации(Каталог) Экспорт + + КаталогИБ = ОбъединитьПути(КаталогКоманды, "db-data"); + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогИБ); + УправлениеИБ.СоздатьИБИзФайловКонфигурации(Каталог); + + СтрокаСоединения = СтрШаблон("/F""%1""", КаталогИБ); + ДобавитьПараметр("--ibconnection", СтрокаСоединения); + +КонецПроцедуры + +Процедура СоздатьПустоеРасширение(ИмяРасширения, ПрефиксИмен) Экспорт + УправлениеИБ.СоздатьРасширение(ИмяРасширения, ПрефиксИмен); +КонецПроцедуры + +Процедура СоздатьРасширениеИзФайлов(ИмяРасширения, КаталогИсходников) Экспорт + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(КаталогИсходников, ИмяРасширения); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта(КомандаПриложения) + + Команда = КомандаПриложения; + Аргументы = Новый Массив; + Аргументы.Добавить(Команда); + + КаталогКоманды = ВременныеФайлы.СоздатьКаталог(); + + СпособВывода = Новый Тест_ВыводЛога(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьСпособВывода(МенеджерКомандПриложения) + Лог = МенеджерКомандПриложения.Лог(); + Лог.ДобавитьСпособВывода(СпособВывода); +КонецПроцедуры + +#КонецОбласти diff --git a/tools/oscript-template.cfg b/tools/oscript-template.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tools/oscript-template.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tools/oscript.cfg b/tools/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tools/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tools/runner.os b/tools/runner.os index 0b5f1ced..eda8036c 100644 --- a/tools/runner.os +++ b/tools/runner.os @@ -16,11 +16,9 @@ Перем Лог; Перем КодВозврата; Перем мВозможныеКоманды; -Перем ЭтоWindows; Перем КаталогЛогов; Перем КорневойПутьПроекта; Перем ЭтоЗапускВКоманднойСтроке; -Перем ОтключитьОтладочныеЛоги; Перем УпаковщикВнешнихОбработок; Функция Версия() Экспорт @@ -167,20 +165,17 @@ Функция ЭтоПутьКИсходнымКодамОбработок(ПутьКПапке) - Результат = Ложь; - МассивИмен = НайтиФайлы(ПутьКПапке, "*.xml", Ложь); Для Каждого Элемент Из МассивИмен Цикл ЧтениеТекста = Новый ЧтениеТекста(Элемент.ПолноеИмя); - Содержание = ЧтениеТекста.Прочитать(); + СодержаниеВрег = Врег(ЧтениеТекста.Прочитать()); ЧтениеТекста.Закрыть(); - Если Найти(Врег(Содержание), Врег("