Skip to content

Commit 4b59d59

Browse files
committed
fix #249 : Поиск команды list в локальном oscript_modules.
1 parent df37504 commit 4b59d59

File tree

1 file changed

+105
-39
lines changed

1 file changed

+105
-39
lines changed
Lines changed: 105 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
#Использовать fluent
2+
#Использовать logos
3+
4+
Перем Лог;
25

36
///////////////////////////////////////////////////////////////////////////////////////////////////
47
// Прикладной интерфейс
@@ -8,6 +11,7 @@
811
КомандаПриложения.Опция("q quiet", Ложь, """Тихий"" режим вывода без лишних сообщений.");
912
КомандаПриложения.Опция("r remote", Ложь, "Вывести список пакетов в хабе");
1013
КомандаПриложения.Опция("a all", Ложь, "Вывести список всех пакетов установленных и доступных в хабе");
14+
КомандаПриложения.Опция("p path", Ложь, "Выводить путь к пакетам");
1115

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

@@ -17,6 +21,7 @@
1721
ВыводВсехПакетов = КомандаПриложения.ЗначениеОпции("all");
1822
ВыводПакетовНаХабе = КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов;
1923
ВыводУстановленныхПакетов = НЕ КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов;
24+
ВыводитьПутьКПакетам = КомандаПриложения.ЗначениеОпции("path");
2025

2126
Если ВыводВсехПакетов Тогда
2227

@@ -30,20 +35,20 @@
3035

3136
МенеджерПолучения = Новый МенеджерПолученияПакетов();
3237
ДоступныеПакеты = МенеджерПолучения.ПолучитьДоступныеПакеты();
33-
34-
ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
35-
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов);
38+
39+
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов;
3640
УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();
3741

3842
Если НЕ ТихийРежим Тогда
3943
Сообщить(ТекстСообщения);
4044
КонецЕсли;
4145

4246
Пакеты = Новый ТаблицаЗначений();
43-
Пакеты.Колонки.Добавить("ИмяПакета");
44-
Пакеты.Колонки.Добавить("ИменаСерверов");
45-
Пакеты.Колонки.Добавить("Версия");
46-
Пакеты.Колонки.Добавить("Выводить");
47+
Пакеты.Колонки.Добавить("ИмяПакета", , "Пакет");
48+
Пакеты.Колонки.Добавить("ИменаСерверов", , "Имена серверов");
49+
Пакеты.Колонки.Добавить("Версия", , "Версия");
50+
Пакеты.Колонки.Добавить("Выводить", , "");
51+
Пакеты.Колонки.Добавить("КаталогПакета", , ?(ВыводитьПутьКПакетам, "Каталог пакета", ""));
4752

4853
Для Каждого ДоступныйПакет Из ДоступныеПакеты Цикл
4954

@@ -62,25 +67,27 @@
6267
КонецЦикла;
6368

6469
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
70+
6571
ИмяПакета = УстановленныйПакет.Ключ;
6672
ОписаниеПакета = УстановленныйПакет.Значение.МетаданныеПакета;
6773
Версия = "<НЕТ>";
6874
Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда
6975
Версия = ОписаниеПакета.Свойства().Версия;
7076
КонецЕсли;
7177

72-
ДобавленныйПакет = Пакеты.НайтиСтроки(Новый Структура("ИмяПакета", ИмяПакета));
73-
Если ДобавленныйПакет.Количество() Тогда
74-
ДобавленныйПакет[0].Версия = Версия;
75-
ДобавленныйПакет[0].Выводить = ИСТИНА; // Пакет есть и на хабе и локально, стоит вывести
76-
Продолжить;
78+
ДобавленныйПакет = Пакеты.НайтиСтроки(Новый Структура("ИмяПакета", ИмяПакета));
79+
Если ЗначениеЗаполнено(ДобавленныйПакет) Тогда
80+
ИнфоОПакете = ДобавленныйПакет[0];
81+
ИнфоОПакете.Выводить = Истина; // Пакет есть и на хабе и локально, стоит вывести
82+
Иначе
83+
ИнфоОПакете = Пакеты.Добавить();
84+
ИнфоОПакете.ИмяПакета = ИмяПакета;
85+
ИнфоОПакете.Выводить = ВыводУстановленныхПакетов;
86+
ИнфоОПакете.ИменаСерверов = "Локальный";
7787
КонецЕсли;
78-
79-
ИнфоОПакете = Пакеты.Добавить();
80-
ИнфоОПакете.ИмяПакета = ИмяПакета;
88+
8189
ИнфоОПакете.Версия = Версия;
82-
ИнфоОПакете.ИменаСерверов = "Локальный";
83-
ИнфоОПакете.Выводить = ВыводУстановленныхПакетов;
90+
ИнфоОПакете.КаталогПакета = УстановленныйПакет.Значение.КаталогПакета;
8491

8592
КонецЦикла;
8693

@@ -94,53 +101,112 @@
94101

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

97-
Процедура ВывестиИнформациюОПакетах(Пакеты)
98-
99-
ДлинаИмени = СтрДлина("Пакет");
100-
ДлинаИменСерверов = СтрДлина("Имена серверов");
101-
ДлинаВерсии = СтрДлина("Версия");
104+
Процедура ВывестиИнформациюОПакетах(Знач Пакеты)
105+
106+
Длины = Новый Массив;
107+
Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
108+
Длины.Добавить(СтрДлина(Пакеты.Колонки[НомерКолонки].Заголовок));
109+
КонецЦикла;
102110

103111
Для Каждого ИнфоОПакете Из Пакеты Цикл
104112

105113
Если НЕ ИнфоОПакете.Выводить Тогда
106114
Продолжить;
107115
КонецЕсли;
108116

109-
ДлинаИмени = Макс(СтрДлина(ИнфоОПакете.ИмяПакета), ДлинаИмени);
110-
ДлинаВерсии = Макс(СтрДлина(ИнфоОПакете.Версия), ДлинаВерсии);
111-
ДлинаИменСерверов = Макс(СтрДлина(ИнфоОПакете.ИменаСерверов), ДлинаИменСерверов);
117+
Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
118+
119+
Колонка = Пакеты.Колонки[НомерКолонки];
120+
Если ЗначениеЗаполнено(Колонка.Заголовок) Тогда
121+
Длины[НомерКолонки] = Макс(СтрДлина(ИнфоОПакете[Колонка.Имя]), Длины[НомерКолонки]);
122+
КонецЕсли;
123+
124+
КонецЦикла;
112125

113126
КонецЦикла;
114127

115-
ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов);
128+
ВывестиШапкуИнфо(Пакеты, Длины);
116129
Для Каждого ИнфоОПакете Из Пакеты Цикл
117130

118131
Если НЕ ИнфоОПакете.Выводить Тогда
119132
Продолжить;
120133
КонецЕсли;
121134

122-
ВывестиСтрокуИнфо(ДлинаИмени, ИнфоОПакете.ИмяПакета, ДлинаВерсии, ИнфоОПакете.Версия, ДлинаИменСерверов, ИнфоОПакете.ИменаСерверов);
135+
ВывестиСтрокуИнфо(ИнфоОПакете, Длины);
123136

124137
КонецЦикла;
125-
ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов);
138+
ВывестиШапкуИнфо(Пакеты, Длины);
126139

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

129-
Процедура ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов)
142+
Процедура ВывестиШапкуИнфо(Знач Пакеты, Знач Длины)
143+
144+
ПодстрокаРазделитель = " |";
145+
146+
ОбщаяДлина = 0;
147+
Для Каждого мДлина Из Длины Цикл
148+
149+
Если мДлина <> 0 Тогда
150+
ОбщаяДлина = ОбщаяДлина + мДлина + СтрДлина(ПодстрокаРазделитель);
151+
КонецЕсли;
152+
153+
КонецЦикла;
130154

131-
ПустаяСтрока = " ";
132-
Сообщить(СтрЗаменить(Лев(ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6), " ", "-"));
133-
ВывестиСтрокуИнфо(ДлинаИмени, "Пакет", ДлинаВерсии, "Версия", ДлинаИменСерверов, "Имена серверов");
134-
Сообщить(СтрЗаменить(Лев(ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6), " ", "-"));
155+
ПустаяСтрока = ШаблоннаяСтрока();
156+
СтрокаОтрез = СтрЗаменить(Лев(ПустаяСтрока, ОбщаяДлина), " ", "-");
157+
Сообщить(СтрокаОтрез);
158+
159+
ПодстрокиСообщения = Новый Массив;
160+
Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
161+
162+
Колонка = Пакеты.Колонки[НомерКолонки];
163+
Если ЗначениеЗаполнено(Колонка.Заголовок) Тогда
164+
КоличествоСимволовДобора = Длины[НомерКолонки] - СтрДлина(Колонка.Заголовок);
165+
ПодстрокиСообщения.Добавить(Колонка.Заголовок + Лев(ПустаяСтрока, КоличествоСимволовДобора));
166+
КонецЕсли;
167+
168+
КонецЦикла;
169+
Сообщить(СтрСоединить(ПодстрокиСообщения, ПодстрокаРазделитель));
170+
Сообщить(СтрокаОтрез);
135171

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

138-
Процедура ВывестиСтрокуИнфо(ДлинаИмени, ИмяПакета, ДлинаВерсии, Версия, ДлинаИменСерверов, ИменаСерверов)
174+
Процедура ВывестиСтрокуИнфо(Знач ИнфоОПакете, Знач Длины)
175+
176+
Пакеты = ИнфоОПакете.Владелец();
177+
178+
ПодстрокаРазделитель = " |";
179+
180+
ОбщаяДлина = 0;
181+
Для Каждого мДлина Из Длины Цикл
182+
183+
Если мДлина <> 0 Тогда
184+
ОбщаяДлина = ОбщаяДлина + мДлина + СтрДлина(ПодстрокаРазделитель);
185+
КонецЕсли;
139186

140-
ПустаяСтрока = " ";
141-
Шаблон = "%1" + Лев(ПустаяСтрока, ДлинаИмени - СтрДлина(ИмяПакета))
142-
+ " | %2" + Лев(ПустаяСтрока, ДлинаВерсии - СтрДлина(Версия))
143-
+ " | %3" + Лев(ПустаяСтрока, ДлинаИменСерверов - СтрДлина(ИменаСерверов));
144-
Сообщить(СтрШаблон(Шаблон, ИмяПакета, Версия, ИменаСерверов));
187+
КонецЦикла;
188+
189+
ПустаяСтрока = ШаблоннаяСтрока();
190+
191+
ПодстрокиСообщения = Новый Массив;
192+
Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
145193

194+
Колонка = Пакеты.Колонки[НомерКолонки];
195+
Если ЗначениеЗаполнено(Колонка.Заголовок) Тогда
196+
ВыводимоеЗначение = Строка(ИнфоОПакете[Колонка.Имя]);
197+
КоличествоСимволовДобора = Длины[НомерКолонки] - СтрДлина(ВыводимоеЗначение);
198+
ПодстрокиСообщения.Добавить(ВыводимоеЗначение + Лев(ПустаяСтрока, КоличествоСимволовДобора));
199+
КонецЕсли;
200+
201+
КонецЦикла;
202+
Сообщить(СтрСоединить(ПодстрокиСообщения, ПодстрокаРазделитель));
203+
146204
КонецПроцедуры
205+
206+
Функция ШаблоннаяСтрока()
207+
Возврат " "
208+
+ " "
209+
;
210+
КонецФункции
211+
212+
Лог = Логирование.ПолучитьЛог(КонстантыOpm.ИмяЛога);

0 commit comments

Comments
 (0)