1
0
mirror of https://github.com/agibalovsa/-1C_CICD.git synced 2025-10-06 05:36:58 +02:00

Выполнены задачи:

- Добавлена возможность указывать файлы настройки вне репозитория проекта
Исправлены ошибки:
- Исправлены грамматические ошибки.
- Исправлены различные ошибки поведения.
- Добавлена кодировка в bat файлы.
This commit is contained in:
Agibalov Sergey
2025-02-24 10:52:04 +04:00
parent c7091c4cf6
commit 26709b51ba
12 changed files with 472 additions and 329 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.vscode

View File

@@ -1,15 +1,19 @@
# 1С:CICD
Набор скриптов на 1С:Исполнителе для организации контуров разработки, тестирования, обновления. Для запуска требуется 1С:Исполнитель версии [5.0.8.4](https://releases.1c.ru/version_files?nick=Executor&ver=5.0.8.4).
Набор скриптов на 1С:Исполнителе для организации контуров разработки, тестирования, обновления. Для запуска требуется 1С:Исполнитель версии [5.2.11.1](https://releases.1c.ru/version_files?nick=Executor&ver=5.2.11.1).
## Исполнение скриптов
Скрипты исполняются с помощью следующего шаблона:
```cmd
executor <ПутьКСкриптам>main.sbsl <РежимИсполнения> <ОтносительныйПутьККорнюПроекта> <ОстановитьсяВКонце>
executor <ПутьКСкриптам>main.sbsl <РежимИсполнения> <ОтносительныйПутьККорнюПроекта> <ОстановитьсяВКонце> <ПутьКФайламНастройки>
```
- **executor** - команда запуска скрипта, едина для исполнителя **U** и **X**.
> Для исполнителя **X** в переменных среды необходимо прописать путь к исполняемому файлу **executor**, а не **bin\executor-x**.
- **ПутьКСкриптам** - путь к файлу main.sbsl относительно корня репозитория проекта.
- **РежимИсполнения** - задает конкретную команду для выполнения скриптов.
@@ -20,6 +24,8 @@ executor <ПутьКСкриптам>main.sbsl <РежимИсполнения>
- **ОстановитьсяВКонце** - **1** - перед завершением исполнения скрипта, будет ожидаться ввод от пользователя (необходим для анализа вывода лога исполнения), 0 - скрипт завершится, не дожидаясь пользователя.
- **ПутьКФайламНастройки** - если предполагается хранить файлы настройка не в репозитории проекта, а по альтернативному пути, необходимо в этом параметре указать путь к файлу настройки ***project_config.json***. Файл пользовательской настройки ***project_user_prop.json*** автоматически создастся по этому же пути согласно общим правилам инициализации скриптов.
## Режимы исполнения скриптов
- **init** - инициализация репозитория проекта для работы со скриптами.
@@ -34,11 +40,11 @@ executor <ПутьКСкриптам>main.sbsl <РежимИсполнения>
- **update_ib_patch** - частичное обновление информационной базы файлами из каталога с файлами полностью или частично снятых с поддержки объектов.
- **check_ib_cf** - тестирование конфигурации информационной базы.
- **check_ib_cfe** - тестирование расширений информационной базы.
- **get_ib_configdump** - получение файла bin/.1ccicd/ConfigDumpInfo.xml из информационной базы, где идет разработка, для ускоренной выгрузки в файлы xml измененной конфигурации.
- **get_ib_configdumpinfo** - получение файла bin/.1ccicd/ConfigDumpInfo.xml из информационной базы, где идет разработка, для ускоренной выгрузки в файлы xml измененной конфигурации.
- **get_ib_status** - получение состояния конфигурации относительно раннее полученного файла bin/.1ccicd/ConfigDumpInfo.xml из информационной базы.
- **get_ib_xml** - получение файловой выгрузки из информационной базы, где идет разработка.
- **new_bin** - конвертация файла ParentConfigurations.bin в формат, пригодный для хранения и работы с ним в git хранилище.
- **reapair_bin** - удаление из файла ParentConfigurations.bin битых идентификаторов метаданных.
- **repair_bin** - удаление из файла ParentConfigurations.bin битых идентификаторов метаданных.
- **new_configdumpinfo** - конвертация файла ConfigDumpInfo.xml в формат, пригодный для хранения и работы с ним в git хранилище.
## Требуемая структура репозитория проекта
@@ -111,7 +117,7 @@ project
"CFE_EXEC_MODE" : 1,
"CFE_BUILD_MODE" : 2,
"IB_LOGIN" : "Администратор",
"IB_PASSWD" : "passw",
"IB_PASSWD" : "password",
"IB_CONNECTION_STRING" : "Srvr=\"develop\";Ref=\"DO\";",
"IB_PLATFORM_VERSION" : "",
"CHECK" : [
@@ -131,19 +137,19 @@ project
}
```
- HASH - хэши каталогов файловых выгрузок, нужны для того, чтобы сборка файлов проекта выполнялась только в случае изменении в файловой выгрузки относительно предыдущей сборки
- HASH - хеши каталогов файловых выгрузок, нужны для того, чтобы сборка файлов проекта выполнялась только в случае изменении в файловой выгрузки относительно предыдущей сборки
- TEMP - каталог с кэшем для быстрой сборки cfe, также здесь содержится актуальный для ИБ разработки ConfigDumpInfo.xml.
- PATH_1C - Альтернативный пусть установки 1С, например, D:\Program Files\1cv8
- EXEC_MODE - режим исполнения для сборки файла конфигурации cf: 1 - пакетный режим, 2 - автономный сервер ibcmd. **Рекомендуется использовать 2**. (Автономный сервер в 10 раз быстрее собирает конфигурацию)
- CFE_EXEC_MODE - режим исполнения для сборки файлов расширения cfe: 1 - пакетный режим, 2 - автономный сервер ibcmd. **Рекомендуется использовать 1**. (Из-за текущих ошибок работы автономного сервера с расширениями)
- CFE_BUILD_MODE - режим сборки расширений: 1 - сборка с помощью пустой конфигурации, 2 - сборка с помощью не пустой конфигурации. **Рекомендуется использовать 2**. (Из-за последних ограничений платформы 1С, сборка cfe через пустую конфигурацию очищает ряд событий. Конфигурация для сборки находится в каталоге bin/.1ccicd)
- CHECK - индивидуальные режимы проверки конфигурации и расширений, принятые на проекте. (Полное перечисление режимов в файле oc_batch_mode.sbsl)
- IB_CONNECTION_STRING - строка соединения до конфигурации, в которой ведется разработка. (Соединение с конфигурацией выполняется в режимах get_configdump, update*)
- IB_CONNECTION_STRING - строка соединения до конфигурации, в которой ведется разработка. (Соединение с конфигурацией выполняется в режимах get_ib_configdumpinfo, update_ib_*)
- IB_PLATFORM_VERSION - версия платформы, для работы с конфигурацией ИБ разработки.
- IB_LOGIN - логин конфигурации, в которой ведется разработка
- IB_PASSWD - пароль конфигурации, в которой ведется разработка
- **.gitignore** - файл с описанием каталогов, которые не должны версионироваться в git. В данном случае в нем должен содержаться каталог bin.
- **.gitignore** - файл с описанием каталогов, которые не должны учитываться в истории git. В данном случае в нем должен содержаться каталог bin.
```ini
/bin
@@ -173,13 +179,13 @@ project
```bash
#!/bin/sh
executor scripts/1c_cicd/main.sbsl new_bin "." 0
executor scripts/1c_cicd/main.sbsl new_configdumpinfo "." 0
git add src/cf/Ext/ParentConfigurations.bin src/cf/ConfigDumpInfo.xml src/cfe/*/ConfigDumpInfo.xml
executor scripts/1c_cicd/main.sbsl build_cfe "." 0
executor "scripts/1c_cicd/main.sbsl" new_bin "." 0
executor "scripts/1c_cicd/main.sbsl" new_configdumpinfo "." 0
git add "src/cf/Ext/ParentConfigurations.bin" "src/cf/ConfigDumpInfo.xml" "src/cfe/*/ConfigDumpInfo.xml"
executor "scripts/1c_cicd/main.sbsl" build_cfe "." 0
```
Без данных строчек, возникнут проблемы при слиянии изменений, сборки после слияния. Режим build_cfe не только собирает cfe но и проверяет, что перед фиксацией все изменения создаю корректное расширение.
Без данных строчек могут возникнуть проблемы при сборке после слиянии изменений. Режим build_cfe не только собирает cfe но и проверяет, что перед фиксацией все изменения создают корректное расширение.
## Особенности использования файла ConfigDumpInfo.xml
@@ -225,7 +231,7 @@ configVersion="0000000000000000000000000000000000000000
2. Создать новую ветку разработки по задаче разработки.
3. Обновить ИБ разработки с помощью update_ib_patch в том случае, если у вас конфигурация находится на частичной поддержке, или с помощью update_ib_cf, если у вас конфигурация вообще снята с поддержки.
4. Во время обновления ИБ будет получен файл bin/.1ccicd/ConfigDumpInfo.xml с последними версиями конфигурации.
5. Также, актуализировать файл ConfigDumpInfo.xml с помощью режима get_ib_configdump.
5. Также, актуализировать файл ConfigDumpInfo.xml с помощью режима get_ib_configdumpinfo.
6. Зайти в конфигуратор, провести разработку.
7. Получить файлы конфигурации с помощью команды get_ib_xml.
8. Зафиксировать изменения.

View File

@@ -1,9 +1,10 @@
#!/usr/bin/executor
#требуется oc_main.sbsl
#требуется IConfigurationProperties.sbsl
#требуется ILogging.sbsl
// ПрограмнныйИнтерфейс
// ПрограммныйИнтерфейс
@Глобально
метод ПеревестиВНовыйФорматParentConfigurations(ПутьКФайламПроекта: Строка)
@@ -11,7 +12,6 @@
знч ВремяИсполненияОпераций = новый ILogging.ВремяИсполненияОпераций()
ВремяИсполненияОпераций.НачатьЗамер("ПеревестиВНовыйФорматParentConfigurations")
знч СР = Файлы.СимволРазделителя
знч ФайлИзменений = ПолучитьФайлParentConfigurations(ПутьКФайламПроекта)
если не ФайлИзменений.Существует()
возврат
@@ -24,7 +24,7 @@
ДанныеИзменения = ДанныеИзменения.Заменить(",", "," + Символы.НОВАЯ_СТРОКА)
ФайлИзменений.ОткрытьПотокЗаписи(Ложь).Записать(Байты{EF BB BF}).Записать(ДанныеИзменения).Закрыть()
Консоль.Записать("\нИзменен файл %{ПутьКФайламПроекта}%{СР}Ext%{СР}ParentConfigurations.bin")
Консоль.Записать("\нИзменен файл %{ФайлИзменений.Путь}")
ВремяИсполненияОпераций.ЗавершитьЗамер("ПеревестиВНовыйФорматParentConfigurations")
@@ -37,7 +37,6 @@
знч ВремяИсполненияОпераций = новый ILogging.ВремяИсполненияОпераций()
ВремяИсполненияОпераций.НачатьЗамер("ПеревестиВНовыйФорматConfigDumpInfo")
знч СР = Файлы.СимволРазделителя
знч ФайлИзменений = ПолучитьФайлConfigDumpInfo(ПутьКФайламПроекта)
если не ФайлИзменений.Существует()
возврат
@@ -48,7 +47,7 @@
ДанныеИзменения = ДанныеИзменения.Заменить(ОбразецЗамены, "configVersion=\"0000000000000000000000000000000000000000\"")
ФайлИзменений.ОткрытьПотокЗаписи(Ложь).Записать(Байты{EF BB BF}).Записать(ДанныеИзменения).Закрыть()
Консоль.Записать("\нИзменен файл %{ПутьКФайламПроекта}%{СР}ConfigDumpInfo.xml")
Консоль.Записать("\нИзменен файл %{ФайлИзменений.Путь}")
ВремяИсполненияОпераций.ЗавершитьЗамер("ПеревестиВНовыйФорматConfigDumpInfo")
@@ -260,9 +259,7 @@
знч ВремяИсполненияОпераций = новый ILogging.ВремяИсполненияОпераций()
ВремяИсполненияОпераций.НачатьЗамер("ОбработатьФайлыКонфигурации")
знч СР = Файлы.СимволРазделителя
пер ТекстФайлыДляЗагрузки = ""
знч ПолучитьПоПоддержке = РежимОбработки == IConfigurationProperties.РежимОбработки.ПолучитьПоПоддержке
знч ПолучитьФайлыКонфигурации = ПолучитьПоПоддержке и не ПутьКФайламРезультата.Пусто()
@@ -271,6 +268,8 @@
ПеревестиВНовыйФорматConfigDumpInfo(ПутьКФайламКонфигурации)
ПеревестиВНовыйФорматParentConfigurations(ПутьКФайламКонфигурации)
знч ОбъектыМетаданныхКУдалению = новый Соответствие<Строка, Строка>()
для КлючИЗначение из СтруктураКонфигурации.Метаданные
знч ОбъектМетаданных = КлючИЗначение.Значение
@@ -283,14 +282,12 @@
знч ОсновнойФайл = новый Файл(ОбъектМетаданных.Файлы.Получить("ПутьКОсновномуФайлу"))
если не ОсновнойФайл.Существует()
Консоль.Записать("\н%{ОсновнойФайл.Путь}")
Консоль.Записать("Не существует путь к объекту метаданных: %{ОбъектМетаданных.Имя}")
выбросить новый ИсключениеНедопустимоеСостояние()
ОбъектыМетаданныхКУдалению.ВставитьЕслиОтсутствует(КлючИЗначение.Ключ, "Объект метаданных %{ОбъектМетаданных.Имя}:\нне существует пути %{ОсновнойФайл.Путь}, объект очищен")
;
если ПолучитьФайлыКонфигурации
знч ОсновнойФайлОтносительныйПуть = ОсновнойФайл.Путь.Заменить(ПутьКФайламКонфигурации, "")
знч ОсновнойФайлРезультат = новый Файл(ПутьКФайламРезультата + СР + ОсновнойФайлОтносительныйПуть)
знч ОсновнойФайлОтносительныйПуть = oc_main.УдалитьЧастьПути(ОсновнойФайл.Путь, [ПутьКФайламКонфигурации])
знч ОсновнойФайлРезультат = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКФайламРезультата, [ОсновнойФайлОтносительныйПуть]))
если ОсновнойФайлРезультат.Существует()
Файлы.Удалить(ОсновнойФайлРезультат)
;
@@ -302,7 +299,9 @@
;
ТекстФайлыДляЗагрузки = ТекстФайлыДляЗагрузки + ОсновнойФайлОтносительныйПуть + Символы.НОВАЯ_СТРОКА
если ОбъектМетаданных.Имя.НачинаетсяС("Configuration")
ТекстФайлыДляЗагрузки = ТекстФайлыДляЗагрузки + "Ext%{СР}ParentConfigurations.bin" + Символы.НОВАЯ_СТРОКА
ТекстФайлыДляЗагрузки = ТекстФайлыДляЗагрузки
+ oc_main.ДобавитьЧастьПути("Ext", ["ParentConfigurations.bin"])
+ Символы.НОВАЯ_СТРОКА
;
;
@@ -312,27 +311,33 @@
IConfigurationProperties.РассчитатьХешФайла(ПутьConfigDumpInfo, ХешированиеДанныхКонфигурации)
;
знч ОсновнойКаталог = новый Файл(ОбъектМетаданных.Файлы.Получить("ПутьКОсновномуКаталогу"))
знч ОсновнойКаталог = новый Файл(ОбъектМетаданных.Файлы.Получить("ПутьКОсновномуКаталогу"))
если ОсновнойКаталог.Существует() и не ОсновнойКаталог.ЭтоКаталог()
Консоль.Записать("\н%{ОсновнойКаталог.Путь}")
Консоль.Записать("Ошибочный путь к каталогу объекта метаданных: %{ОбъектМетаданных.Имя}")
выбросить новый ИсключениеНедопустимоеСостояние()
ОбъектыМетаданныхКУдалению.ВставитьЕслиОтсутствует(КлючИЗначение.Ключ, "Объект метаданных %{ОбъектМетаданных.Имя}:\нне существует пути %{ОсновнойКаталог.Путь}, объект очищен")
иначе если ОсновнойКаталог.Существует() и ОсновнойКаталог.ЭтоКаталог()
если ПолучитьФайлыКонфигурации
знч ОсновнойКаталогРезультат = новый Файл(ПутьКФайламРезультата + СР + ОсновнойКаталог.Путь.Заменить(ПутьКФайламКонфигурации, ""))
знч ОсновнойКаталогРезультат = новый Файл(oc_main.ДобавитьЧастьПути(
ПутьКФайламРезультата,
[oc_main.УдалитьЧастьПути(ОсновнойКаталог.Путь, [ПутьКФайламКонфигурации])]
))
если ОсновнойКаталогРезультат.Существует()
Файлы.Удалить(ОсновнойКаталогРезультат)
;
Файлы.Скопировать(ОсновнойКаталог.Путь, ОсновнойКаталогРезультат)
если ОсновнойФайл.Имя == "Configuration.xml"
знч ФайлПоставщикаРезультата = ПолучитьФайлПоставщика(ПутьКФайламРезультата)
Файлы.Удалить(ФайлПоставщикаРезультата)
СброситьФайлПоставщика(ПутьКФайламРезультата)
;
;
IConfigurationProperties.РассчитатьХешКаталога(ОсновнойКаталог.Путь, ХешированиеДанныхКонфигурации, Ложь)
;
;
для КлючИЗначение из ОбъектыМетаданныхКУдалению
СтруктураКонфигурации.Метаданные.Удалить(КлючИЗначение.Ключ)
СтруктураКонфигурации.Идентификаторы.Удалить(КлючИЗначение.Ключ)
Консоль.Записать("\н%{КлючИЗначение.Значение}")
;
СтруктураКонфигурации.Хеш = ХешированиеДанныхКонфигурации.Результат.ВСтроку()
СтруктураКонфигурации.ТекстФайлыДляЗагрузки = ТекстФайлыДляЗагрузки
@@ -343,7 +348,6 @@
@Глобально
метод ПолучитьФайлПоставщика(ПутьКФайламКонфигурации: Строка): Файл
знч СР = Файлы.СимволРазделителя
знч НастройкиПоискаФайлов = новый НастройкиПоискаФайлов()
.ИмяСодержит(".cf")
.МаксимальнаяГлубина(1)
@@ -351,8 +355,8 @@
.ИсключитьКаталоги(Истина)
пер КонфигурацияПоставщикаСуществует = Ложь
знч КаталогParentConfigurations = новый Файл(ПутьКФайламКонфигурации + "%{СР}Ext%{СР}ParentConfigurations")
пер ФайлПоставщика = новый Файл(КаталогParentConfigurations.Путь + СР + "ФайлПоставщика.cf")
знч КаталогParentConfigurations = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКФайламКонфигурации, ["Ext", "ParentConfigurations"]))
пер ФайлПоставщика = новый Файл(oc_main.ДобавитьЧастьПути(КаталогParentConfigurations.Путь, ["ФайлПоставщика.cf"]))
если КаталогParentConfigurations.Существует()
знч ПоискФайлаПоставщика = Файлы.Найти(КаталогParentConfigurations, НастройкиПоискаФайлов)
если ПоискФайлаПоставщика.Размер() > 0
@@ -369,11 +373,20 @@
;
@Глобально
метод СброситьФайлПоставщика(ПутьКФайламКонфигурации: Строка)
знч ФайлПоставщика = ПолучитьФайлПоставщика(ПутьКФайламКонфигурации)
если ФайлПоставщика.Существует()
ФайлПоставщика.ОткрытьПотокЗаписи().Записать(Байты{}).Закрыть()
;
;
@Глобально
метод ПолучитьФайлConfiguration(ПутьКФайламКонфигурации: Строка): Файл
знч СР = Файлы.СимволРазделителя
знч ФайлConfiguration = новый Файл(ПутьКФайламКонфигурации + "%{СР}Configuration.xml")
знч ФайлConfiguration = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКФайламКонфигурации, ["Configuration.xml"]))
возврат ФайлConfiguration
@@ -382,8 +395,7 @@
@Глобально
метод ПолучитьФайлConfigDumpInfo(ПутьКФайламКонфигурации: Строка): Файл
знч СР = Файлы.СимволРазделителя
знч ФайлConfigDumpInfo = новый Файл(ПутьКФайламКонфигурации + "%{СР}ConfigDumpInfo.xml")
знч ФайлConfigDumpInfo = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКФайламКонфигурации, ["ConfigDumpInfo.xml"]))
возврат ФайлConfigDumpInfo
@@ -392,8 +404,7 @@
@Глобально
метод ПолучитьФайлParentConfigurations(ПутьКФайламКонфигурации: Строка): Файл
знч СР = Файлы.СимволРазделителя
знч ФайлParentConfigurations = новый Файл(ПутьКФайламКонфигурации + "%{СР}Ext%{СР}ParentConfigurations.bin")
знч ФайлParentConfigurations = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКФайламКонфигурации, ["Ext", "ParentConfigurations.bin"]))
возврат ФайлParentConfigurations
@@ -409,20 +420,20 @@
возврат Версия
;
исп ПотокЧтенияonfiguration = ФайлConfiguration.ОткрытьПотокЧтения()
знч ЧтениеXml = новый ЧтениеXml(ПотокЧтенияonfiguration)
исп ПотокЧтенияConfiguration = ФайлConfiguration.ОткрытьПотокЧтения()
знч ЧтениеXml = новый ЧтениеXml(ПотокЧтенияConfiguration)
если ЧтениеXml.СледующийДо("Version")
ЧтениеXml.Следующий()
Версия = ЧтениеXml.Значение
;
ПотокЧтенияonfiguration.Закрыть()
ПотокЧтенияConfiguration.Закрыть()
возврат Версия
;
// СлужеюныеПроцедурыИФункции
// СлужебныеПроцедурыИФункции
@Локально
метод ПрочитатьНастройкиПоддержки(ПутьКФайламКонфигурации: Строка) : IConfigurationProperties.НастройкиПоддержки
@@ -484,30 +495,36 @@
@Локально
метод ПолучитьФайлыОбъектаМетаданных(ПутьКФайламПроекта: Строка, ИмяОбъектаМетаданных: Строка, ПолучитьФайлыРодителя = Ложь) : Соответствие<Строка, Строка>
знч СР = Файлы.СимволРазделителя
знч ФайлыОбъекта = новый Соответствие<Строка, Строка>()
знч СоставИмениМетаданных = ИмяОбъектаМетаданных.Разделить(".")
пер ОсновнойФайлПуть = ""
пер ОсновнойКаталогПуть = ""
если СоставИмениМетаданных[0] == "Configuration"
ОсновнойКаталогПуть = "%{ПутьКФайламПроекта}%{СР}Ext"
ОсновнойФайлПуть = "%{ПутьКФайламПроекта}%{СР}Configuration.xml"
ОсновнойКаталогПуть = oc_main.ДобавитьЧастьПути(ПутьКФайламПроекта, ["Ext"])
ОсновнойФайлПуть = oc_main.ДобавитьЧастьПути(ПутьКФайламПроекта, ["Configuration.xml"])
иначе если СоставИмениМетаданных[0] == "Subsystem"
ОсновнойКаталогПуть = "%{ПутьКФайламПроекта}"
для Индекс = 0 по СоставИмениМетаданных.Размер() - 1
если Индекс % 2 == 0
ОсновнойКаталогПуть = ОсновнойКаталогПуть + "%{СР}%{ПутьКОбъектуМетаданных(СоставИмениМетаданных[Индекс])}"
ОсновнойКаталогПуть = oc_main.ДобавитьЧастьПути(ОсновнойКаталогПуть, [ПутьКОбъектуМетаданных(СоставИмениМетаданных[Индекс])])
иначе
ОсновнойКаталогПуть = ОсновнойКаталогПуть + "%{СР}%{СоставИмениМетаданных[Индекс]}"
ОсновнойКаталогПуть = oc_main.ДобавитьЧастьПути(ОсновнойКаталогПуть, [СоставИмениМетаданных[Индекс]])
;
;
ОсновнойФайлПуть = "%{ОсновнойКаталогПуть}.xml"
иначе
если СоставИмениМетаданных.Размер() == 2 или ПолучитьФайлыРодителя
ОсновнойКаталогПуть = "%{ПутьКФайламПроекта}%{СР}%{ПутьКОбъектуМетаданных(СоставИмениМетаданных[0])}%{СР}%{СоставИмениМетаданных[1]}"
ОсновнойКаталогПуть = oc_main.ДобавитьЧастьПути(ПутьКФайламПроекта, [ПутьКОбъектуМетаданных(СоставИмениМетаданных[0]), СоставИмениМетаданных[1]])
иначе если СоставИмениМетаданных.Размер() == 4
ОсновнойКаталогПуть = "%{ПутьКФайламПроекта}%{СР}%{ПутьКОбъектуМетаданных(СоставИмениМетаданных[0])}%{СР}%{СоставИмениМетаданных[1]}%{СР}%{ПутьКОбъектуМетаданных(СоставИмениМетаданных[2])}%{СР}%{СоставИмениМетаданных[3]}"
ОсновнойКаталогПуть = oc_main.ДобавитьЧастьПути(
ПутьКФайламПроекта,
[
ПутьКОбъектуМетаданных(СоставИмениМетаданных[0]),
СоставИмениМетаданных[1],
ПутьКОбъектуМетаданных(СоставИмениМетаданных[2]),
СоставИмениМетаданных[3]
])
иначе
Консоль.Записать("\нНе определен путь к объекту метаданных: %{ИмяОбъектаМетаданных}")
выбросить новый ИсключениеНедопустимоеСостояние()

