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..0e46da8c 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" @@ -73,7 +73,6 @@ ИмяПроекта = Новый Файл(СтрокаПутиБазы).ИмяБезРасширения; Ожидаем.Что(Парсер.НайтиПоИмени(ИмяПроекта)).Существует(); - КонецПроцедуры // { Служебные функции diff --git "a/features/\320\241\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.feature" "b/features/\320\241\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.feature" index c5e1d9e9..2ead6074 100644 --- "a/features/\320\241\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.feature" +++ "b/features/\320\241\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.feature" @@ -68,8 +68,20 @@ И файл "build/out/extdp.epf" существует И файл "file.txt" не существует -# Сценарий: Сборка одной внешней обработки -# Когда TODO +Сценарий: Сборка внешней обработки в отдельном каталоге с изменением номера сборки + + # Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/out/fixture-epf build/out --build-number 4567 --for-meta-comment --language ru --debuglogfile build/a.log" + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/out/fixture-epf build/out --build-number 4567 --for-meta-comment --language ru" + И Вывод команды "oscript" содержит "Собирали: fixture изменен" + # И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" + + # Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + # И я показываю текст файла "build/a.log" + Тогда Код возврата команды "oscript" равен 0 + И файл "build/out/Тест1.epf" существует + И файл "file.txt" не существует + Тогда файл "build/out/fixture-epf/fixture/Тест1.xml" содержит "1.0.0.4567" # Сценарий: Сборка одной внешней обработки с явно заданной базой # Когда TODO 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..75d4c541 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" @@ -7,7 +7,6 @@ Контекст: Допустим я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" Дано Я очищаю параметры команды "oscript" в контексте @@ -15,21 +14,25 @@ Сценарий: Изменение версии конфигурации, указан путь Configuration.xml для конфигурации # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Дано Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог Тогда файл "cf/Configuration.xml" содержит "1.0.0.0" Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" И Я добавляю параметр "--src cf/Configuration.xml" для команды "oscript" + И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" Когда Я выполняю команду "oscript" - # И Я сообщаю вывод команды "oscript" + И Я сообщаю вывод команды "oscript" + И я показываю текст файла "build/a.log" + Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 - Тогда файл "cf/Configuration.xml" содержит "2.0.0.0" + Тогда файл "cf/Configuration.xml" содержит " 2.0.0.0" Сценарий: Изменение версии конфигурации, указан путь Configuration.xml для расширения @@ -42,28 +45,31 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 - Тогда файл "cfe/Configuration.xml" содержит "2.0.0.0" + Тогда файл "cfe/Configuration.xml" содержит " 2.0.0.0" Сценарий: Изменение версии конфигурации, указан каталог корня исходников конфигурации + Дано Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" И Я добавляю параметр "--src cf" для команды "oscript" + И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" Когда Я выполняю команду "oscript" - # И Я сообщаю вывод команды "oscript" + И Я сообщаю вывод команды "oscript" + И я показываю текст файла "build/a.log" Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 - Тогда файл "cf/Configuration.xml" содержит "2.0.0.0" + Тогда файл "cf/Configuration.xml" содержит " 2.0.0.0" Сценарий: Изменение версии конфигурации, указан каталог корня исходников расширения @@ -75,31 +81,35 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 - Тогда файл "cfe/Configuration.xml" содержит "2.0.0.0" + Тогда файл "cfe/Configuration.xml" содержит " 2.0.0.0" Сценарий: Изменение версии и конфигурации и расширения, указан каталог корня проекта + Дано Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог Дано Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" И Я добавляю параметр "--src ." для команды "oscript" + # И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" Когда Я выполняю команду "oscript" + # И Я сообщаю вывод команды "oscript" + # И я показываю текст файла "build/a.log" Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия 1.0.0.0 | | Старая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 - Тогда файл "cf/Configuration.xml" содержит "2.0.0.0" - Тогда файл "cfe/Configuration.xml" содержит "2.0.0.0" + Тогда файл "cf/Configuration.xml" содержит " 2.0.0.0" + Тогда файл "cfe/Configuration.xml" содержит " 2.0.0.0" Сценарий: Изменение версии, если в файле не задана версия @@ -111,9 +121,224 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит - | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | | Старая версия | И Код возврата команды "oscript" равен 0 Тогда файл "cfe_without_version/Configuration.xml" содержит "2.0.0.0" + +Сценарий: Изменение версии внешней обработки из комментария, указан путь каталога исходников обработки + + Дано Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога + И я создаю файл "build/xdd_test/xdd_test.xml" с текстом + """ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 645cde0d-2357-42ea-8a8b-12cff526f0bd + + + 9506ef93-ef46-43e1-b089-9f25add335b2 + a3f477fd-3fcc-4e25-9f24-0566b2d830fc + + + + xdd_test + + Xdd test v1.2.3.44 + + + + + """ + + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" + И Я добавляю параметр "--for-meta-comment" для команды "oscript" + И Я добавляю параметр "--src build/xdd_test" для команды "oscript" + И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + И я показываю текст файла "build/a.log" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | + | Старая версия 1.2.3.44 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "build/xdd_test/xdd_test.xml" содержит "Xdd test v 2.0.0.0" + +Сценарий: Изменение версии внешней обработки из пустого комментария, указан путь каталога исходников обработки + + Дано Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога + И я создаю файл "build/xdd_test/xdd_test.xml" с текстом + """ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 645cde0d-2357-42ea-8a8b-12cff526f0bd + + + 9506ef93-ef46-43e1-b089-9f25add335b2 + a3f477fd-3fcc-4e25-9f24-0566b2d830fc + + + + xdd_test + + + + + + + """ + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" + И Я добавляю параметр "--for-meta-comment" для команды "oscript" + И Я добавляю параметр "--src build/xdd_test" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | + | Старая версия | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "build/xdd_test/xdd_test.xml" содержит "2.0.0.0" + +Сценарий: Изменение версии внешних обработок из комментария, указан путь к каталогу, внутри которого находятся обработки + + Дано я создаю каталог "build/1" + Дано я создаю каталог "build/2" + Дано Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build/1" рабочего каталога + Дано Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build/2" рабочего каталога + И я создаю файл "build/1/xdd_test/xdd_test.xml" с текстом + """ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 645cde0d-2357-42ea-8a8b-12cff526f0bd + + + 9506ef93-ef46-43e1-b089-9f25add335b2 + a3f477fd-3fcc-4e25-9f24-0566b2d830fc + + + + xdd_test + + Xdd test v1.2.3.44 + + + + + """ + И я создаю файл "build/2/xdd_test/xdd_test.xml" с текстом + """ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 645cde0d-2357-42ea-8a8b-12cff526f0bd + + + 9506ef93-ef46-43e1-b089-9f25add335b2 + a3f477fd-3fcc-4e25-9f24-0566b2d830fc + + + + xdd_test + + Xdd test v1.2.3.45 + + + + + """ + + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" + И Я добавляю параметр "--for-meta-comment" для команды "oscript" + И Я добавляю параметр "--src build" для команды "oscript" + И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + И я показываю текст файла "build/a.log" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | + | Старая версия 1.2.3.44 | + | Старая версия 1.2.3.45 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "build/1/xdd_test/xdd_test.xml" содержит "Xdd test v 2.0.0.0" + Тогда файл "build/2/xdd_test/xdd_test.xml" содержит "Xdd test v 2.0.0.0" + +Сценарий: Изменение версии и конфигурации и расширения и внешнего файла, указан каталог корня проекта + + Дано Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог + Дано Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог + Дано Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога + И я создаю файл "build/xdd_test/xdd_test.xml" с текстом + """ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 645cde0d-2357-42ea-8a8b-12cff526f0bd + + + 9506ef93-ef46-43e1-b089-9f25add335b2 + a3f477fd-3fcc-4e25-9f24-0566b2d830fc + + + + xdd_test + + Xdd test v1.2.3.44 + + + + + """ + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript" + И Я добавляю параметр "--src ." для команды "oscript" + И Я добавляю параметр "--for-meta-comment" для команды "oscript" + И Я добавляю параметр "--debuglogfile build/a.log" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + И я показываю текст файла "build/a.log" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации или внешнего файла 1С на 2.0.0.0 | + | Старая версия 1.0.0.0 | + | Старая версия 1.1.0.0 | + | Старая версия 1.2.3.44 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "cf/Configuration.xml" содержит " 2.0.0.0" + Тогда файл "cfe/Configuration.xml" содержит " 2.0.0.0" + Тогда файл "build/xdd_test/xdd_test.xml" содержит "Xdd test v 2.0.0.0" diff --git a/src/main.os b/src/main.os index 769f6260..aa3b4de9 100644 --- a/src/main.os +++ b/src/main.os @@ -255,6 +255,7 @@ СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); + СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); Рез = Новый Структура; Для каждого КлючЗначение Из СтруктураПодключения Цикл @@ -310,7 +311,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\241\320\261\320\276\321\200\320\272\320\260\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\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\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 8a4c974f..480b6f8b 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\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\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\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" @@ -28,10 +28,14 @@ "Ключ кэшированных значений файлов, default: compileepfrunner"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--onlycopy", "Флаг, только копировать. Без сборки обработки, даже если выглядит как обработка"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", + "Номер сборки для установки в последний разряд номера версии"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--for-meta-comment", + "Версия указана в комментарии внешнего файла"); Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // @@ -45,14 +49,19 @@ УпаковщикВнешнихОбработок.УстановитьЛог(ДополнительныеПараметры.Лог); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + НастройкаИзмененияВерсии = Новый Структура; + НастройкаИзмененияВерсии.Вставить("НомерСборки", ПараметрыКоманды["--build-number"]); + НастройкаИзмененияВерсии.Вставить("ВерсияВКомментарииМетаданного", ПараметрыКоманды["--for-meta-comment"]); + Если ЗначениеЗаполнено(НастройкаИзмененияВерсии.НомерСборки) И Не НастройкаИзмененияВерсии.ВерсияВКомментарииМетаданного Тогда + ВызватьИсключение "При указании номера сборки нужно указывать флаг ""--for-meta-comment"", т.к. других вариантов установки версии пока не реализовано." + КонецЕсли; УпаковщикВнешнихОбработок.Собрать( ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["inputPath"]), ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["outputPath"]), - ДанныеПодключения.СтрокаПодключения, ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль, - ПараметрыКоманды["--v8version"], - ПараметрыКоманды["--onlycopy"], - ПараметрыКоманды["--cachekey"]); + ДанныеПодключения, + ПараметрыКоманды["--onlycopy"], ПараметрыКоманды["--cachekey"], + НастройкаИзмененияВерсии); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецФункции 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..82329dcd 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" @@ -22,7 +22,9 @@ ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты)."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--new-version", - "Номер версии, который нужно установить"); + "Номер версии, который нужно установить. Внимание - требуется 4х-разрядная версия!"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--for-meta-comment", + "Версия указана в комментарии внешнего файла"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Путь Configuration.xml или каталога, содержащего этот файл, или корневого каталога для поиска в подкаталогах - для исходников конфигурации или расширения"); @@ -43,13 +45,15 @@ Лог = ДополнительныеПараметры.Лог; - НомерВерсии = ПараметрыКоманды["--new-version"]; ПутьФайла = ПараметрыКоманды["--src"]; + НомерВерсии = ПараметрыКоманды["--new-version"]; + НастройкиУстановки = Новый Структура; + НастройкиУстановки.Вставить("ВерсияВКомментарииМетаданного", ПараметрыКоманды["--for-meta-comment"]); - Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1 - %2", НомерВерсии, ПутьФайла); + Лог.Информация("Изменяю версию в исходниках конфигурации или внешнего файла 1С на %1 - %2", НомерВерсии, ПутьФайла); МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии); + СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии, НастройкиУстановки); Для каждого КлючЗначение Из СтарыеВерсии Цикл Лог.Информация(" Старая версия %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\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 b1d5b9df..4a6e208e 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" @@ -25,7 +25,7 @@ Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьФайлаКонфигурации, Ложь) Цикл + Для Каждого Файл Из ФайлыКонфигураций(ПутьФайлаКонфигурации, Ложь) Цикл СтрокаXML = ПрочитатьФайл(Файл.ПолноеИмя); Результат.Вставить(Файл.ПолноеИмя, ВерсияКонфигурацииПоХМЛ(СтрокаXML)); КонецЦикла; @@ -40,23 +40,52 @@ // ПутьИсходников - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему // если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах // НовыйНомерВерсии - Строка - версия для установки +// НастройкиУстановки - Структура - Разные варианты установки для внешних файлов. Может быть пустой коллекцией. +// * ВерсияВКомментарииМетаданного - Булево - По умолчанию. Искать\устанавливать версию в комментарии внешнего файла // // Возвращаемое значение: // Соответствие - текущая версия конфигурации // * Ключ - Строка - путь найденного файла Configuration.xml // * Значение - Строка - предыдущая версия из этого файла // -Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии) Экспорт +Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии, Знач НастройкиУстановки) Экспорт Результат = Новый Соответствие; + ВнешниеФайлы = Неопределено; + + Попытка + Для Каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл + ПредыдущаяВерсия = УстановитьВерсиюВХМЛ(Файл.ПолноеИмя, НовыйНомерВерсии); + Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); + КонецЦикла; + Исключение + ВнешниеФайлы = ВнешниеФайлы(ПутьИсходников); + Если Не ЗначениеЗаполнено(ВнешниеФайлы) Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл - ПредыдущаяВерсия = ЗаписатьНомерВерсии(Файл.ПолноеИмя, НовыйНомерВерсии); - Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); - КонецЦикла; + Если ВнешниеФайлы = Неопределено Тогда + ВнешниеФайлы = ВнешниеФайлы(ПутьИсходников); + КонецЕсли; + МенятьХМЛ = Не ЗначениеЗаполнено(НастройкиУстановки) Или НастройкиУстановки.ВерсияВКомментарииМетаданного; + Если Не МенятьХМЛ Тогда + Лог.Предупреждение("Найдены xml-исходники внешних обработок\отчетов 1С, но в команде не указан вариант указания версии.") + Иначе + Для Каждого Файл Из ВнешниеФайлы Цикл + ИмяФайла = Файл.ПолноеИмя; + Попытка + ПредыдущаяВерсия = УстановитьВерсиюВнешнегоФайла(ИмяФайла, НовыйНомерВерсии); + Результат.Вставить(ИмяФайла, ПредыдущаяВерсия); + Исключение + ИнфоОшибки = ИнформацияОбОшибке(); + Лог.Отладка("Пропускаю файл из-за ошибки чтения или определения версии. %1 + |%2", ИмяФайла, КраткоеПредставлениеОшибки(ИнфоОшибки)); + КонецПопытки; + КонецЦикла; + КонецЕсли; Возврат Результат; - КонецФункции // Устанавливает новый номер сборки версии конфигурации или расширения в исходниках. Заменяется последний разряд версии @@ -76,7 +105,7 @@ Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл + Для Каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл ПредыдущаяВерсия = ЗаписатьНомерСборки(Файл.ПолноеИмя, НовыйНомерСборки); Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); КонецЦикла; @@ -85,6 +114,36 @@ КонецФункции +// Устанавливает новый номер сборки версии внешней обработки\отчета в исходниках. Заменяется последний разряд версии +// Например, если старая версия 5.4.3.124, а номер сборки 125, то новая версия 5.4.3.125 +// +// Параметры: +// ПутьИсходников - Строка - путь к корневому xml-файлу или к каталогу, его содержащему +// если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах +// НовыйНомерСборки - Строка - номер сборки для установки +// НастройкиУстановки - Структура - Разные варианты установки для внешних файлов. Может быть пустой коллекцией. +// * ВерсияВКомментарииМетаданного - Булево - По умолчанию. Искать\устанавливать версию в комментарии внешнего файла +// +// Возвращаемое значение: +// Соответствие - текущая версия конфигурации +// * Ключ - Строка - путь найденного xml-файла +// * Значение - Строка - предыдущая версия из этого файла +// +Функция УстановитьНомерСборкиДляВнешнегоФайла(Знач ПутьИсходников, Знач НовыйНомерСборки, Знач НастройкиУстановки) Экспорт + + Результат = Новый Соответствие; + + Если НастройкиУстановки.ВерсияВКомментарииМетаданного Тогда + Для Каждого Файл Из ВнешниеФайлы(ПутьИсходников) Цикл + ПредыдущаяВерсия = ЗаписатьНомерСборкиВнешнегоФайла(Файл.ПолноеИмя, НовыйНомерСборки); + Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -97,65 +156,103 @@ КонецФункции -Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации) +Процедура ЗаписатьФайл(Знач ПутьФайла, Знач НоваяСтрокаXML) + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML); + ТекстовыйДокумент.Записать(ПутьФайла, КодировкаТекста.UTF8); +КонецПроцедуры - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+)<\/Version>"); - Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации); - Если Совпадения.Количество() = 0 Тогда - РегулярноеВыражение = Новый РегулярноеВыражение(""); - Если РегулярноеВыражение.Совпадает(ХМЛСтрокаФайлаКонфигурации) Тогда - Возврат ""; - КонецЕсли; +Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайла) + Возврат ВерсияПоХМЛ(ХМЛСтрокаФайла, "Version"); +КонецФункции + +Функция ВерсияПоХМЛ(Знач ХМЛСтрокаФайла, Знач ИмяТегаСВерсией) - ВызватьИсключение "Версия проекта не определена"; + РегулярноеВыражение = РегуляркаПоискаВерсии(ИмяТегаСВерсией); + + Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайла); + Если ЗначениеЗаполнено(Совпадения) Тогда + Результат = Совпадения[0].Группы[2].Значение; + Лог.Отладка("текущая версия %1", Результат); + Возврат Результат; КонецЕсли; - Результат = Совпадения[0].Группы[1].Значение; + РегулярноеВыражение = РегуляркаПоискаПустойВерсии(ИмяТегаСВерсией); + Если РегулярноеВыражение.Совпадает(ХМЛСтрокаФайла) Тогда + Возврат ""; + КонецЕсли; - Лог.Отладка("текущая версия %1", Результат); + ВызватьИсключение "Версия в файле не найдена. Неверный файл?"; - Возврат Результат; +КонецФункции + +Функция УстановитьВерсиюВнешнегоФайла(ПутьВнешнегоФайла, НомерВерсии) + + Лог.Отладка("устанавливаю версию %1 в исходниках внешнего файла %2", НомерВерсии, ПутьВнешнегоФайла); + СтрокаXML = ПрочитатьФайл(ПутьВнешнегоФайла); + + ИМЯ_ТЕГА_С_ВЕРСИЕЙ = "Comment"; + ПредыдущаяВерсия = ВерсияПоХМЛ(СтрокаXML, ИМЯ_ТЕГА_С_ВЕРСИЕЙ); + + НоваяСтрокаXML = ИзменитьВерсиюВХМЛ(СтрокаXML, НомерВерсии, ИМЯ_ТЕГА_С_ВЕРСИЕЙ); + ЗаписатьФайл(ПутьВнешнегоФайла, НоваяСтрокаXML); + + Возврат ПредыдущаяВерсия; КонецФункции -Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НомерВерсии) +Функция УстановитьВерсиюВХМЛ(ПутьФайлаКонфигурации, НомерВерсии) Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурации); СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(СтрокаXML); - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии); + НоваяСтрокаXML = ИзменитьВерсиюКонфигурации(СтрокаXML, НомерВерсии); + ЗаписатьФайл(ПутьФайлаКонфигурации, НоваяСтрокаXML); Возврат ПредыдущаяВерсия; КонецФункции -Процедура ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии) +Функция ИзменитьВерсиюКонфигурации(СтрокаXML, НомерВерсии) + Возврат ИзменитьВерсиюВХМЛ(СтрокаXML, НомерВерсии, "Version"); +КонецФункции - ШаблонПодстановки = СтрШаблон("%1", НомерВерсии); - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+<\/Version>)"); - НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки); +Функция ИзменитьВерсиюВХМЛ(СтрокаXML, НомерВерсии, Знач ИмяТегаСВерсией) - РегулярноеВыражение = Новый РегулярноеВыражение("()"); - НоваяСтрокаXML = РегулярноеВыражение.Заменить(НоваяСтрокаXML, ШаблонПодстановки); + ШаблонПодстановки = СтрШаблон("<%1>$1 %2$3", ИмяТегаСВерсией, НомерВерсии); + ШаблонПодстановкиДляПустойВерсии = СтрШаблон("<%1>%2", ИмяТегаСВерсией, НомерВерсии); - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML); - ТекстовыйДокумент.Записать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + РегулярноеВыражение = РегуляркаПоискаВерсии(ИмяТегаСВерсией); + НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки); -КонецПроцедуры + РегулярноеВыражение = РегуляркаПоискаПустойВерсии(ИмяТегаСВерсией); + Результат = РегулярноеВыражение.Заменить(НоваяСтрокаXML, ШаблонПодстановкиДляПустойВерсии); + Возврат СтрЗаменить(Результат, " ", " "); // 2 пробела на один пробел + +КонецФункции Функция ЗаписатьНомерСборки(ПутьФайлаКонфигурации, НомерСборки) + Возврат ЗаписатьНомерСборкиВХмл(ПутьФайлаКонфигурации, НомерСборки, "Version"); +КонецФункции - Лог.Отладка("устанавливаю номер сборки %1 в исходниках конфигурации %2", НомерСборки, ПутьФайлаКонфигурации); +Функция ЗаписатьНомерСборкиВнешнегоФайла(ПутьФайлаКонфигурации, НомерСборки) + Возврат ЗаписатьНомерСборкиВХмл(ПутьФайлаКонфигурации, НомерСборки, "Comment"); +КонецФункции + +Функция ЗаписатьНомерСборкиВХмл(ПутьФайлаКонфигурации, НомерСборки, ИмяТегаСВерсией) + + Лог.Отладка("устанавливаю номер сборки %1 в исходниках %2", НомерСборки, ПутьФайлаКонфигурации); СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); - ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(СтрокаXML); + ПредыдущаяВерсия = ВерсияПоХМЛ(СтрокаXML, ИмяТегаСВерсией); + Лог.Отладка("Найдена предыдущая версия %1", ПредыдущаяВерсия); ВерсияСоСборкой = ВерсияСоСборкой(ПредыдущаяВерсия, НомерСборки); - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, ВерсияСоСборкой); + НоваяСтрокаXML = ИзменитьВерсиюВХМЛ(СтрокаXML, ВерсияСоСборкой, ИмяТегаСВерсией); + ЗаписатьФайл(ПутьФайлаКонфигурации, НоваяСтрокаXML); Возврат ПредыдущаяВерсия; @@ -163,6 +260,9 @@ Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки) + Если ПустаяСтрока(НомерВерсии) Тогда + Возврат "1.0.0." + НомерСборки; + КонецЕсли; ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки); РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)"); Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки); @@ -172,7 +272,7 @@ Функция ФайлыКонфигураций(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) Результат = Новый Массив; - ИмяФайлаКонфигурации = "Configuration.xml"; + ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(); Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); Если Файл.ЭтоКаталог() Тогда @@ -191,15 +291,86 @@ ИначеЕсли НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурации) Тогда Результат.Добавить(Файл); Возврат Результат; - ИначеЕсли ИскатьВПодкаталогах Тогда - Возврат НайтиФайлы(ПутьФайлаИлиКаталогИсходников, ИмяФайлаКонфигурации, Истина); Иначе +// todo выбрасывать ли исключение, если не нашли подходящих файлов ? ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файл конфигурации %1 или на каталог, его содержащий - %2", ИмяФайлаКонфигурации, ПутьФайлаИлиКаталогИсходников); КонецЕсли; КонецФункции +Функция ВнешниеФайлы(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) + Результат = Новый Массив; + ИгнорируемыеВнешниеФайлы = ИгнорируемыеВнешниеФайлы(); + Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); + Если Файл.ЭтоФайл() Тогда + Если Файл.Расширение = ".xml" И ИгнорируемыеВнешниеФайлы.Получить(НРег(Файл.Имя)) = Неопределено Тогда + Лог.Отладка("Нашли xml-файл %1", Файл.ПолноеИмя); + Результат.Добавить(Файл); + КонецЕсли; + Возврат Результат; + ИначеЕсли Файл.ЭтоКаталог() Тогда + ХмлФайлы = НайтиВнешниеХМЛФайлыВКаталогеИПодкаталогах(Файл.ПолноеИмя, ИскатьВПодкаталогах, ИгнорируемыеВнешниеФайлы); + Для Каждого ХмлФайл Из ХмлФайлы Цикл + Результат.Добавить(ХмлФайл); + КонецЦикла; + Лог.Отладка("Нашли внешние xml-файлы. Количество %1", Результат.Количество()); + Возврат Результат; +// todo выбрасывать ли исключение, если не нашли подходящих файлов ? + // Иначе + // ВызватьИсключение СтрШаблон("Переданный путь должен указывать на внешний файл 1С или на каталог, его содержащий - %1", + // ПутьФайлаИлиКаталогИсходников); + КонецЕсли; + Возврат Результат; +КонецФункции + +// поиск по подкаталог без рекурсии, только если на текущем уровне не найдено ни одного хмл-файла +Функция НайтиВнешниеХМЛФайлыВКаталогеИПодкаталогах(Знач ПутьКаталога, Знач ИскатьВПодкаталогах, Знач ИгнорируемыеВнешниеФайлы) + Результат = Новый Массив; + ХмлФайлы = НайтиФайлы(ПутьКаталога, "*.xml"); + Для Каждого Файл Из ХмлФайлы Цикл + Если ИгнорируемыеВнешниеФайлы.Получить(НРег(Файл.Имя)) = Неопределено Тогда + Лог.Отладка("Нашли xml-файл %1", Файл.ПолноеИмя); + Результат.Добавить(Файл); + КонецЕсли; + КонецЦикла; + Лог.Отладка("Нашли внешние xml-файлы. Количество %1 в каталоге %2", Результат.Количество(), ПутьКаталога); + + Если Не ЗначениеЗаполнено(Результат) И ИскатьВПодкаталогах Тогда + ВсеФайлы = НайтиФайлы(ПутьКаталога, ПолучитьМаскуВсеФайлы()); + Для Каждого Файл Из ВсеФайлы Цикл + Если Не Файл.ЭтоКаталог() Тогда + Продолжить; + КонецЕсли; + ХмлФайлы = НайтиВнешниеХМЛФайлыВКаталогеИПодкаталогах(Файл.ПолноеИмя, ИскатьВПодкаталогах, ИгнорируемыеВнешниеФайлы); + Для Каждого ХмлФайл Из ХмлФайлы Цикл + Результат.Добавить(ХмлФайл); + КонецЦикла; + КонецЦикла; + КонецЕсли; + Возврат Результат; +КонецФункции + +Функция РегуляркаПоискаВерсии(ИмяТегаСВерсией) + Шаблон = СтрШаблон("<%1>(.*)(\d+.\d+.\d+.\d+)(.*)<\/%1>", ИмяТегаСВерсией); + Возврат Новый РегулярноеВыражение(Шаблон); +КонецФункции + +Функция РегуляркаПоискаПустойВерсии(ИмяТегаСВерсией) + Возврат Новый РегулярноеВыражение(СтрШаблон("(<%1/>)", ИмяТегаСВерсией));; +КонецФункции + +Функция ИмяФайлаКонфигурации() + Возврат "Configuration.xml"; +КонецФункции + +Функция ИгнорируемыеВнешниеФайлы() + Результат = Новый Соответствие(); + Результат.Вставить(НРег(ИмяФайлаКонфигурации()), ИмяФайлаКонфигурации()); + Результат.Вставить("configdumpinfo.xml", "ConfigDumpInfo.xml"); + Возврат Результат; +КонецФункции + Процедура ПолучитьЛог() Если Лог = Неопределено Тогда Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); 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 ea10dba1..9dcb76db 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" @@ -51,10 +51,13 @@ КонецПроцедуры -Процедура Собрать(Знач Путь, Знач КаталогВыгрузки, Знач СтрокаПодключения = "", Знач Пользователь = "", - Знач Пароль = "", Знач ВерсияПлатформы = "", Знач ТолькоКопировать = Ложь, Знач КлючКэша = Неопределено) Экспорт +Процедура Собрать(Знач Путь, Знач КаталогВыгрузки, Знач ДанныеПодключения, + Знач ТолькоКопировать, Знач КлючКэша, Знач НастройкаИзмененияВерсии) Экспорт + Перем КаталогВременнойИБ; + СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; + ПутьКИсходникам = ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, Путь); ПапкаИсходников = Новый Файл(ПутьКИсходникам); @@ -62,7 +65,7 @@ Если ПустаяСтрока(СтрокаПодключения) Тогда Конфигуратор = Новый УправлениеКонфигуратором(); КаталогВременнойИБ = ВременныеФайлы.НовоеИмяФайла("tmp"); - СоздатьКаталог(КаталогВременнойИБ); + СоздатьКаталог(КаталогВременнойИБ); // TODO переделать на ВременныеФайлы Конфигуратор.СоздатьФайловуюБазу(КаталогВременнойИБ); СтрокаПодключения = "/F""" + КаталогВременнойИБ + """"; @@ -89,16 +92,18 @@ ЗначенияПараметровСборки.Вставить("inDir", ПутьКИсходникам); ЗначенияПараметровСборки.Вставить("outDir", КаталогВыгрузки); ЗначенияПараметровСборки.Вставить("connectionstring", СтрокаПодключения); - ЗначенияПараметровСборки.Вставить("user", Пользователь); - ЗначенияПараметровСборки.Вставить("password", Пароль); - ЗначенияПараметровСборки.Вставить("version", ВерсияПлатформы); + ЗначенияПараметровСборки.Вставить("user", ДанныеПодключения.Пользователь); + ЗначенияПараметровСборки.Вставить("password", ДанныеПодключения.Пароль); + ЗначенияПараметровСборки.Вставить("version", ДанныеПодключения.ВерсияПлатформы); ЗначенияПараметровСборки.Вставить("name", КлючКэша); ЗначенияПараметровСборки.Вставить("autoupdate", Истина); ЗначенияПараметровСборки.Вставить("onlycopy", ТолькоКопировать); + ЗначенияПараметровСборки.Вставить("set-version", НастройкаИзмененияВерсии); + ЕстьИзмененияДляЗаписи = Ложь; Лог.Отладка("Начали собирать"); СледитьЗаИзменениямиФайловВРепозиторииИсходников(ЗначенияПараметровСборки, НастройкиИзФайла, , ЕстьИзмененияДляЗаписи); - Лог.Отладка("Закончили собирать " + ЕстьИзмененияДляЗаписи + " " + ТолькоКопировать); + Лог.Отладка("Закончили собирать. найдены изменения " + ЕстьИзмененияДляЗаписи + ", только копирование " + ТолькоКопировать); Если ЕстьИзмененияДляЗаписи И НЕ ТолькоКопировать Тогда ЗаписатьВКешФайл(НастройкиИзФайла); КонецЕсли; @@ -279,26 +284,30 @@ КонецПроцедуры Процедура СледитьЗаИзменениямиФайловВРепозиторииИсходников(Значение, КэшПутей, Фильтр = "", ЕстьИзменения = Ложь) + Ключ = Строка(Значение.Получить("inDir")) + "" + Строка(Значение.Получить("outDir")); + ИмяПравила = Значение.Получить("name"); + Если ИмяПравила <> Неопределено И Не ПустаяСтрока(ИмяПравила) Тогда + Ключ = ИмяПравила; + КонецЕсли; + Если Не ПустаяСтрока(Фильтр) И Фильтр <> Ключ Тогда + Возврат; + КонецЕсли; + КаталогВходящий = ОбщиеМетоды.ПолныйПуть(Значение.Получить("inDir")); КаталогИсходящий = ОбщиеМетоды.ПолныйПуть(Значение.Получить("outDir")); СтрокаПодключения = ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(Значение.Получить("connectionstring")); Пользователь = Значение.Получить("user"); Пароль = Значение.Получить("password"); ВерсияПлатформы = Значение.Получить("version"); - ИмяПравила = Значение.Получить("name"); АвтоОбновление = Значение.Получить("autoupdate"); ТолькоКопировать = Значение.Получить("onlycopy"); Если ТипЗнч(ТолькоКопировать) <> Тип("Булево") Тогда ТолькоКопировать = Ложь; КонецЕсли; - - Если ИмяПравила <> Неопределено И Не ПустаяСтрока(ИмяПравила) Тогда - Ключ = ИмяПравила; - КонецЕсли; - - Если Не ПустаяСтрока(Фильтр) И Фильтр <> Ключ Тогда - Возврат; + НастройкаИзмененияВерсии = Значение.Получить("set-version"); + Если Не ЗначениеЗаполнено(НастройкаИзмененияВерсии) Тогда + НастройкаИзмененияВерсии = Новый Структура; КонецЕсли; РежимОдногоКаталога = (ОбщиеМетоды.ПолныйПуть(КаталогВходящий) = ОбщиеМетоды.ПолныйПуть(КаталогИсходящий)); @@ -399,10 +408,10 @@ Кэш.Вставить(Файл.ПолноеИмя, ХэшФайла(Файл)); КонецЕсли; - Если ОбработкуНашли = Истина И СписокОбработанных.Получить(ПапкаИсходников) <> Неопределено Тогда + Если ОбработкуНашли И СписокОбработанных.Получить(ПапкаИсходников) <> Неопределено Тогда Кэш.Вставить(Файл.ПолноеИмя, ХэшФайла(Файл)); СписокОбработанных.Вставить(Файл.ПолноеИмя, Истина); - ИначеЕсли ОбработкуНашли = Истина Тогда + ИначеЕсли ОбработкуНашли Тогда РежимВыгрузки = "Каталог"; Если Не ПустаяСтрока(КаталогИсходящий) Тогда Расширение = Прав(СокрЛП(КаталогИсходящий), 4); @@ -429,7 +438,9 @@ КаталогВыгрузкиОбработки = КаталогИсходящий; КонецЕсли; - ИмяФайлаОбъекта = СобратьФайлВнешнейОбработки(ПапкаИсходников, КаталогВыгрузкиОбработки, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); + ИмяФайлаОбъекта = СобратьФайлВнешнейОбработки(ПапкаИсходников, КаталогВыгрузкиОбработки, + СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы, + НастройкаИзмененияВерсии); КаталогФайл = Новый Файл(ПапкаИсходников); КаталогВходящийПолныйПуть = Новый Файл(КаталогВходящий).ПолноеИмя; @@ -723,7 +734,8 @@ КонецПроцедуры -Функция СобратьФайлВнешнейОбработки(Знач ПутьКИсходникам, Знач КаталогВыгрузки, Знач СтрокаПодключения, Знач Пользователь, Знач Пароль, Знач ВерсияПлатформы) +Функция СобратьФайлВнешнейОбработки(Знач ПутьКИсходникам, Знач КаталогВыгрузки, + Знач СтрокаПодключения, Знач Пользователь, Знач Пароль, Знач ВерсияПлатформы, Знач НастройкаИзмененияВерсии) Лог.Отладка("Собираю исходники <" + ПутьКИсходникам + ">"); @@ -733,14 +745,35 @@ ИмяФайлаОбъекта = КаталогВыгрузки; // ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки); Лог.Отладка("Собираю исходники ИмяФайлаОбъекта <" + ИмяФайлаОбъекта + ">"); - СобратьФайлВнешнейОбработкиИзИсходников(НайденныйФайл[0], ИмяФайлаОбъекта, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); + БазовыйХмлФайл = НайденныйФайл[0]; + ИзменитьНомерСборкиВнешнейОбработки(БазовыйХмлФайл.ПолноеИмя, НастройкаИзмененияВерсии); + + СобратьФайлВнешнейОбработкиИзИсходников(БазовыйХмлФайл, ИмяФайлаОбъекта, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); Лог.Отладка("Успешно собран файл " + ИмяФайлаОбъекта); Возврат ИмяФайлаОбъекта; - КонецФункции -Процедура СобратьФайлВнешнейОбработкиИзИсходников(ПапкаИсходников, ИмяФайлаОбъекта, Знач СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы) +Процедура ИзменитьНомерСборкиВнешнейОбработки(Знач ПутьИсходников, Знач НастройкиУстановки) + НомерСборки = НастройкиУстановки.НомерСборки; + Если Не ЗначениеЗаполнено(НомерСборки) Тогда + Возврат; + КонецЕсли; + + Лог.Информация("Изменяю номер сборки в исходниках внешнего файла 1С на %1", НомерСборки); + + МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; + СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьНомерСборкиДляВнешнегоФайла(ПутьИсходников, НомерСборки, НастройкиУстановки); + + Для каждого КлючЗначение Из СтарыеВерсии Цикл + Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); + КонецЦикла; + +КонецПроцедуры + +Процедура СобратьФайлВнешнейОбработкиИзИсходников(ПапкаИсходников, ИмяФайлаОбъекта, + Знач СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы) + Лог.Отладка("Собираю файл из исходников <" + ПапкаИсходников.ПолноеИмя + "> в файл " + ИмяФайлаОбъекта); Конфигуратор = Новый УправлениеКонфигуратором();