﻿#Использовать fs
#Использовать asserts

Перем ВерсияПакета;

////////////////////////////////////////////////////////////
// Описание пакета для сборки и установки
// Полную документацию см. на hub.oscript.io/packaging
//

///////////////////////////////////////////////////////////////////
// Процедуры установки пакета с клиентской машины
///////////////////////////////////////////////////////////////////

// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину.
//
// Параметры:
//   КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет.
//   ЧтениеZipФайла - ЧтениеZipФайла. Архив пакета.
//
Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт
	Сообщить("Перед установкой удаляю все epf-файлы из каталога пакета " + КаталогУстановкиПакета);
	МассивФайлов = НайтиФайлы(КаталогУстановкиПакета, "*.epf", Истина);
	Для каждого Файл Из МассивФайлов Цикл
		УдалитьФайлы(Файл.ПолноеИмя);
	КонецЦикла;

КонецПроцедуры

// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину.
//
// Параметры:
//   КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет.
//
Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт

КонецПроцедуры


///////////////////////////////////////////////////////////////////
// Процедуры сборки пакета
///////////////////////////////////////////////////////////////////


// Вызывается пакетным менеджером перед началом сборки пакета.
//
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
//
Процедура ПередСборкой(Знач РабочийКаталог) Экспорт
КонецПроцедуры


// Вызывается пакетным менеджером после помещения файлов в пакет.
//
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
//   АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы).
//
Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт

	Исходники = ЗагрузитьСценарий("tasks/Модули/Исходники.os");

	СлужебныйКаталог = ".forbuild";
	КлючМассиваПутей = "opm_build";
	КлючМассиваИсключаемыхПутей = "opm_build_exclude";

	//ФС.ОбеспечитьПустойКаталог(СлужебныйКаталог);
	СтрокаЗапуска = Исходники.СтрокаЗапускаКомандыСборки(Ложь, СлужебныйКаталог);
	СтрокаЗапуска = СтрШаблон("%1 --key %2", СтрокаЗапуска, КлючМассиваПутей);
	СтрокаЗапуска = СтрШаблон("%1 --cachekey %2", СтрокаЗапуска, КлючМассиваПутей);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	КаталогСборки = СтрШаблон("./%1/", СлужебныйКаталог);
	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./lib/TemplateEpf %1lib/TemplateEpf --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./lib/TemplateEpfUF %1lib/TemplateEpfUF --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./locales %1locales --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	Настройки = Исходники.ПолучитьИзJSONФайла(Исходники.ПутьФайлаНастроек());
	Ожидаем.Что(Настройки, "Не загружены настройки из файла настроек").Заполнено();

	МассивПутей = Настройки[КлючМассиваПутей];
	Ожидаем.Что(МассивПутей, "Не найдена настройка " + КлючМассиваПутей).Заполнено();

	ТекущийКаталогСохр = ТекущийКаталог();
	УстановитьТекущийКаталог(СлужебныйКаталог);

	МассивИсключаемыхПутей = Настройки[КлючМассиваИсключаемыхПутей];
	Ожидаем.Что(МассивИсключаемыхПутей, "Не найдена настройка " + КлючМассиваИсключаемыхПутей).Заполнено();

	Попытка
		Для каждого Путь Из МассивИсключаемыхПутей Цикл
			ФайлПути = Новый Файл(Путь);
			Если ФайлПути.Существует() Тогда
				Если ФайлПути.ЭтоКаталог() Тогда
					УдалитьФайлы(Путь, "*.*");
				Иначе
					УдалитьФайлы(Путь);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;

		Для каждого Путь Из МассивПутей Цикл
			АрхивПакета.Добавить(Путь,
				РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
				РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
		КонецЦикла;

		МассивОбработок = НайтиФайлы(".", "*.epf");
		Для каждого Файл Из МассивОбработок Цикл
			Путь = Файл.Имя;

			АрхивПакета.Добавить(Путь,
				РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
				РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
		КонецЦикла;

	Исключение
		УстановитьТекущийКаталог(ТекущийКаталогСохр);
		ВызватьИсключение;
	КонецПопытки;
	УстановитьТекущийКаталог(ТекущийКаталогСохр);

КонецПроцедуры


// Вызывается пакетным менеджером после сборки пакета.
//
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
//   ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета.
//
Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт

	Файл = Новый Файл(ОбъединитьПути(РабочийКаталог, "content.zip"));
	Если Файл.Существует() Тогда
		УдалитьФайлы(Файл.ПолноеИмя);
	КонецЕсли;

	ФайлКонечный = Новый Файл(ОбъединитьПути(РабочийКаталог, СтрШаблон("add-%1.zip", ВерсияПакета)));
	Если ФайлКонечный.Существует() Тогда
		УдалитьФайлы(ФайлКонечный.ПолноеИмя);
	КонецЕсли;

	АрхивПакета = Новый ЧтениеZipФайла(ПутьКФайлуПакета);
	Элемент = АрхивПакета.Элементы.Найти(Файл.Имя);
	Ожидаем.Что(Элемент, "Не сформирован файл " + ФайлКонечный.ПолноеИмя)
		.ЭтоНе().Равно(Неопределено);
	АрхивПакета.Извлечь(Элемент, РабочийКаталог);

	ПереместитьФайл(Файл.ПолноеИмя, ФайлКонечный.ПолноеИмя);

	Ожидаем.Что(ФайлКонечный.Существует(), "Не сформирован файл " + ФайлКонечный.ПолноеИмя)
		.ЭтоИстина();

	Сообщить("ИНФОРМАЦИЯ - Создан файл релиза " + ФайлКонечный.ПолноеИмя);
КонецПроцедуры

ВерсияПакета = "6.4.0";

Описание.Имя("add")
	.Версия(ВерсияПакета)
	.Автор("SilverBulleters, LLC")
	.Описание("Сборка add")
	.ВерсияСреды("1.0.20")
	// автоматически собираются все файлы из файла "ospx/settings.json" + корневые обработки
	.ВключитьФайл("doc")
	.ВключитьФайл("lib/TemplateEpfUF")
	.ВключитьФайл("lib/TemplateEpf")
	.ВключитьФайл("license")
	.ВключитьФайл("licenses")
	.ВключитьФайл("locales")
	.ВключитьФайл("tasks")
	.ВключитьФайл("ospx")
	.ВключитьФайл("packagedef")
	.ВключитьФайл("readme.md")
	.ВключитьФайл("f.a.q.md")
	.ВключитьФайл("MakeAutoVideo.md")
	.ВключитьФайл("notice")
	.ВключитьФайл("history")
	.ВключитьФайл("tools/json")
	.ВключитьФайл("tools/VideoTools")
	.ВключитьФайл("tools/onescript")
	.ЗависитОт("asserts")
	.ЗависитОт("1commands", "1.3.0")
	.ЗависитОт("logos", "0.6.2")
	.ЗависитОт("cmdline", "0.6.2")
	.ЗависитОт("tempfiles", "0.2.1")
	.ЗависитОт("v8runner", "0.11.2")
	.ЗависитОт("v8unpack", "1.0.1")
	.ЗависитОт("fs", "1.0.0")
	.ЗависитОт("opm", "0.15.0")
	.ОпределяетМодуль("add", "ospx/addospx.os")
	;