View File

@@ -38,20 +38,20 @@
@Глобально
метод Дополнить(НастройкиПоддержкиИБ: IConfigurationProperties.НастройкиПоддержки)
для ТекцщийИдентификатор из Идентификаторы
знч ИдентификаторИБ = НастройкиПоддержкиИБ.Идентификаторы.ПолучитьИлиУмолчание(ТекцщийИдентификатор.Ключ, Неопределено)
для ТекущийИдентификатор из Идентификаторы
знч ИдентификаторИБ = НастройкиПоддержкиИБ.Идентификаторы.ПолучитьИлиУмолчание(ТекущийИдентификатор.Ключ, Неопределено)
если ИдентификаторИБ == Неопределено
ТекцщийИдентификатор.Значение.ПравилаПользователя = "1"
ТекцщийИдентификатор.Значение.ПравилаПоставщика = "0"
ТекущийИдентификатор.Значение.ПравилаПользователя = "1"
ТекущийИдентификатор.Значение.ПравилаПоставщика = "0"
иначе
ТекцщийИдентификатор.Значение.ПравилаПользователя =
не ИдентификаторИБ.ПравилаПользователя == "0" и ТекцщийИдентификатор.Значение.ПравилаПользователя == "0"
ТекущийИдентификатор.Значение.ПравилаПользователя =
не ИдентификаторИБ.ПравилаПользователя == "0" и ТекущийИдентификатор.Значение.ПравилаПользователя == "0"
? ИдентификаторИБ.ПравилаПользователя
: ТекцщийИдентификатор.Значение.ПравилаПользователя
ТекцщийИдентификатор.Значение.ПравилаПоставщика =
не ИдентификаторИБ.ПравилаПоставщика == "0" и ТекцщийИдентификатор.Значение.ПравилаПоставщика == "0"
: ТекущийИдентификатор.Значение.ПравилаПользователя
ТекущийИдентификатор.Значение.ПравилаПоставщика =
не ИдентификаторИБ.ПравилаПоставщика == "0" и ТекущийИдентификатор.Значение.ПравилаПоставщика == "0"
? ИдентификаторИБ.ПравилаПоставщика
: ТекцщийИдентификатор.Значение.ПравилаПоставщика
: ТекущийИдентификатор.Значение.ПравилаПоставщика
;
;
@@ -91,7 +91,7 @@
;
// ПрограмнныйИнтерфейс
// ПрограммныйИнтерфейс
@Глобально
метод РассчитатьХешКаталога(ПутьККаталогу: Строка, ХешированиеДанных: ХешированиеДанных | Неопределено = Неопределено, Замер = Ложь): Строка

