diff --git a/package-loader.os b/package-loader.os index 69283c3..18ed9a0 100644 --- a/package-loader.os +++ b/package-loader.os @@ -9,124 +9,54 @@ |ПриЗагрузкеБиблиотеки " + Путь); Если Осень <> Неопределено Тогда - ПутьДоЗаготовки = ОбъединитьПути(Путь, "src/Заготовки/ИнициализацияСинхронизации.os"); - ПодключитьСценарий(ПутьДоЗаготовки, "ИнициализацияСинхронизации"); + ОбработатьКаталогКлассов(ОбъединитьПути(Путь, "src/Заготовки"), СтандартнаяОбработка, Отказ); + ОбработатьКаталогКлассов(ОбъединитьПути(Путь, "src/Классы"), СтандартнаяОбработка, Отказ); + ОбработатьКаталогМодулей(ОбъединитьПути(Путь, "src/Модули"), СтандартнаяОбработка, Отказ); + Осень.ДобавитьЗаготовкуДляАвтоИнициализации("ИнициализацияСинхронизации"); Иначе - ВызватьИсключение "Некорректный порядок импорта библиотек. Сначала подключите autumn"; - КонецЕсли; - - ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config")); - - Если ФайлМанифеста.Существует() Тогда - Вывести("Обрабатываем по манифесту"); - - СтандартнаяОбработка = Ложь; - ОбработатьМанифест(ФайлМанифеста.ПолноеИмя, Путь, Отказ); - Иначе - Вывести("Обрабатываем структуру каталогов по соглашению"); - ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ); + ВызватьИсключение "Некорректный порядок импорта библиотек. Сначала подключите autumn"; КонецЕсли; КонецПроцедуры -Процедура ОбработатьМанифест(Знач Файл, Знач Путь, Отказ) - - Чтение = Новый ЧтениеXML; - Чтение.ОткрытьФайл(Файл); - Чтение.ПерейтиКСодержимому(); - - Если Чтение.ЛокальноеИмя <> "package-def" Тогда - Отказ = Истина; - Чтение.Закрыть(); - Возврат; - КонецЕсли; - - Пока Чтение.Прочитать() Цикл - - Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда - - Продолжить; +Процедура ОбработатьКаталогМодулей(Знач Путь, СтандартнаяОбработка, Отказ) - КонецЕсли; + КаталогМодулей = Новый Файл(Путь); - Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - Если Чтение.ЛокальноеИмя = "class" Тогда - ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file")); - Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда - Идентификатор = Чтение.ЗначениеАтрибута("name"); - Если Не ПустаяСтрока(Идентификатор) Тогда - Вывести(СтрШаблон(" класс %1, файл %2", Идентификатор, ФайлКласса.ПолноеИмя)); - - // ДобавитьКласс(ФайлКласса.ПолноеИмя, Идентификатор); - ДобавитьКлассЕслиРанееНеДобавляли(ФайлКласса.ПолноеИмя, Идентификатор); - КонецЕсли; - Иначе - ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; - КонецЕсли; - - Чтение.Прочитать(); // в конец элемента - КонецЕсли; - - Если Чтение.ЛокальноеИмя = "module" Тогда - ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file")); - Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда - Идентификатор = Чтение.ЗначениеАтрибута("name"); - Если Не ПустаяСтрока(Идентификатор) Тогда - Вывести(СтрШаблон(" модуль %1, файл %2", Идентификатор, ФайлКласса.ПолноеИмя)); - Попытка - ДобавитьМодульЕслиРанееНеДобавляли(ФайлКласса.ПолноеИмя, Идентификатор); - Исключение - Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда - ВызватьИсключение; - КонецЕсли; - Вывести("Предупреждение: - | " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЕсли; - Иначе - ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; + Если КаталогМодулей.Существует() Тогда + Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os"); + Для Каждого Файл Из Файлы Цикл + Вывести(СтрШаблон(" модуль (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); + СтандартнаяОбработка = Ложь; + Попытка + ДобавитьМодульЕслиРанееНеДобавляли(Файл.ПолноеИмя, Файл.ИмяБезРасширения); + Исключение + Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда + ВызватьИсключение; КонецЕсли; - - Чтение.Прочитать(); // в конец элемента - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Чтение.Закрыть(); + СтандартнаяОбработка = Истина; + Вывести("Предупреждение: + |" + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЦикла; + КонецЕсли; КонецПроцедуры -Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ) +Процедура ДобавитьМодульЕслиРанееНеДобавляли(ПутьФайла, ИмяМодуля) + Вывести("Добавляю модуль, если ранее не добавляли " + ИмяМодуля); - КаталогиКлассов = Новый Массив; - КаталогиКлассов.Добавить(ОбъединитьПути(Путь, "Классы")); - КаталогиКлассов.Добавить(ОбъединитьПути(Путь, "Classes")); - КаталогиКлассов.Добавить(ОбъединитьПути(Путь, "src", "Классы")); - КаталогиКлассов.Добавить(ОбъединитьПути(Путь, "src", "Classes")); - - КаталогиМодулей = Новый Массив; - КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "Модули")); - КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "Modules")); - КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Модули")); - КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Modules")); - - - Для Каждого мКаталог Из КаталогиКлассов Цикл - - ОбработатьКаталогКлассов(мКаталог, СтандартнаяОбработка, Отказ); - - КонецЦикла; - - Для Каждого мКаталог Из КаталогиМодулей Цикл - - ОбработатьКаталогМодулей(мКаталог, СтандартнаяОбработка, Отказ); - - КонецЦикла; + МодульУжеЕсть = КэшМодулей.Найти(ИмяМодуля) <> Неопределено; + Если Не МодульУжеЕсть Тогда + + Вывести("Добавляю модуль, т.к. он не найден - " + ИмяМодуля); + ДобавитьМодуль(ПутьФайла, ИмяМодуля); + КэшМодулей.Добавить(ИмяМодуля); + Иначе + Вывести("Пропускаю загрузку модуля " + ИмяМодуля); + КонецЕсли; КонецПроцедуры Процедура ОбработатьКаталогКлассов(Знач Путь, СтандартнаяОбработка, Отказ) @@ -145,30 +75,6 @@ КонецПроцедуры -Процедура ОбработатьКаталогМодулей(Знач Путь, СтандартнаяОбработка, Отказ) - - КаталогМодулей = Новый Файл(Путь); - - Если КаталогМодулей.Существует() Тогда - Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os"); - Для Каждого Файл Из Файлы Цикл - Вывести(СтрШаблон(" модуль (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); - СтандартнаяОбработка = Ложь; - Попытка - ДобавитьМодульЕслиРанееНеДобавляли(Файл.ПолноеИмя, Файл.ИмяБезРасширения); - Исключение - Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда - ВызватьИсключение; - КонецЕсли; - СтандартнаяОбработка = Истина; - Вывести("Предупреждение: - |" + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - Процедура ДобавитьКлассЕслиРанееНеДобавляли(ПутьФайла, ИмяКласса) Вывести("Добавляю класс, если ранее не добавляли " + ИмяКласса); Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда @@ -179,12 +85,9 @@ КлассУжеЕсть = Ложь; Попытка - Объект = Новый(ИмяКласса); - КлассУжеЕсть = Истина; + КлассУжеЕсть = ТипЗнч(Тип(ИмяКласса)) = Тип("Тип"); Исключение - СообщениеОшибки = ОписаниеОшибки(); - ИскомаяОшибка = СтрШаблон("Конструктор не найден (%1)", ИмяКласса); - КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0; + КлассУжеЕсть = Ложь; КонецПопытки; Если Не КлассУжеЕсть Тогда @@ -197,21 +100,6 @@ КонецЕсли; КонецПроцедуры -Процедура ДобавитьМодульЕслиРанееНеДобавляли(ПутьФайла, ИмяМодуля) - Вывести("Добавляю модуль, если ранее не добавляли " + ИмяМодуля); - - МодульУжеЕсть = КэшМодулей.Найти(ИмяМодуля) <> Неопределено; - Если Не МодульУжеЕсть Тогда - - Вывести("Добавляю модуль, т.к. он не найден - " + ИмяМодуля); - ДобавитьМодуль(ПутьФайла, ИмяМодуля); - КэшМодулей.Добавить(ИмяМодуля); - Иначе - Вывести("Пропускаю загрузку модуля " + ИмяМодуля); - - КонецЕсли; -КонецПроцедуры - Процедура Вывести(Знач Сообщение) Если ПоказатьСообщенияЗагрузки Тогда Сообщить(Сообщение); diff --git a/packagedef b/packagedef index c8850a9..d18b176 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("autumn-synchronized") - .Версия("0.1.1") + .Версия("0.1.2") .Автор("Кирилл Черненко") .АдресАвтора("https://github.com/sfaqer") .Описание("Модуль ОСени для синхронизации исполнения методов")