Skip to content

Commit 5ad57e2

Browse files
authored
Merge pull request #250 from dmpas/feature/opm-list-local-249
opm list ищет в локальном каталоге
2 parents df37504 + 861b716 commit 5ad57e2

File tree

1 file changed

+103
-39
lines changed

1 file changed

+103
-39
lines changed

src/cmd/Классы/КомандаOpm_List.os

Lines changed: 103 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
КомандаПриложения.Опция("q quiet", Ложь, """Тихий"" режим вывода без лишних сообщений.");
99
КомандаПриложения.Опция("r remote", Ложь, "Вывести список пакетов в хабе");
1010
КомандаПриложения.Опция("a all", Ложь, "Вывести список всех пакетов установленных и доступных в хабе");
11+
КомандаПриложения.Опция("p path", Ложь, "Выводить путь к пакетам");
12+
КомандаПриложения.Опция("l local", Ложь, "Вывести список пакетов, установленных локально в текущий каталог");
1113

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

@@ -17,6 +19,8 @@
1719
ВыводВсехПакетов = КомандаПриложения.ЗначениеОпции("all");
1820
ВыводПакетовНаХабе = КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов;
1921
ВыводУстановленныхПакетов = НЕ КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов;
22+
ВыводЛокальныхПакетов = КомандаПриложения.ЗначениеОпции("local");
23+
ВыводитьПутьКПакетам = КомандаПриложения.ЗначениеОпции("path");
2024

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

@@ -30,20 +34,23 @@
3034

3135
МенеджерПолучения = Новый МенеджерПолученияПакетов();
3236
ДоступныеПакеты = МенеджерПолучения.ПолучитьДоступныеПакеты();
33-
34-
ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
35-
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов);
37+
38+
КаталогПоиска = ?(ВыводЛокальныхПакетов,
39+
ОбъединитьПути(ТекущийКаталог(), КонстантыOpm.ЛокальныйКаталогУстановкиПакетов),
40+
"");
41+
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(КаталогПоиска);
3642
УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();
3743

3844
Если НЕ ТихийРежим Тогда
3945
Сообщить(ТекстСообщения);
4046
КонецЕсли;
4147

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

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

@@ -62,25 +69,27 @@
6269
КонецЦикла;
6370

6471
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
72+
6573
ИмяПакета = УстановленныйПакет.Ключ;
6674
ОписаниеПакета = УстановленныйПакет.Значение.МетаданныеПакета;
6775
Версия = "<НЕТ>";
6876
Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда
6977
Версия = ОписаниеПакета.Свойства().Версия;
7078
КонецЕсли;
7179

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

8594
КонецЦикла;
8695

@@ -94,53 +103,108 @@
94103

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

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

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

105115
Если НЕ ИнфоОПакете.Выводить Тогда
106116
Продолжить;
107117
КонецЕсли;
108118

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

113128
КонецЦикла;
114129

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

118133
Если НЕ ИнфоОПакете.Выводить Тогда
119134
Продолжить;
120135
КонецЕсли;
121136

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

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

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

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

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

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

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

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

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

0 commit comments

Comments
 (0)