View File

@@ -5,7 +5,7 @@
#требуется oc_batch_mode.sbsl
#требуется oc_ibsrv.sbsl
// ПрограмнныйИнтерфейс
// ПрограммныйИнтерфейс
@Глобально
метод СоздатьИнформационнуюБазу(СтрокаДоступа: Строка, ПутьКФайламПлатформы: Строка, РежимИсполнения: oc_main.РежимыИсполнения)
@@ -345,7 +345,7 @@
ВремяИсполненияОпераций.ЗавершитьЗамер("СравнитьКонфигурации")
;
// СлужеюныеПроцедурыИФункции
// СлужебныеПроцедурыИФункции
@Локально
метод ПолучитьНастройкиЗагрузкиВыгрузки(ПутьКФайлуСборки: Строка, ФайлыКонфигурации: Массив<Строка>|Строка, ТипЗагрузкиВыгрузки: Строка) : Соответствие<Строка, Строка|Булево>

View File

@@ -1,7 +1,7 @@
#!/usr/bin/executor
@Глобально
структура ВремяИсполения
структура ВремяИсполнения
пер ВремяНачала: ДатаВремя
пер ВремяОкончания: ДатаВремя
@@ -11,12 +11,12 @@
@Глобально
структура ВремяИсполненияОпераций
знч Операции: Соответствие<Строка, ВремяИсполения>
знч Операции: Соответствие<Строка, ВремяИсполнения>
@Глобально
метод НачатьЗамер(ИмяОперации: Строка)
знч ВремяИсполения = новый ВремяИсполения(ДатаВремя.Сейчас())
Операции.Вставить(ИмяОперации, ВремяИсполения)
знч ВремяИсполнения = новый ВремяИсполнения(ДатаВремя.Сейчас())
Операции.Вставить(ИмяОперации, ВремяИсполнения)
;
@Глобально
@@ -28,7 +28,7 @@
;
Операция.ВремяОкончания = Сейчас
Операция.Длительность = Операция.ВремяОкончания - Операция.ВремяНачала
Консоль.Записать("\нДлительность операции %{ИмяОперации} состовляет %{Операция.Длительность.Представление("с")} сек.")
Консоль.Записать("\нДлительность операции %{ИмяОперации} составляет %{Операция.Длительность.Представление("с")} сек.")
возврат Операция.Длительность
;

View File

