1
1
#Использовать fluent
2
+ #Использовать logos
3
+
4
+ Перем Лог ;
2
5
3
6
///////////////////////////////////////////////////////////////////////////////////////////////////
4
7
// Прикладной интерфейс
8
11
КомандаПриложения.Опция("q quiet" , Ложь , """ Тихий"" режим вывода без лишних сообщений." );
9
12
КомандаПриложения.Опция("r remote" , Ложь , "Вывести список пакетов в хабе" );
10
13
КомандаПриложения.Опция("a all" , Ложь , "Вывести список всех пакетов установленных и доступных в хабе" );
14
+ КомандаПриложения.Опция("p path" , Ложь , "Выводить путь к пакетам" );
11
15
12
16
КонецПроцедуры
13
17
17
21
ВыводВсехПакетов = КомандаПриложения.ЗначениеОпции("all" );
18
22
ВыводПакетовНаХабе = КомандаПриложения.ЗначениеОпции("remote" ) ИЛИ ВыводВсехПакетов;
19
23
ВыводУстановленныхПакетов = НЕ КомандаПриложения.ЗначениеОпции("remote" ) ИЛИ ВыводВсехПакетов;
24
+ ВыводитьПутьКПакетам = КомандаПриложения.ЗначениеОпции("path" );
20
25
21
26
Если ВыводВсехПакетов Тогда
22
27
30
35
31
36
МенеджерПолучения = Новый МенеджерПолученияПакетов();
32
37
ДоступныеПакеты = МенеджерПолучения.ПолучитьДоступныеПакеты();
33
-
34
- ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system" );
35
- КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов);
38
+
39
+ КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов;
36
40
УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();
37
41
38
42
Если НЕ ТихийРежим Тогда
39
43
Сообщить (ТекстСообщения);
40
44
КонецЕсли ;
41
45
42
46
Пакеты = Новый ТаблицаЗначений();
43
- Пакеты.Колонки.Добавить("ИмяПакета" );
44
- Пакеты.Колонки.Добавить("ИменаСерверов" );
45
- Пакеты.Колонки.Добавить("Версия" );
46
- Пакеты.Колонки.Добавить("Выводить" );
47
+ Пакеты.Колонки.Добавить("ИмяПакета" , , "Пакет" );
48
+ Пакеты.Колонки.Добавить("ИменаСерверов" , , "Имена серверов" );
49
+ Пакеты.Колонки.Добавить("Версия" , , "Версия" );
50
+ Пакеты.Колонки.Добавить("Выводить" , , "" );
51
+ Пакеты.Колонки.Добавить("КаталогПакета" , , ? (ВыводитьПутьКПакетам, "Каталог пакета" , "" ));
47
52
48
53
Для Каждого ДоступныйПакет Из ДоступныеПакеты Цикл
49
54
62
67
КонецЦикла ;
63
68
64
69
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
70
+
65
71
ИмяПакета = УстановленныйПакет.Ключ;
66
72
ОписаниеПакета = УстановленныйПакет.Значение.МетаданныеПакета;
67
73
Версия = "<НЕТ>" ;
68
74
Если ТипЗнч (ОписаниеПакета) <> Тип ("Булево" ) Тогда
69
75
Версия = ОписаниеПакета.Свойства().Версия;
70
76
КонецЕсли ;
71
77
72
- ДобавленныйПакет = Пакеты.НайтиСтроки(Новый Структура("ИмяПакета" , ИмяПакета));
73
- Если ДобавленныйПакет.Количество() Тогда
74
- ДобавленныйПакет[0 ].Версия = Версия;
75
- ДобавленныйПакет[0 ].Выводить = ИСТИНА ; // Пакет есть и на хабе и локально, стоит вывести
76
- Продолжить ;
78
+ ДобавленныйПакет = Пакеты.НайтиСтроки(Новый Структура("ИмяПакета" , ИмяПакета));
79
+ Если ЗначениеЗаполнено (ДобавленныйПакет) Тогда
80
+ ИнфоОПакете = ДобавленныйПакет[0 ];
81
+ ИнфоОПакете.Выводить = Истина ; // Пакет есть и на хабе и локально, стоит вывести
82
+ Иначе
83
+ ИнфоОПакете = Пакеты.Добавить();
84
+ ИнфоОПакете.ИмяПакета = ИмяПакета;
85
+ ИнфоОПакете.Выводить = ВыводУстановленныхПакетов;
86
+ ИнфоОПакете.ИменаСерверов = "Локальный" ;
77
87
КонецЕсли ;
78
-
79
- ИнфоОПакете = Пакеты.Добавить();
80
- ИнфоОПакете.ИмяПакета = ИмяПакета;
88
+
81
89
ИнфоОПакете.Версия = Версия;
82
- ИнфоОПакете.ИменаСерверов = "Локальный" ;
83
- ИнфоОПакете.Выводить = ВыводУстановленныхПакетов;
90
+ ИнфоОПакете.КаталогПакета = УстановленныйПакет.Значение.КаталогПакета;
84
91
85
92
КонецЦикла ;
86
93
94
101
95
102
КонецПроцедуры
96
103
97
- Процедура ВывестиИнформациюОПакетах (Пакеты )
98
-
99
- ДлинаИмени = СтрДлина ("Пакет" );
100
- ДлинаИменСерверов = СтрДлина ("Имена серверов" );
101
- ДлинаВерсии = СтрДлина ("Версия" );
104
+ Процедура ВывестиИнформациюОПакетах (Знач Пакеты )
105
+
106
+ Длины = Новый Массив;
107
+ Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
108
+ Длины.Добавить(СтрДлина (Пакеты.Колонки[НомерКолонки].Заголовок));
109
+ КонецЦикла ;
102
110
103
111
Для Каждого ИнфоОПакете Из Пакеты Цикл
104
112
105
113
Если НЕ ИнфоОПакете.Выводить Тогда
106
114
Продолжить ;
107
115
КонецЕсли ;
108
116
109
- ДлинаИмени = Макс (СтрДлина (ИнфоОПакете.ИмяПакета), ДлинаИмени);
110
- ДлинаВерсии = Макс (СтрДлина (ИнфоОПакете.Версия), ДлинаВерсии);
111
- ДлинаИменСерверов = Макс (СтрДлина (ИнфоОПакете.ИменаСерверов), ДлинаИменСерверов);
117
+ Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
118
+
119
+ Колонка = Пакеты.Колонки[НомерКолонки];
120
+ Если ЗначениеЗаполнено (Колонка.Заголовок) Тогда
121
+ Длины[НомерКолонки] = Макс (СтрДлина (ИнфоОПакете[Колонка.Имя]), Длины[НомерКолонки]);
122
+ КонецЕсли ;
123
+
124
+ КонецЦикла ;
112
125
113
126
КонецЦикла ;
114
127
115
- ВывестиШапкуИнфо(ДлинаИмени , ДлинаВерсии , ДлинаИменСерверов );
128
+ ВывестиШапкуИнфо(Пакеты , Длины );
116
129
Для Каждого ИнфоОПакете Из Пакеты Цикл
117
130
118
131
Если НЕ ИнфоОПакете.Выводить Тогда
119
132
Продолжить ;
120
133
КонецЕсли ;
121
134
122
- ВывестиСтрокуИнфо(ДлинаИмени , ИнфоОПакете.ИмяПакета , ДлинаВерсии , ИнфоОПакете.Версия , ДлинаИменСерверов , ИнфоОПакете.ИменаСерверов );
135
+ ВывестиСтрокуИнфо(ИнфоОПакете, Длины );
123
136
124
137
КонецЦикла ;
125
- ВывестиШапкуИнфо(ДлинаИмени , ДлинаВерсии , ДлинаИменСерверов );
138
+ ВывестиШапкуИнфо(Пакеты , Длины );
126
139
127
140
КонецПроцедуры
128
141
129
- Процедура ВывестиШапкуИнфо (ДлинаИмени , ДлинаВерсии , ДлинаИменСерверов )
142
+ Процедура ВывестиШапкуИнфо (Знач Пакеты , Знач Длины )
143
+
144
+ ПодстрокаРазделитель = " |" ;
145
+
146
+ ОбщаяДлина = 0 ;
147
+ Для Каждого мДлина Из Длины Цикл
148
+
149
+ Если мДлина <> 0 Тогда
150
+ ОбщаяДлина = ОбщаяДлина + мДлина + СтрДлина (ПодстрокаРазделитель);
151
+ КонецЕсли ;
152
+
153
+ КонецЦикла ;
130
154
131
- ПустаяСтрока = " " ;
132
- Сообщить (СтрЗаменить (Лев (ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6 ), " " , "-" ));
133
- ВывестиСтрокуИнфо(ДлинаИмени, "Пакет" , ДлинаВерсии, "Версия" , ДлинаИменСерверов, "Имена серверов" );
134
- Сообщить (СтрЗаменить (Лев (ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6 ), " " , "-" ));
155
+ ПустаяСтрока = ШаблоннаяСтрока();
156
+ СтрокаОтрез = СтрЗаменить (Лев (ПустаяСтрока, ОбщаяДлина), " " , "-" );
157
+ Сообщить (СтрокаОтрез);
158
+
159
+ ПодстрокиСообщения = Новый Массив;
160
+ Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
161
+
162
+ Колонка = Пакеты.Колонки[НомерКолонки];
163
+ Если ЗначениеЗаполнено (Колонка.Заголовок) Тогда
164
+ КоличествоСимволовДобора = Длины[НомерКолонки] - СтрДлина (Колонка.Заголовок);
165
+ ПодстрокиСообщения.Добавить(Колонка.Заголовок + Лев (ПустаяСтрока, КоличествоСимволовДобора));
166
+ КонецЕсли ;
167
+
168
+ КонецЦикла ;
169
+ Сообщить (СтрСоединить (ПодстрокиСообщения, ПодстрокаРазделитель));
170
+ Сообщить (СтрокаОтрез);
135
171
136
172
КонецПроцедуры
137
173
138
- Процедура ВывестиСтрокуИнфо (ДлинаИмени , ИмяПакета , ДлинаВерсии , Версия , ДлинаИменСерверов , ИменаСерверов )
174
+ Процедура ВывестиСтрокуИнфо (Знач ИнфоОПакете , Знач Длины )
175
+
176
+ Пакеты = ИнфоОПакете.Владелец();
177
+
178
+ ПодстрокаРазделитель = " |" ;
179
+
180
+ ОбщаяДлина = 0 ;
181
+ Для Каждого мДлина Из Длины Цикл
182
+
183
+ Если мДлина <> 0 Тогда
184
+ ОбщаяДлина = ОбщаяДлина + мДлина + СтрДлина (ПодстрокаРазделитель);
185
+ КонецЕсли ;
139
186
140
- ПустаяСтрока = " " ;
141
- Шаблон = "%1" + Лев (ПустаяСтрока, ДлинаИмени - СтрДлина (ИмяПакета))
142
- + " | %2" + Лев (ПустаяСтрока, ДлинаВерсии - СтрДлина (Версия))
143
- + " | %3" + Лев (ПустаяСтрока, ДлинаИменСерверов - СтрДлина (ИменаСерверов));
144
- Сообщить (СтрШаблон (Шаблон, ИмяПакета, Версия, ИменаСерверов));
187
+ КонецЦикла ;
188
+
189
+ ПустаяСтрока = ШаблоннаяСтрока();
190
+
191
+ ПодстрокиСообщения = Новый Массив;
192
+ Для НомерКолонки = 0 По Пакеты.Колонки.Количество() - 1 Цикл
145
193
194
+ Колонка = Пакеты.Колонки[НомерКолонки];
195
+ Если ЗначениеЗаполнено (Колонка.Заголовок) Тогда
196
+ ВыводимоеЗначение = Строка (ИнфоОПакете[Колонка.Имя]);
197
+ КоличествоСимволовДобора = Длины[НомерКолонки] - СтрДлина (ВыводимоеЗначение);
198
+ ПодстрокиСообщения.Добавить(ВыводимоеЗначение + Лев (ПустаяСтрока, КоличествоСимволовДобора));
199
+ КонецЕсли ;
200
+
201
+ КонецЦикла ;
202
+ Сообщить (СтрСоединить (ПодстрокиСообщения, ПодстрокаРазделитель));
203
+
146
204
КонецПроцедуры
205
+
206
+ Функция ШаблоннаяСтрока ()
207
+ Возврат " "
208
+ + " "
209
+ ;
210
+ КонецФункции
211
+
212
+ Лог = Логирование.ПолучитьЛог(КонстантыOpm.ИмяЛога);
0 commit comments