@@ -7,49 +7,65 @@
#требуется ILogging.sbsl
#требуется oc_main.sbsl
// ПрограмнныйИнтерфейс
// ПрограммныйИнтерфейс
@Глобально
метод СобратьФайлыКонфигурации(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, СобратьРасширения: Булево = Ложь, ПересобратьКонфигурациюПоставщика: Булево = Ложь) : Булево
знч ВремяИсполненияОпераций = новый ILogging.ВремяИсполненияОпераций()
знч СобранныеПроекты = новый Массив<Строка>()
знч ОшибочныеПроекты = новый Массив<Строка>()
пер Статус = Истина
если не СобратьРасширения
если ПараметрыПроекта.ПутьКФайламКонфигурации.Путь.Пусто()
или не (новый Файл(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)).Существует()
возврат Статус
;
ВремяИсполненияОпераций.НачатьЗамер("ПолучитьФайлКонфигурации")
знч СтатусПолучения = ПолучитьФайлКонфигурации(
ПараметрыПроекта,
ПараметрыПроекта.ПутьКФайламКонфигурации,
ПересобратьКонфигурациюПоставщика)
знч Длительность = ВремяИсполненияОпераций.ЗавершитьЗамер("ПолучитьФайлКонфигурации")
знч ТекстСборки = "%{IProjectProperties.ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ} (%{Длительность.Представление("с")} сек.)"
если СтатусПолучения == 1
СобранныеПроекты.Добавить("%{IProjectProperties.ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ} (%{Длительность.Представление("с")} сек.)")
СобранныеПроекты.Добавить(ТекстСборки)
иначе если СтатусПолучения == 2
ОшибочныеПроекты.Добавить(ТекстСборки)
;
Статус = Статус и СтатусПолучения < 2
;
пер ПодготовитьКонфигурацию = Истина
для Расширение из ПараметрыПроекта.Расширения
если не СобратьРасширения
прервать
;
если не (новый Файл(Расширение.Значение.Путь)).Существует()
продолжить
;
если ПодготовитьКонфигурацию
ПодготовитьКонфигурацию(ПараметрыПроекта)
ПодготовитьКонфигурацию = Ложь
;
ВремяИсполненияОпераций.НачатьЗамер("ПолучитьФайлРасширения")
знч СтатусПолучения = ПолучитьФайлКонфигурации(
ПараметрыПроекта,
Расширение.Значение,
Ложь)
знч Длительность = ВремяИсполненияОпераций.ЗавершитьЗамер("ПолучитьФайлРасширения")
знч ТекстСборки = "%{Расширение.Ключ} (%{Длительность.Представление("с")} сек.)"
если СтатусПолучения == 1
СобранныеПроекты.Добавить(Расширение.Ключ + " (%{Длительность.Представление("с")} сек.)")
СобранныеПроекты.Добавить(ТекстСборки)
иначе если СтатусПолучения == 2
ОшибочныеПроекты.Добавить(ТекстСборки)
;
Статус = Статус и СтатусПолучения < 2
;
ВывестиИнформациюПоСобраннымПроектам(СобранныеПроекты)
ВывестиИнформациюПоПроектам(СобранныеПроекты)
ВывестиИнформациюПоПроектам(ОшибочныеПроекты, 2)
возврат Статус
;
@@ -66,10 +82,9 @@
ВремяИсполненияОпераций.НачатьЗамер("СобратьПатчКонфигурации")
знч СР = Файлы.СимволРазделителя
знч КаталогСборкиПатча = ПолучитьВременныйКаталог(ПараметрыПроекта, IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА)
знч ФайлЗагрузкиПатча = новый Файл("%{ПараметрыПроекта.ПутьКСборкеПроекта.Путь}%{СР}%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА}_in")
знч КаталогДляВыгрузки = новый Файл(КаталогСборкиПатча.Путь + "_temp")
знч ФайлЗагрузкиПатча = новый Файл(oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА}_in"]))
знч КаталогДляВыгрузки = новый Файл("%{КаталогСборкиПатча.Путь}_temp")
если КаталогСборкиПатча.Существует()
УдалитьФайлСКонтролемОшибок(КаталогСборкиПатча)
@@ -109,7 +124,7 @@
;
пер ФайлПоставщика = IConfiguration.ПолучитьФайлПоставщика(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)
пер ПутьКФайлуПоставщикаЗагрузки = ФайлПоставщика.Путь.Заменить(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь, КаталогСборкиПатча.Путь + СР)
пер ПутьКФайлуПоставщикаЗагрузки = ФайлПоставщика.Путь.Заменить(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь, КаталогСборкиПатча.Путь)
если не ПараметрыСоединенияИБ == Неопределено
если не ФайлПоставщика.Существует()
ФайлПоставщика = IConfiguration.ПолучитьФайлПоставщика(КаталогДляВыгрузки.Путь)
@@ -120,10 +135,10 @@
;
УдалитьФайлСКонтролемОшибок(КаталогДляВыгрузки)
иначе
(новый Файл(ПутьКФайлуПоставщикаЗагрузки)).ОткрытьПотокЗаписи().Записать("").Закрыть()
(новый Файл(ПутьКФайлуПоставщикаЗагрузки)).ОткрытьПотокЗаписи().Записать(Байты{}).Закрыть()
;
знч Длительность = ВремяИсполненияОпераций.ЗавершитьЗамер("ПолучитьФайлКонфигурации")
знч Длительность = ВремяИсполненияОпераций.ЗавершитьЗамер("СобратьПатчКонфигурации")
если СтруктураКонфигурации == Неопределено
возврат Неопределено
@@ -131,8 +146,8 @@
ФайлЗагрузкиПатча.ОткрытьПотокЗаписи().Записать(СтруктураКонфигурации.ТекстФайлыДляЗагрузки).Закрыть()
СобранныеПроекты.Добавить(IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА + " (%{Длительность.Представление("с")} сек.)")
ВывестиИнформациюПоСобраннымПроектам(СобранныеПроекты)
СобранныеПроекты.Добавить("%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА} (%{Длительность.Представление("с")} сек.)")
ВывестиИнформациюПоПроектам(СобранныеПроекты)
если СтруктураКонфигурации.Хеш == ПараметрыПроекта.ПутьКФайламКонфигурации.Хеш
возврат ""
@@ -148,7 +163,7 @@
знч ВремяИсполненияОпераций = новый ILogging.ВремяИсполненияОпераций()
если ПараметрыПроекта.ПараметрыСоединенияИБ.СтрокаСоединения.Пусто()
Консоль.Записать("\нНе заполнен путь к ИБ в файле хэша ProjectsHash.json")
Консоль.Записать("\нНе заполнен путь к ИБ в файле хеша ProjectsHash.json")
возврат Ложь
;
@@ -284,7 +299,7 @@
если Режим == 2
ФайлыДляВыгрузки = "ConfigDumpInfo.xml"
иначе
ФайлыДляВыгрузки = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.Путь + КаталогФайловПроекта.Имя + "_out")
ФайлыДляВыгрузки = новый Файл(oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{КаталогФайловПроекта.Имя}_out"]))
если не (ФайлыДляВыгрузки как Файл).Существует()
ФайлыДляВыгрузки = ""
иначе
@@ -342,7 +357,7 @@
иначе
если ПараметрыПроекта.ПараметрыСоединенияИБ.СтрокаСоединения.Пусто()
Консоль.Записать("\нНе заполнен путь к ИБ в файле хэша ProjectsHash.json")
Консоль.Записать("\нНе заполнен путь к ИБ в файле хеша ProjectsHash.json")
возврат Ложь
;
@@ -352,7 +367,7 @@
пер СтатусКонфигурации = 0
если не ПутьКВыгрузкиФайлаВерсий.Пусто()
знч ПутьКФайлуСтатуса = ПараметрыПроекта.ПутьКВременнымФайлам.Путь + "Status.txt"
знч ПутьКФайлуСтатуса = oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ["Status.txt"])
СтатусКонфигурации = IIBOperation.ПолучитьСтатусКонфигурации(
ПутьКФайлуСтатуса,
ПараметрыПроекта.ПараметрыСоединенияИБ.СтрокаСоединения,
@@ -374,10 +389,17 @@
знч ПутьДляВыгрузки = (СтатусКонфигурации == 2)
? новый Файл(ПутьКФайламПроекта.Путь)
: новый Файл(ПараметрыПроекта.ПутьКВременнымФайлам.Путь + "temp")
знч ФайлВерсииНовый = новый Файл(ПутьДляВыгрузки.Путь
+ Файлы.СимволРазделителя
+ ПараметрыПроекта.ФайлВерсийКонфигурации.Путь.Заменить(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ""))
: новый Файл(oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ["temp"]))
знч ФайлВерсииНовый = новый Файл(
oc_main.ДобавитьЧастьПути(
ПутьДляВыгрузки.Путь,
[
oc_main.УдалитьЧастьПути(
ПараметрыПроекта.ФайлВерсийКонфигурации.Путь,
[ПараметрыПроекта.ПутьКВременнымФайлам.Путь]
)
]
))
если СтатусКонфигурации == 2
Консоль.Записать("\нПолная выгрузка:")
@@ -418,7 +440,13 @@
пер УдаленыФайлы = Ложь
если ФайлВерсииНовый.Существует()
Файлы.Скопировать(ФайлВерсииНовый, ПутьКФайламПроекта.Путь + ФайлВерсииНовый.Путь.Заменить(ПутьДляВыгрузки.Путь, ""))
Файлы.Скопировать(
ФайлВерсииНовый,
oc_main.ДобавитьЧастьПути(
ПутьКФайламПроекта.Путь,
[oc_main.УдалитьЧастьПути(ФайлВерсииНовый.Путь, [ПутьДляВыгрузки.Путь])]
)
)
;
знч СтруктураКонфигурацииНовая = IConfiguration.ПрочитатьСтруктуруКонфигурации(КаталогФайловПроекта.Путь,
IConfigurationProperties.РежимОбработки.ПолучитьПоПоддержке)
@@ -438,7 +466,11 @@
если ФайлИсточник.ИмяБезРасширения == "ConfigDumpInfo"
продолжить
;
знч ФайлЦель = новый Файл(ПутьКФайламПроекта.Путь + ФайлИсточник.Путь.Заменить(ПутьДляВыгрузки.Путь, ""))
знч ФайлЦель = новый Файл(
oc_main.ДобавитьЧастьПути(
ПутьКФайламПроекта.Путь,
[oc_main.УдалитьЧастьПути(ФайлИсточник.Путь, [ПутьДляВыгрузки.Путь])]
))
знч НастройкиКопированияФайлов = новый НастройкиКопированияФайлов()
Файлы.Переместить(ФайлИсточник, ФайлЦель, НастройкиКопированияФайлов)
Консоль.Записать(ФайлЦель.Путь)
@@ -461,7 +493,7 @@
@Глобально
метод ПолучитьСтатусКонфигурации(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта) : Булево
знч ПутьКФайлуСтатуса = ПараметрыПроекта.ПутьКВременнымФайлам.Путь + "Status.txt"
знч ПутьКФайлуСтатуса = oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ["Status.txt"])
IIBOperation.ПолучитьСтатусКонфигурации(
ПутьКФайлуСтатуса,
ПараметрыПроекта.ПараметрыСоединенияИБ.СтрокаСоединения,
@@ -476,7 +508,7 @@
;
// СлужеюныеПроцедурыИФункции
// СлужебныеПроцедурыИФункции
@Локально
метод ПрочитатьСтруктуруКонфигурации(ПутьККаталогуПроекта: Строка, ПутьККаталогуСборкиПатча = "", ИсправитьОшибки = Ложь, НастройкиПоддержкиИБ: IConfigurationProperties.НастройкиПоддержки|Неопределено = Неопределено) : IConfigurationProperties.СтруктураКонфигурации
@@ -501,28 +533,27 @@
метод ПолучитьФайлКонфигурации(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ПутьКФайламПроекта: IProjectProperties.ПутьКФайламПроекта, ПересобратьКонфигурациюПоставщика: Булево = Ложь): Число
пер Результат = 0
знч СР = Файлы.СимволРазделителя
знч ПутьКФайламПлатформы = ПараметрыПроекта.ПутьКФайламПлатформы
знч РежимИсполнения = ПутьКФайламПроекта.ЭтоРасширение ? ПараметрыПроекта.РежимИСполненияРасширения : ПараметрыПроекта.РежимИСполнения
знч РасширениеФайлаСборки = ПутьКФайламПроекта.ЭтоРасширение ? "cfe" : "cf"
знч ФайлСборки = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.Путь + СР + (ПутьКФайламПроекта.ЭтоРасширение ? "%{ПутьКФайламПроекта.Имя}.%{РасширениеФайлаСборки}" : "1Cv8.%{РасширениеФайлаСборки}"))
знч ФайлСборки = новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь,
[ПутьКФайламПроекта.ЭтоРасширение ? "%{ПутьКФайламПроекта.Имя}.%{РасширениеФайлаСборки}" : "1Cv8.%{РасширениеФайлаСборки}"]
))
пер СтруктураКонфигурации = ПрочитатьСтруктуруКонфигурации(ПутьКФайламПроекта.Путь, ИсправитьОшибки = ПересобратьКонфигурациюПоставщика)
знч Версия = IConfiguration.ПрочитатьВерсиюКонфигурации(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)
знч КаталогВременнойБазы = ПолучитьВременныйКаталог(ПараметрыПроекта, IProjectProperties.ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ, Версия)
знч СоздатьИнформационнуюБазу = (не ПутьКФайламПроекта.ЭтоРасширение
или ПараметрыПроекта.РежимСборкиПроектаРасширения == IProjectProperties.РежимыСборкиПроекта.ВОсновнойКонфигурации
и КаталогВременнойБазы.Дочерние.Размер() == 0
или ПараметрыПроекта.РежимСборкиПроектаРасширения == IProjectProperties.РежимыСборкиПроекта.ВПустойКонфигурации)
знч ФайлКонфигурацииПоставщика = IConfiguration.ПолучитьФайлПоставщика(ПутьКФайламПроекта.Путь)
если не ПересобратьКонфигурациюПоставщика
и СтруктураКонфигурации.Хеш == ПутьКФайламПроекта.Хеш
и ФайлСборки.Существует()
и (ПараметрыПроекта.РежимСборкиПроектаРасширения == IProjectProperties.РежимыСборкиПроекта.ВОсновнойКонфигурации
и КаталогВременнойБазы.Дочерние.Размер() > 0
или ПараметрыПроекта.РежимСборкиПроектаРасширения == IProjectProperties.РежимыСборкиПроекта.ВПустойКонфигурации)
Консоль.Записать("\н%{ПутьКФайламПроекта.Имя}: изменений нет")
возврат Результат
;
@@ -584,11 +615,11 @@
ПутьКФайламПроекта.Путь,
ВременныйКаталогВыгрузки.Путь,
IConfigurationProperties.РежимОбработки.ПолучитьПоПоддержке)
Консоль.Записать("\нВ \"%{ПутьКФайламПроекта.Путь}\" добавлены измененые файлы из основной конфигурации")
Консоль.Записать("\нВ \"%{ПутьКФайламПроекта.Путь}\" добавлены измененные файлы из основной конфигурации")
Файлы.СоздатьКаталог("%{ВременныйКаталогВыгрузки.Путь}%{СР}Ext%{СР}ParentConfigurations")
Файлы.СоздатьКаталог(oc_main.ДобавитьЧастьПути(ВременныйКаталогВыгрузки.Путь, ["Ext","ParentConfigurations"]))
IIBOperation.ВыгрузитьКонфигурацию(
"%{ВременныйКаталогВыгрузки.Путь}%{СР}Ext%{СР}ParentConfigurations%{СР}%{ФайлКонфигурацииПоставщика.Имя}",
oc_main.ДобавитьЧастьПути(ВременныйКаталогВыгрузки.Путь, ["Ext","ParentConfigurations", ФайлКонфигурацииПоставщика.Имя]),
ВременныйКаталогБазыПоставщика.Путь,
ПутьКФайламПлатформы,
РежимИсполнения,
@@ -649,7 +680,7 @@
если не ПутьКФайламПроекта.ЭтоРасширение или ВременныйХешПроектаПосле == ВременныйХешПроектаДо
или ВременныйХешПроектаПосле == ВременныйХешПроектаЧетный
// Вторая проврека нужна из-за ошибки выгрузки ролей в расширениях
// Вторая проверка нужна из-за ошибки выгрузки ролей в расширениях
СтруктураКонфигурации = ВремСтруктураКонфигурации
прервать
иначе
@@ -680,7 +711,7 @@
если ПересобратьКонфигурациюПоставщика
IIBOperation.СравнитьКонфигурации(
ПараметрыПроекта.ПутьКВременнымФайлам.Путь + СР + "ИзмененияВКонфигурации_prod.mxl",
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ["ИзмененияВКонфигурации_prod.mxl"]),
КаталогВременнойБазы.Путь,
ПараметрыПроекта.ПутьКФайламПлатформы,
"",
@@ -711,17 +742,20 @@
@Локально
метод ЗагрузитьКонфигурацию(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ПараметрыСоединенияИБ: IProjectProperties.ПараметрыСоединенияИБ, ЭтоРасширение = Ложь)
знч СР = Файлы.СимволРазделителя
знч РасширениеФайлаЗагрузки = ЭтоРасширение ? "cfe" : "cf"
знч РежимИсполнения = ЭтоРасширение ? ПараметрыПроекта.РежимИСполненияРасширения : ПараметрыПроекта.РежимИСполнения
знч ФайлыЗагрузки = новый Массив<Файл>()
если ЭтоРасширение
для Расширение из ПараметрыПроекта.Расширения
ФайлыЗагрузки.Добавить(новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.Путь + СР + Расширение.Ключ + "." + РасширениеФайлаЗагрузки))
ФайлыЗагрузки.Добавить(новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{Расширение.Ключ}.%{РасширениеФайлаЗагрузки}"])
))
;
иначе
ФайлыЗагрузки.Добавить(новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.Путь + СР + "1Cv8." + РасширениеФайлаЗагрузки))
ФайлыЗагрузки.Добавить(новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["1Cv8.%{РасширениеФайлаЗагрузки}"])
))
;
для Файл из ФайлыЗагрузки
@@ -761,7 +795,9 @@
Консоль.Записать(Файл.Путь)
продолжить
;
пер ФайлыДляЗагрузки: Строка|Файл = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.Путь + Файл.ИмяБезРасширения + "_in")
пер ФайлыДляЗагрузки: Строка|Файл = новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{Файл.ИмяБезРасширения}_in"])
)
если не (ФайлыДляЗагрузки как Файл).Существует()
ФайлыДляЗагрузки = ""
;
@@ -783,10 +819,12 @@
@Локально
метод ЗагрузитьПатчКонфигурации(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ПараметрыСоединенияИБ: IProjectProperties.ПараметрыСоединенияИБ, ПолучитьФайлСравнения = Ложь)
знч СР = Файлы.СимволРазделителя
знч КаталогСборкиПатча = новый Файл("%{ПараметрыПроекта.ПутьКВременнымФайлам.Путь}%{СР}%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА}")
знч ФайлЗагрузкиПатча = новый Файл("%{ПараметрыПроекта.ПутьКСборкеПроекта.Путь}%{СР}%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА}_in")
знч КаталогСборкиПатча = новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, [IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА])
)
знч ФайлЗагрузкиПатча = новый Файл(
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{IProjectProperties.ИМЯ_КАТАЛОГА_ПАТЧА}_in"])
)
если не КаталогСборкиПатча.Существует()
или не ФайлЗагрузкиПатча.Существует()
@@ -809,14 +847,11 @@
знч НовыйФайлВерсийКонфигурации = IConfiguration.ПолучитьФайлConfigDumpInfo(КаталогСборкиПатча.Путь)
Файлы.Скопировать(НовыйФайлВерсийКонфигурации, ПараметрыПроекта.ФайлВерсийКонфигурации)
знч ФайлПоставщика = IConfiguration.ПолучитьФайлПоставщика(КаталогСборкиПатча.Путь)
если ФайлПоставщика.Существует()
Файлы.Удалить(ФайлПоставщика)
;
IConfiguration.СброситьФайлПоставщика(КаталогСборкиПатча.Путь)
если ПолучитьФайлСравнения
IIBOperation.СравнитьКонфигурации(
ПараметрыПроекта.ПутьКВременнымФайлам.Путь + СР + "ИзмененияВКонфигурации.mxl",
oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКВременнымФайлам.Путь, ["ИзмененияВКонфигурации.mxl"]),
ПараметрыСоединенияИБ.СтрокаСоединения,
ПараметрыСоединенияИБ.ПутьКФайламПлатформы,
ПараметрыСоединенияИБ.Логин,
@@ -826,13 +861,15 @@
;
@Локально
метод ВывестиИнформациюПоСобраннымПроектам(СобранныеПроекты: Массив<Строка>)
метод ВывестиИнформациюПоПроектам(Проекты: Массив<Строка>, СтатусСборки = 1)
если не СобранныеПроекты.Пусто()
Консоль.Записать("\нСобраны проекты:")
если не Проекты.Пусто() и СтатусСборки == 1
Консоль.Записать("\нСобранные проекты:")
иначе если не Проекты.Пусто() и СтатусСборки == 2
Консоль.Записать("\нОШИБОЧНЫЕ проекты:")
;
для ИмяПроекта из СобранныеПроекты
для ИмяПроекта из Проекты
Консоль.Записать(ИмяПроекта)
;
@@ -841,14 +878,14 @@
@Локально
метод ПолучитьВременныйКаталог(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ИмяКаталога: Строка, Версия = "") : Файл
знч СР = Файлы.СимволРазделителя
пер ПутьКВременномуКаталогу = ""
если ПараметрыПроекта.ПутьКВременнымФайлам.ОтносительныйПуть.Пусто()
ПутьКВременномуКаталогу = Файлы.СоздатьВременныйКаталог().Путь
иначе
ПутьКВременномуКаталогу = ПараметрыПроекта.ПутьКВременнымФайлам.ОтносительныйПуть
+ СР + ИмяКаталога
+ (Версия.Пусто() ? "" : "_%{Версия.Заменить(".", "_")}")
ПутьКВременномуКаталогу = oc_main.ДобавитьЧастьПути(
ПараметрыПроекта.ПутьКВременнымФайлам.ОтносительныйПуть,
[ИмяКаталога + (Версия.Пусто() ? "" : "_%{Версия.Заменить(".", "_")}")]
)
;
знч ВременныйКаталог = новый Файл(ПутьКВременномуКаталогу)

View File

@@ -29,31 +29,43 @@
знч PLATFORM_VERSION: Строка // Версия платформы
@Глобально
статический метод Прочитать(): Настройки
статический метод Прочитать(ПутьКНастройкам : Строка): Настройки
пер ФайлНастроек = новый Файл(ИМЯ_ФАЙЛА_НАСТРОЕК)
пер ФайлНастроек = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКНастройкам, [ИМЯ_ФАЙЛА_НАСТРОЕК]))
если не ФайлНастроек.Существует()
Записать("")
Записать(ПутьКНастройкам, "")
;
исп ПотокЧтения = ФайлНастроек.ОткрытьПотокЧтения()
знч ПрочитанныеНастройки = СериализацияJson.ПрочитатьОбъект(ПотокЧтения, Тип<Настройки>)
пер ПрочитанныеНастройки = СериализацияJson.ПрочитатьОбъект(ПотокЧтения, Тип<Настройки>)
ПотокЧтения.Закрыть()
пер BIN_DIR = oc_main.ИсправитьРазделителиПути(ПрочитанныеНастройки.BIN_DIR)
пер SRC_CF = oc_main.ИсправитьРазделителиПути(ПрочитанныеНастройки.SRC_CF)
пер SRC_CFE = oc_main.ИсправитьРазделителиПути(ПрочитанныеНастройки.SRC_CFE)
ПрочитанныеНастройки = новый Настройки(
ПрочитанныеНастройки.EXT_NAMES,
ПрочитанныеНастройки.CHECK,
BIN_DIR,
SRC_CF,
SRC_CFE,
ПрочитанныеНастройки.PLATFORM_VERSION
)
возврат ПрочитанныеНастройки
;
@Глобально
статический метод Записать(ВерсияПлатформы: Строка) : Булево
статический метод Записать(ПутьКНастройкам: Строка, ВерсияПлатформы: Строка) : Булево
знч СР = Файлы.СимволРазделителя
пер ФайлНастроек = новый Файл(ИМЯ_ФАЙЛА_НАСТРОЕК)
пер ФайлНастроек = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКНастройкам, [ИМЯ_ФАЙЛА_НАСТРОЕК]))
знч Настройки = новый Настройки(
["*"],
[],
"%{ИМЯ_КАТАЛОГА_СБОРКИ}",
"%{ИМЯ_КАТАЛОГА_ИСХОДНИКОВ}%{СР}%{ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ}",
"%{ИМЯ_КАТАЛОГА_ИСХОДНИКОВ}%{СР}%{ИМЯ_КАТАЛОГА_РАСШИРЕНИЙ}",
"%{ВерсияПлатформы}"
ИМЯ_КАТАЛОГА_СБОРКИ,
oc_main.ДобавитьЧастьПути(ИМЯ_КАТАЛОГА_ИСХОДНИКОВ, [ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ]),
oc_main.ДобавитьЧастьПути(ИМЯ_КАТАЛОГА_ИСХОДНИКОВ, [ИМЯ_КАТАЛОГА_РАСШИРЕНИЙ]),
ВерсияПлатформы
)
исп ПотокЗаписи = ФайлНастроек.ОткрытьПотокЗаписи()
@@ -80,10 +92,9 @@
знч PATH_1C: Строка
@Глобально
статический метод Прочитать(ПутьКНастройкам: ПутьКФайламПроекта, ВвестиЛогинПароль = Ложь): ПользовательскиеНастройки
знч СР = Файлы.СимволРазделителя
знч ФайлНастроек = новый Файл("%{ПутьКНастройкам.Путь}%{СР}%ИМЯ_ФАЙЛА_ПОЛЬЗ_НАСТРОЕК")
статический метод Прочитать(ПутьКНастройкам: Строка, ВвестиЛогинПароль = Ложь): ПользовательскиеНастройки
знч ФайлНастроек = новый Файл(oc_main.ДобавитьЧастьПути(ПутьКНастройкам, [ИМЯ_ФАЙЛА_ПОЛЬЗ_НАСТРОЕК]))
пер ПользовательскиеНастройки = новый ПользовательскиеНастройки(
новый Соответствие<Строка, Строка>(),
новый Массив<Строка>(),
@@ -91,14 +102,14 @@
"",
"",
"",
"%{ИМЯ_КАТАЛОГА_СБОРКИ}%{СР}%{ИМЯ_ВРЕМЕННОГО_КАТАЛОГА}",
oc_main.ДобавитьЧастьПути(ИМЯ_КАТАЛОГА_СБОРКИ, [ИМЯ_ВРЕМЕННОГО_КАТАЛОГА]),
2,
1,
1,
""
)
если не ФайлНастроек.Существует()
Файлы.СоздатьКаталог("%{ПутьКНастройкам.Путь}")
Файлы.СоздатьКаталог("%{ПутьКНастройкам}")
исп ПотокЗаписи = ФайлНастроек.ОткрытьПотокЗаписи()
СериализацияJson.ЗаписатьОбъект(ПотокЗаписи, ПользовательскиеНастройки)
ПотокЗаписи.Закрыть()
@@ -106,6 +117,26 @@
исп ПотокЧтения = ФайлНастроек.ОткрытьПотокЧтения()
ПользовательскиеНастройки = СериализацияJson.ПрочитатьОбъект(ПотокЧтения, Тип<ПользовательскиеНастройки>)
ПотокЧтения.Закрыть()
пер TEMP = oc_main.ИсправитьРазделителиПути(ПользовательскиеНастройки.TEMP)
если TEMP.Пусто()
TEMP = oc_main.ДобавитьЧастьПути(ИМЯ_КАТАЛОГА_СБОРКИ, [ИМЯ_ВРЕМЕННОГО_КАТАЛОГА])
;
пер PATH_1C = oc_main.ИсправитьРазделителиПути(ПользовательскиеНастройки.PATH_1C)
ПользовательскиеНастройки = новый ПользовательскиеНастройки(
ПользовательскиеНастройки.HASH,
ПользовательскиеНастройки.CHECK,
ПользовательскиеНастройки.IB_CONNECTION_STRING,
ПользовательскиеНастройки.IB_PLATFORM_VERSION,
ПользовательскиеНастройки.IB_LOGIN,
ПользовательскиеНастройки.IB_PASSWD,
TEMP,
ПользовательскиеНастройки.CFE_BUILD_MODE,
ПользовательскиеНастройки.EXEC_MODE,
ПользовательскиеНастройки.CFE_EXEC_MODE,
PATH_1C
)
;
если ВвестиЛогинПароль и не ПользовательскиеНастройки.IB_CONNECTION_STRING.Пусто() и ПользовательскиеНастройки.IB_LOGIN.Пусто()
@@ -120,10 +151,9 @@
;
@Глобально
статический метод Записать(ПараметрыПроекта: ПараметрыПроекта)
статический метод Записать(ПутьКНастройкам: Строка, ПараметрыПроекта: ПараметрыПроекта)
знч Настройки = Настройки.Прочитать()
знч СР = Файлы.СимволРазделителя
знч Настройки = Настройки.Прочитать(ПутьКНастройкам)
знч Хеши = новый Соответствие<Строка, Строка>()
Хеши.Вставить(ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ, ПараметрыПроекта.ПутьКФайламКонфигурации.Хеш)
@@ -132,7 +162,9 @@
Хеши.Вставить(Расширение.Ключ, Расширение.Значение.Хеш)
;
знч ПредыдущиеПользовательскиеНастройки = ПользовательскиеНастройки.Прочитать(ПараметрыПроекта.ПутьКСборкеПроекта, Ложь)
знч ПредыдущиеПользовательскиеНастройки = ПользовательскиеНастройки.Прочитать(
oc_main.ДобавитьЧастьПути(ПутьКНастройкам, [ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть]),
Ложь)
знч ПользовательскиеНастройки = новый ПользовательскиеНастройки(
Хеши,
@@ -148,7 +180,11 @@
ПредыдущиеПользовательскиеНастройки.PATH_1C
)
исп ПотокЗаписи = новый Файл("%{ПараметрыПроекта.ПутьКСборкеПроекта.Путь}%{СР}%ИМЯ_ФАЙЛА_ПОЛЬЗ_НАСТРОЕК").ОткрытьПотокЗаписи()
исп ПотокЗаписи = новый Файл(
oc_main.ДобавитьЧастьПути(
ПутьКНастройкам,
[ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть, ИМЯ_ФАЙЛА_ПОЛЬЗ_НАСТРОЕК]
)).ОткрытьПотокЗаписи()
СериализацияJson.ЗаписатьОбъект(ПотокЗаписи, ПользовательскиеНастройки)
ПотокЗаписи.Закрыть()
@@ -205,19 +241,14 @@
знч Проверки: Массив<Строка>
@Глобально
статический метод Инициализировать(ВвестиЛогинПароль = Ложь) : ПараметрыПроекта
статический метод Инициализировать(ПутьКНастройкам: Строка, ВвестиЛогинПароль = Ложь) : ПараметрыПроекта
знч СР = Файлы.СимволРазделителя
знч Настройки = Настройки.Прочитать()
знч Настройки = Настройки.Прочитать(ПутьКНастройкам)
знч РабочийКаталог = Скрипт.ПолучитьРабочийКаталог()
пер Провекри = Настройки.CHECK
пер Проверки = Настройки.CHECK
пер ПутьКСкриптуИсполненияСтрокой = Скрипт.ПутьНачальногоСкрипта.Заменить(РабочийКаталог, "")
если ПутьКСкриптуИсполненияСтрокой.НачинаетсяС(СР)
ПутьКСкриптуИсполненияСтрокой = ПутьКСкриптуИсполненияСтрокой.Подстрока(1)
;
пер ПутьКСкриптуИсполненияСтрокой = oc_main.УдалитьЧастьПути(Скрипт.ПутьНачальногоСкрипта, [РабочийКаталог])
знч ПутьКСкриптуИсполнения = новый ПутьКФайламПроекта(
"",
@@ -225,101 +256,73 @@
ПутьКСкриптуИсполненияСтрокой,
Ложь,
"")
пер ПутьКСборкеПроектаСтрокой = (РабочийКаталог + СР + Настройки.BIN_DIR + СР)
.Заменить("\\", СР)
.Заменить("/", СР)
знч ПутьКСборкеПроекта = новый ПутьКФайламПроекта(
"",
ПутьКСборкеПроектаСтрокой,
Настройки.BIN_DIR + СР,
oc_main.ДобавитьЧастьПути(РабочийКаталог, [Настройки.BIN_DIR]),
Настройки.BIN_DIR,
Ложь,
"")
знч ПользовательскиеНастройки = ПользовательскиеНастройки.Прочитать(ПутьКСборкеПроекта, ВвестиЛогинПароль)
знч ПользовательскиеНастройки =
ПользовательскиеНастройки.Прочитать(
oc_main.ДобавитьЧастьПути(ПутьКНастройкам, [ПутьКСборкеПроекта.ОтносительныйПуть]),
ВвестиЛогинПароль)
если ПользовательскиеНастройки.CHECK.Размер() > 0
Провекри = ПользовательскиеНастройки.CHECK
Проверки = ПользовательскиеНастройки.CHECK
;
пер ПутьКФайламКонфигурацииСтрокой = ""
если не Настройки.SRC_CF.Пусто()
ПутьКФайламКонфигурацииСтрокой = (РабочийКаталог + СР + Настройки.SRC_CF + СР)
.Заменить("\\", СР)
.Заменить("/", СР)
;
знч ПутьКФайламКонфигурации = новый ПутьКФайламПроекта(
"",
ПутьКФайламКонфигурацииСтрокой,
Настройки.SRC_CF + СР,
oc_main.ДобавитьЧастьПути(РабочийКаталог, [Настройки.SRC_CF]),
Настройки.SRC_CF,
Ложь,
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ, ""))
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ, "")
)
пер ПутьКФайламКонфигурацииПоставщикаСтрокой = ""
если не Настройки.SRC_CF.Пусто()
ПутьКФайламКонфигурацииПоставщикаСтрокой = (РабочийКаталог + СР + Настройки.BIN_DIR + СР + "prod" + СР)
.Заменить("\\", СР)
.Заменить("/", СР)
;
знч ПутьКФайламКонфигурацииПоставщика = новый ПутьКФайламПроекта(
"",
ПутьКФайламКонфигурацииПоставщикаСтрокой,
Настройки.BIN_DIR + СР + "prod" + СР,
oc_main.ДобавитьЧастьПути(РабочийКаталог, [Настройки.BIN_DIR, "prod"]),
oc_main.ДобавитьЧастьПути(Настройки.BIN_DIR, ["prod"]),
Ложь,
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ_ПОСТАВЩИКА, ""))
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ_ПОСТАВЩИКА, "")
)
знч ПутиКФайламРасширений = новый Соответствие<Строка, ПутьКФайламПроекта>()
если не Настройки.SRC_CFE.Пусто()
пер ПутьКФайламРасширенийСтрокой = (РабочийКаталог + СР + Настройки.SRC_CFE)
.Заменить("\\", СР)
.Заменить("/", СР)
для ИмяРасширения из Настройки.EXT_NAMES
если ИмяРасширения == ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ
или ИмяРасширения == ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ_ПОСТАВЩИКА
или ИмяРасширения == ИМЯ_КАТАЛОГА_ПАТЧА
продолжить
;
знч ПутьКФайламПроекта = новый ПутьКФайламПроекта(
ИмяРасширения,
ПутьКФайламРасширенийСтрокой + СР + ИмяРасширения + СР,
Настройки.SRC_CFE + СР + ИмяРасширения + СР,
Истина,
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИмяРасширения, "")
)
ПутиКФайламРасширений.Вставить(ИмяРасширения, ПутьКФайламПроекта)
для ИмяРасширения из Настройки.EXT_NAMES
если ИмяРасширения == ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ
или ИмяРасширения == ИМЯ_КАТАЛОГА_КОНФИГУРАЦИИ_ПОСТАВЩИКА
или ИмяРасширения == ИМЯ_КАТАЛОГА_ПАТЧА
продолжить
;
знч ПутьКФайламПроекта = новый ПутьКФайламПроекта(
ИмяРасширения,
oc_main.ДобавитьЧастьПути(РабочийКаталог, [Настройки.SRC_CFE, ИмяРасширения]),
oc_main.ДобавитьЧастьПути(Настройки.SRC_CFE, [ИмяРасширения]),
Истина,
ПользовательскиеНастройки.HASH.ПолучитьИлиУмолчание(ИмяРасширения, "")
)
ПутиКФайламРасширений.Вставить(ИмяРасширения, ПутьКФайламПроекта)
;
пер ПутьКВременнымФайламСтрокой = ""
пер ОтносительныйПутьКВременнымФайламСтрокой = ПользовательскиеНастройки.TEMP
если ОтносительныйПутьКВременнымФайламСтрокой.Пусто()
ОтносительныйПутьКВременнымФайламСтрокой = "%{ИМЯ_КАТАЛОГА_СБОРКИ}%{СР}%{ИМЯ_ВРЕМЕННОГО_КАТАЛОГА}"
;
если ОтносительныйПутьКВременнымФайламСтрокой.Содержит(":")
ПутьКВременнымФайламСтрокой = (ОтносительныйПутьКВременнымФайламСтрокой + СР)
.Заменить("\\", СР)
.Заменить("/", СР)
иначе
ПутьКВременнымФайламСтрокой = (РабочийКаталог + СР + ОтносительныйПутьКВременнымФайламСтрокой + СР)
.Заменить("\\", СР)
.Заменить("/", СР)
пер ПутьКВременнымФайламСтрокой = ПользовательскиеНастройки.TEMP
если не oc_main.ЭтоАбсолютныйПуть(ПутьКВременнымФайламСтрокой)
ПутьКВременнымФайламСтрокой = oc_main.ДобавитьЧастьПути(РабочийКаталог, [ПутьКВременнымФайламСтрокой])
;
знч ПутьКВременнымФайлам = новый ПутьКФайламПроекта(
"",
ПутьКВременнымФайламСтрокой,
ОтносительныйПутьКВременнымФайламСтрокой,
ПользовательскиеНастройки.TEMP,
Ложь,
"")
Консоль.Записать("ИсполняемыйФайлПлатформы: %{Настройки.PLATFORM_VERSION}")
знч ПутьКФайламПлатформы = oc_main.ПутьКФайламПлатформы(Настройки.PLATFORM_VERSION, ПользовательскиеНастройки.PATH_1C) + СР
знч ПутьКФайламПлатформы = oc_main.ПутьКФайламПлатформы(Настройки.PLATFORM_VERSION, ПользовательскиеНастройки.PATH_1C)
знч ПутьКФайламПлатформыИБ = ПользовательскиеНастройки.IB_PLATFORM_VERSION.Пусто()
? ПутьКФайламПлатформы
: oc_main.ПутьКФайламПлатформы(ПользовательскиеНастройки.IB_PLATFORM_VERSION, ПользовательскиеНастройки.PATH_1C) + СР
: oc_main.ПутьКФайламПлатформы(ПользовательскиеНастройки.IB_PLATFORM_VERSION, ПользовательскиеНастройки.PATH_1C)
знч ПараметрыСоединенияИБ = новый ПараметрыСоединенияИБ(
ПользовательскиеНастройки.IB_CONNECTION_STRING,
@@ -329,7 +332,7 @@
ПользовательскиеНастройки.IB_PASSWD)
знч ПараметрыПроекта = новый ПараметрыПроекта(
РабочийКаталог + СР,
РабочийКаталог,
ПутьКСкриптуИсполнения,
ПутьКСборкеПроекта,
ПутьКФайламКонфигурации,
@@ -342,14 +345,14 @@
oc_main.РежимыИсполнения.Элементы()[ПользовательскиеНастройки.CFE_EXEC_MODE - 1],
ПутьКФайламПлатформы,
ПараметрыСоединенияИБ,
Провекри)
Проверки)
возврат ПараметрыПроекта
;
@Глобально
статический метод Записать(ПараметрыПроекта: ПараметрыПроекта)
статический метод Записать(ПутьКНастройкам: Строка, ПараметрыПроекта: ПараметрыПроекта)
ПользовательскиеНастройки.Записать(ПараметрыПроекта)
ПользовательскиеНастройки.Записать(ПутьКНастройкам, ПараметрыПроекта)
;
;

View File

@@ -52,6 +52,8 @@
;
// ПрограммныйИнтерфейс
@Глобально
метод СоздатьИнформационнуюБазу(СтрокаСоединения: Строка, ИсполняемыйФайлПлатформы: Строка)
@@ -118,7 +120,7 @@
если не ПутьКФайлуЗагрузки.Пусто()
ПараметрыПроцесса.Добавить("-listFile")
ПараметрыПроцесса.Добавить("\"%ПутьКФайлуЗагрузки\"")
// Способ указания фацлов в командной строке
// Способ указания файлов в командной строке
// ПараметрыПроцесса.Добавить("-files")
// знч ФайлыЗагрузки = новый Файл(ПутьКФайлуЗагрузки).ОткрытьПотокЧтения().ПрочитатьКакСтроку()
// знч ФайлыЗагрузкиСтрокой = "\"%{ФайлыЗагрузки.Разделить(Символы.НОВАЯ_СТРОКА).Соединить(",")}\""
@@ -259,12 +261,12 @@
ИмяПользователя = "", Пароль = "", ИмяРасширения = "", Проверки: Множество<Строка>)
знч НастройкаПроверкиМодулей = новый НастройкаПроверкиМодулей()
знч РазрешенныеПровекри = НастройкаПроверкиМодулей.Проверки.Пересечение(Проверки)
знч РазрешенныеПроверки = НастройкаПроверкиМодулей.Проверки.Пересечение(Проверки)
пер ПараметрыПроцесса = новый Массив<Строка>()
ПараметрыПроцесса.Добавить("DESIGNER")
ПараметрыПроцесса.Добавить("/CheckModules")
для Проверка из РазрешенныеПровекри
для Проверка из РазрешенныеПроверки
ПараметрыПроцесса.Добавить("-%{Проверка}")
;
если ИмяРасширения == "AllExtensions"
@@ -298,9 +300,9 @@
знч НастройкаПроверкиКонфигурации = новый НастройкаПроверкиКонфигурации()
знч НастройкаПроверкиМодулей = новый НастройкаПроверкиМодулей()
знч РазрешенныеПровекри = НастройкаПроверкиКонфигурации.Проверки.Пересечение(Проверки)
знч РазрешенныеПроверки = НастройкаПроверкиКонфигурации.Проверки.Пересечение(Проверки)
если РазрешенныеПровекри.Размер() == 0
если РазрешенныеПроверки.Размер() == 0
Консоль.Записать("Не указаны параметры проверки")
возврат
;
@@ -319,7 +321,7 @@
пер ПараметрыПроцесса = новый Массив<Строка>()
ПараметрыПроцесса.Добавить("DESIGNER")
ПараметрыПроцесса.Добавить("/CheckConfig")
для Проверка из РазрешенныеПровекри
для Проверка из РазрешенныеПроверки
ПараметрыПроцесса.Добавить("-%{Проверка}")
;
если ИмяРасширения == "AllExtensions"
@@ -421,6 +423,8 @@
Консоль.Записать("Файл сравнение основной конфигурации и конфигурации БД успешно получен")
;
// СлужебныеПроцедурыИФункции
@Локально
метод ВыполнитьКомандуПлатформыСОжиданием(имяКоманды: Строка, параметры: Массив<Строка>, таймаут: Длительность = 0с)

View File

@@ -2,6 +2,8 @@
конст КОДИРОВКА = "UTF-8"
// ПрограммныйИнтерфейс
@Глобально
метод СоздатьИнформационнуюБазу(ПутьКИнформационнойБазе: Строка, ИсполняемыйФайлПлатформы: Строка)
@@ -198,6 +200,9 @@
Консоль.Записать("Проверка конфигурации завершена")
;
// СлужебныеПроцедурыИФункции
@Локально
метод ВыполнитьКомандуПлатформыСОжиданием(имяКоманды: Строка, параметры: Массив<Строка>, таймаут: Длительность = 0с)
пер параметрыСтрокой = ""

View File

@@ -31,9 +31,9 @@
@Глобально
метод ИсполняемыйФайлПлатформы(ПутьКФайламПлатформы: Строка, ИспользуетсяАвтономныйСервер = Ложь): Строка
знч СР = Файлы.СимволРазделителя
возврат "%{ПутьКФайламПлатформы}%{СР}" + (ИспользуетсяАвтономныйСервер ? "ibcmd" : "1cv8")
возврат ДобавитьЧастьПути(ПутьКФайламПлатформы, [(ИспользуетсяАвтономныйСервер ? "ibcmd" : "1cv8")])
;
@Глобально
@@ -74,6 +74,14 @@
возврат СтрокаСоединения.Заменить("\"File=\"\"", "").Заменить("\"\";\"", "")
;
@Глобально
метод ЭтоАбсолютныйПуть(Путь: Строка): Булево
знч СР = Файлы.СимволРазделителя
возврат Путь.Содержит(":") или Путь.НачинаетсяС(СР) или Путь.НачинаетсяС("~")
;
@Глобально
метод ИспользуемаяОС(): ОперационныеСистемы
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
@@ -89,10 +97,71 @@
;
;
@Глобально
метод ДобавитьЧастьПути(Путь: Строка, Части: Массив<Строка>): Строка
возврат ИзменитьЧастьПути(Путь, Части, "+")
;
@Глобально
метод УдалитьЧастьПути(Путь: Строка, Части: Массив<Строка>): Строка
возврат ИзменитьЧастьПути(Путь, Части, "-")
;
@Глобально
метод ИсправитьРазделителиПути(Путь: Строка): Строка
знч СР = Файлы.СимволРазделителя
возврат Путь.Заменить("/", СР).Заменить("\\", СР)
;
@Локально
метод ИзменитьЧастьПути(Путь: Строка, Части: Массив<Строка>, Режим: Строка): Строка
знч СР = Файлы.СимволРазделителя
пер ФорматПуть = Путь + (Путь.ЗаканчиваетсяНа(СР) или Путь.Пусто() ? "" : СР)
пер УдалитьНачальныйСимвол = Ложь
для Часть из Части
если Часть.Пусто()
продолжить
;
пер ФорматЧасть = Часть
пока Режим == "+" и ФорматЧасть.НачинаетсяС(СР)
ФорматЧасть = ФорматЧасть.ПодстрокаСКонца(ФорматЧасть.Длина() - 1)
;
пока Режим == "-" и ФорматЧасть.ЗаканчиваетсяНа(СР)
ФорматЧасть = ФорматЧасть.ПодстрокаСНачала(ФорматЧасть.Длина() - 1)
;
если Режим == "+"
ФорматПуть = ФорматПуть + ФорматЧасть + (ФорматЧасть.ЗаканчиваетсяНа(СР) ? "" : СР)
иначе если Режим == "-"
знч ЭтоОсновнойПуть = ФорматПуть.НачинаетсяС(ФорматЧасть)
если ЭтоОсновнойПуть
УдалитьНачальныйСимвол = Истина
;
ФорматПуть = ФорматПуть.Заменить((ФорматЧасть.НачинаетсяС(СР) или ЭтоОсновнойПуть ? "" : СР) + ФорматЧасть, "", Истина)
;
;
если ФорматПуть.ЗаканчиваетсяНа(СР)
ФорматПуть = ФорматПуть.ПодстрокаСНачала(ФорматПуть.Длина() - 1)
;
если УдалитьНачальныйСимвол и ФорматПуть.НачинаетсяС(СР)
ФорматПуть = ФорматПуть.ПодстрокаСКонца(ФорматПуть.Длина() - 1)
;
возврат ФорматПуть
;
@Локально
метод ПутьКФайламПлатформыПоМаксимальнойСборке(ВерсияПлатформы: Строка, ПутьКВерсиямПлатформы = ""): Строка
знч СР = Файлы.СимволРазделителя
пер ПутьКФайламПлатформы = ""
знч используемаяОС = ИспользуемаяОС()
@@ -116,7 +185,7 @@
;
если не ПутьКФайламПлатформы.Пусто() и используемаяОС == ОперационныеСистемы.Windows
возврат "%{ПутьКФайламПлатформы}%{СР}bin"
возврат ДобавитьЧастьПути(ПутьКФайламПлатформы, ["bin"])
иначе если не ПутьКФайламПлатформы.Пусто()
возврат ПутьКФайламПлатформы
;
@@ -190,16 +259,15 @@
пер Каталоги: Массив<Файл>
знч используемаяОС = ИспользуемаяОС()
знч СР = Файлы.СимволРазделителя
выбор используемаяОС
когда ОперационныеСистемы.Windows
знч Каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
Каталоги.Добавить(новый Файл("%{Каталог32}%{СР}1Cv8"))
Каталоги.Добавить(новый Файл(ДобавитьЧастьПути(Каталог32, ["1Cv8"])))
знч Каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
Каталоги.Добавить(новый Файл("%{Каталог64}%{СР}1Cv8"))
Каталоги.Добавить(новый Файл(ДобавитьЧастьПути(Каталог64, ["1Cv8"])))
когда ОперационныеСистемы.Linux
Каталоги.Добавить(новый Файл("%{СР}opt%{СР}1cv8%{СР}x86_64"))
Каталоги.Добавить(новый Файл(ДобавитьЧастьПути("/", ["opt", "1cv8", "x86_64"])))
;
возврат Каталоги

176
main.sbsl
View File

@@ -1,44 +1,50 @@
#!/usr/bin/executor
#требуется lib/IProjectProperties.sbsl
#требуется lib/IConfiguration.sbsl
#требуется lib/IProject.sbsl
#требуется lib/oc_main.sbsl
метод Скрипт(Режим: Строка, ПутьДоРепозитория: Строка, Пауза: Число)
метод Скрипт(Режим: Строка, ПутьДоРепозитория: Строка, Пауза: Число, ПутьКНастройкам = "")
пер СтатусВыполнения = Ложь
знч СР = Файлы.СимволРазделителя
если ПутьДоРепозитория.Пусто()
если Пауза > 0
Консоль.СчитатьСтроку("Не задан путь до репозитрия. Нажмите Enter...")
Консоль.СчитатьСтроку("Не задан путь до репозитория. Нажмите Enter...")
;
выбросить новый ИсключениеНедопустимоеСостояние()
;
ПутьДоРепозитория = ПутьДоРепозитория.Заменить("/", СР)
ПутьДоРепозитория = ПутьДоРепозитория.Заменить("\\", СР)
ПутьДоРепозитория = oc_main.ИсправитьРазделителиПути(ПутьДоРепозитория)
ПутьКНастройкам = oc_main.ИсправитьРазделителиПути(ПутьКНастройкам)
знч РабочийКаталог = Скрипт.ПолучитьРабочийКаталог()
Скрипт.УстановитьРабочийКаталог(Скрипт.ПолучитьРабочийКаталог() + СР + ПутьДоРепозитория)
// проверяем абсолютный или относительный путь
если oc_main.ЭтоАбсолютныйПуть(ПутьДоРепозитория)
Скрипт.УстановитьРабочийКаталог(ПутьДоРепозитория)
иначе
Скрипт.УстановитьРабочийКаталог(oc_main.ДобавитьЧастьПути(РабочийКаталог, [ПутьДоРепозитория]))
;
пер ПараметрыПроекта: IProjectProperties.ПараметрыПроекта
попытка
ПараметрыПроекта = IProjectProperties.ПараметрыПроекта.Инициализировать()
ПараметрыПроекта = IProjectProperties.ПараметрыПроекта.Инициализировать(ПутьКНастройкам, Режим.Содержит("_ib_"))
выбор Режим.ВНижнийРегистр()
когда "init"
ИнициализироватьСкриптыВыполнения(ПараметрыПроекта)
ИнициализироватьGitPrecommit(ПараметрыПроекта)
ИнициализироватьСкриптыВыполнения(ПараметрыПроекта, ПутьДоРепозитория, ПутьКНастройкам)
ИнициализироватьGitPrecommit(ПараметрыПроекта, ПутьКНастройкам)
СтатусВыполнения = Истина
когда "check_bin"
СтатусВыполнения = IProject.АнализироватьНастройкиПоддержки(ПараметрыПроекта)
когда "reapair_bin"
когда "repair_bin"
СтатусВыполнения = IProject.АнализироватьНастройкиПоддержки(ПараметрыПроекта, Истина)
когда "check_bin_prod"
СтатусВыполнения = IProject.АнализироватьНастройкиПоддержки(ПараметрыПроекта, Ложь, Истина)
когда "reapair_bin_prod"
когда "repair_bin_prod"
СтатусВыполнения = IProject.АнализироватьНастройкиПоддержки(ПараметрыПроекта, Истина, Истина)
когда "new_bin"
IProject.ПеревестиФайлИзмененныхОбъектовВНовыйФормат(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)
@@ -53,9 +59,9 @@
СтатусВыполнения = IProject.ВыполнитьПроверкуКонфигурации(ПараметрыПроекта)
когда "check_ib_cfe"
СтатусВыполнения = IProject.ВыполнитьПроверкуКонфигурации(ПараметрыПроекта, "AllExtensions")
когда "get_ib_configdump"
когда "get_ib_configdumpinfo"
СтатусВыполнения = IProject.ПолучитьФайлыКонфигурации(ПараметрыПроекта, Ложь, 2)
когда "get_prod_configdump"
когда "get_prod_configdumpinfo"
СтатусВыполнения = IProject.ПолучитьФайлыКонфигурации(ПараметрыПроекта, Истина, 2)
когда "get_ib_status"
СтатусВыполнения = IProject.ПолучитьСтатусКонфигурации(ПараметрыПроекта)
@@ -69,8 +75,7 @@
когда "update_ib_cf_xml"
СтатусВыполнения = IProject.ОбновитьФайлыКонфигурации(ПараметрыПроекта, 2, Истина)
когда "update_ib_cfe"
СтатусВыполнения = IProject.ПодготовитьКонфигурацию(ПараметрыПроекта)
СтатусВыполнения = СтатусВыполнения и IProject.СобратьФайлыКонфигурации(ПараметрыПроекта, Истина)
СтатусВыполнения = IProject.СобратьФайлыКонфигурации(ПараметрыПроекта, Истина)
СтатусВыполнения = СтатусВыполнения и IProject.ОбновитьФайлыКонфигурации(ПараметрыПроекта, 3)
когда "update_ib_cfe_xml"
СтатусВыполнения = IProject.ОбновитьФайлыКонфигурации(ПараметрыПроекта, 4)
@@ -80,8 +85,7 @@
когда "build_cf"
СтатусВыполнения = IProject.СобратьФайлыКонфигурации(ПараметрыПроекта)
когда "build_cfe"
СтатусВыполнения = IProject.ПодготовитьКонфигурацию(ПараметрыПроекта)
СтатусВыполнения = СтатусВыполнения и IProject.СобратьФайлыКонфигурации(ПараметрыПроекта, Истина)
СтатусВыполнения = IProject.СобратьФайлыКонфигурации(ПараметрыПроекта, Истина)
когда "build_patch"
СтатусВыполнения = IProject.СобратьПатчКонфигурации(ПараметрыПроекта) != Неопределено
когда "build_prod"
@@ -104,7 +108,7 @@
;
если не ПараметрыПроекта.РабочийКаталог.Пусто()
IProjectProperties.ПараметрыПроекта.Записать(ПараметрыПроекта)
IProjectProperties.ПараметрыПроекта.Записать(ПутьКНастройкам, ПараметрыПроекта)
;
если СтатусВыполнения
@@ -125,105 +129,103 @@
;
;
метод ИнициализироватьСкриптыВыполнения(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта)
знч СР = Файлы.СимволРазделителя
знч КоличествоУровней = ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть.КоличествоВхождений(СР)
пер ПутьДоРепозитория = ""
для индек = 1 по КоличествоУровней
ПутьДоРепозитория = ПутьДоРепозитория + ".." + СР
;
если ПутьДоРепозитория.Пусто()
ПутьДоРепозитория = "."
;
метод ИнициализироватьСкриптыВыполнения(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ПутьДоРепозитория: Строка, ПутьКНастройкам: Строка)
знч используемаяОС = oc_main.ИспользуемаяОС()
пер Расширение = ""
пер Шебанг = ""
пер Кодировка = ""
выбор используемаяОС
когда oc_main.ОперационныеСистемы.Windows
Расширение = "bat"
ПутьДоРепозитория = ПутьДоРепозитория.Заменить("\\", "\\\\")
Кодировка = "chcp 65001\н"
когда oc_main.ОперационныеСистемы.Linux
Расширение = "sh"
Шебанг = "#!/usr/bin/bash"
Шебанг = "#!/usr/bin/bash"
;
пер ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "check_ib_cf.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} check_ib_cf \"%{ПутьДоРепозитория}\" 1").Закрыть()
знч КомандыЗапуска = [
"check_ib_cf",
"check_ib_cfe",
"build_cf",
"build_prod",
"build_cfe",
"build_patch",
"get_ib_configdumpinfo",
"get_ib_xml",
"get_ib_status",
"update_ib_cf",
"update_ib_cf_xml",
"update_ib_cfe",
"update_ib_cfe_xml",
"update_ib_patch"
]
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "check_ib_cfe.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} check_ib_cfe \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "build_cf.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} build_cf \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "build_prod.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} build_prod \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "build_cfe.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} build_cfe \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "build_patch.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} build_patch \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "get_ib_configdump.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} get_ib_configdump \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "get_ib_xml.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} get_ib_xml \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "get_ib_status.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} get_ib_status \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "update_ib_cf.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} update_ib_cf \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "update_ib_cf_xml.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} update_ib_cf_xml \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "update_ib_cfe.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} update_ib_cfe \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "update_ib_cfe_xml.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} update_ib_cfe_xml \"%{ПутьДоРепозитория}\" 1").Закрыть()
ФайлСкрипта = новый Файл(ПараметрыПроекта.ПутьКСборкеПроекта.ОтносительныйПуть + СР + "update_ib_patch.%{Расширение}")
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь).Записать(Шебанг).Записать("executor ..${СР}%{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть} update_ib_patch \"%{ПутьДоРепозитория}\" 1").Закрыть()
;
метод ИнициализироватьGitPrecommit(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта)
пер ПутьКСкриптуИсполненияПараметр = ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть
если не oc_main.ЭтоАбсолютныйПуть(ПутьКСкриптуИсполненияПараметр)
ПутьКСкриптуИсполненияПараметр = oc_main.ДобавитьЧастьПути(ПутьДоРепозитория, [ПутьКСкриптуИсполненияПараметр])
;
ПутьКСкриптуИсполненияПараметр = "\"" + ПутьКСкриптуИсполненияПараметр + "\""
знч СР = Файлы.СимволРазделителя
знч КаталогHooks = новый Файл(".git${СР}hooks")
знч ПутьДоРепозиторияПараметр = "\"" + ((СР == "\\") ? ПутьДоРепозитория.Заменить(СР, "\\\\") : ПутьДоРепозитория) + "\""
знч ПутьКНастройкамПараметр = ПутьКНастройкам.Пусто()
? ""
: "\"" + ((СР == "\\") ? ПутьКНастройкам.Заменить(СР, "\\\\") : ПутьКНастройкам) + "\""
для Команда из КомандыЗапуска
знч ФайлСкрипта = новый Файл(oc_main.ДобавитьЧастьПути(ПараметрыПроекта.ПутьКСборкеПроекта.Путь, ["%{Команда}.%{Расширение}"]))
ФайлСкрипта.ОткрытьПотокЗаписи(Ложь)
.Записать(Шебанг)
.Записать(Кодировка)
.Записать("executor %{ПутьКСкриптуИсполненияПараметр} %{Команда} %{ПутьДоРепозиторияПараметр} 1 %{ПутьКНастройкамПараметр}").Закрыть()
;
;
метод ИнициализироватьGitPrecommit(ПараметрыПроекта: IProjectProperties.ПараметрыПроекта, ПутьКНастройкам: Строка)
знч КаталогHooks = новый Файл(oc_main.ДобавитьЧастьПути(".git", ["hooks"]))
если не КаталогHooks.Существует()
Консоль.Записать("\н#################################################################")
Консоль.Записать("Не найденены системные файлы git репозитория \".git${СР}hooks\"")
Консоль.Записать("Не найдены системные файлы git репозитория \"${КаталогHooks.Путь}\"")
Консоль.Записать("#################################################################")
возврат
;
пер ОтносительныйПутьСМаской = ""
знч СР = Файлы.СимволРазделителя
знч СРLinux = "/"
знч ПутьКСкриптуИсполненияПараметр = "\"" + ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть.Заменить(СР, СРLinux) + "\""
знч ПутьКНастройкамПараметр = ПутьКНастройкам.Пусто()
? ""
: "\"" + ПутьКНастройкам.Заменить(СР, СРLinux) + "\""
знч РабочийКаталог = Скрипт.ПолучитьРабочийКаталог()
знч ФайлConfigDumpInfo = IConfiguration.ПолучитьФайлConfigDumpInfo(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)
знч ОтносительныйПутьConfigDumpInfo = oc_main.УдалитьЧастьПути(ФайлConfigDumpInfo.Путь, [РабочийКаталог]).Заменить(СР, СРLinux)
знч ФайлParentConfigurations = IConfiguration.ПолучитьФайлParentConfigurations(ПараметрыПроекта.ПутьКФайламКонфигурации.Путь)
знч ОтносительныйПутьParentConfigurations = oc_main.УдалитьЧастьПути(ФайлParentConfigurations.Путь, [РабочийКаталог]).Заменить(СР, СРLinux)
пер ОтносительныйПутьConfigDumpInfoРасширений = ""
для Расширение из ПараметрыПроекта.Расширения
ОтносительныйПутьСМаской = Расширение.Значение.ОтносительныйПуть
ОтносительныйПутьСМаской = ОтносительныйПутьСМаской.Заменить(Расширение.Ключ, "*")
ОтносительныйПутьConfigDumpInfoРасширений = Расширение.Значение.ОтносительныйПуть
ОтносительныйПутьConfigDumpInfoРасширений = oc_main.ДобавитьЧастьПути(
ОтносительныйПутьConfigDumpInfoРасширений.Заменить(Расширение.Ключ, "*"),
[ФайлConfigDumpInfo.Имя]).Заменить(СР, СРLinux)
прервать
;
знч ТекстPrecommit =
"#!/bin/sh
executor %{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть.Заменить(СР, "/")} new_bin \".\" 0
executor %{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть.Заменить(СР, "/")} new_configdumpinfo \".\" 0
git add %{ПараметрыПроекта.ПутьКФайламКонфигурации.ОтносительныйПуть.Заменить(СР, "/")}/Ext/ParentConfigurations.bin %{ПараметрыПроекта.ПутьКФайламКонфигурации.ОтносительныйПуть.Заменить(СР, "/")}/ConfigDumpInfo.xml %{ОтносительныйПутьСМаской.Заменить(СР, "/")}/ConfigDumpInfo.xml
executor %{ПараметрыПроекта.ПутьКСкриптуИсполнения.ОтносительныйПуть.Заменить(СР, "/")} build_cfe \".\" 0"
executor %{ПутьКСкриптуИсполненияПараметр} new_bin \".\" 0 %{ПутьКНастройкамПараметр}
executor %{ПутьКСкриптуИсполненияПараметр} new_configdumpinfo \".\" 0 %{ПутьКНастройкамПараметр}
git add %{ОтносительныйПутьParentConfigurations} %{ОтносительныйПутьConfigDumpInfo} %{ОтносительныйПутьConfigDumpInfoРасширений}
executor %{ПутьКСкриптуИсполненияПараметр} build_cfe \".\" 0 %{ПутьКНастройкамПараметр}"
знч ФайлPrecommit = новый Файл(".git${СР}hooks${СР}pre-commit")
знч ФайлPrecommit = новый Файл(oc_main.ДобавитьЧастьПути(".git", ["hooks", "pre-commit"]))
если ФайлPrecommit.Существует()
Консоль.Записать("\н#################################################################")
Консоль.Записать("Файл \".git${СР}hooks${СР}pre-commit\" существует. Необходимо внести в него следующие строки:")
Консоль.Записать("Файл \"%{ФайлPrecommit.Путь}\" существует. Необходимо внести в него следующие строки:")
Консоль.Записать("\н")
Консоль.Записать(ТекстPrecommit)
Консоль.Записать("\н")