|
1 | 1 | #Использовать logos
|
2 | 2 | #Использовать tempfiles
|
3 | 3 | #Использовать fs
|
| 4 | +#Использовать semver |
4 | 5 |
|
5 | 6 | Перем ВерсияПлагина;
|
6 | 7 | Перем Лог;
|
|
100 | 101 |
|
101 | 102 | Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды);
|
102 | 103 |
|
103 |
| - КлассРеализации.Опция("P project-name", "", "[*edtExport] Имя проекта") |
104 |
| - .ТСтрока() |
105 |
| - .ВОкружении("GITSYNC_PROJECT_NAME"); |
| 104 | + КлассРеализации.Опция("PN project-name", "", "[*edtExport] Имя проекта") |
| 105 | + .ТСтрока() |
| 106 | + .ВОкружении("GITSYNC_PROJECT_NAME"); |
106 | 107 |
|
107 | 108 | КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области")
|
108 |
| - .ТСтрока() |
109 |
| - .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); |
110 |
| - |
111 |
| - КлассРеализации.Опция( |
112 |
| - "B base-project-name", |
113 |
| - "", |
114 |
| - "[*edtExport] имя базового проекта в рабочей области (для расширений))") |
115 |
| - .ТСтрока() |
116 |
| - .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); |
117 |
| - |
118 |
| - КлассРеализации.Опция( |
119 |
| - "M module", |
120 |
| - "", |
121 |
| - "[*edtExport] имя установленного модуля edt") |
122 |
| - .ТСтрока() |
123 |
| - .ВОкружении("GITSYNC_MODULE"); |
| 109 | + .ТСтрока() |
| 110 | + .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); |
| 111 | + |
| 112 | + КлассРеализации.Опция("BP base-project-name", |
| 113 | + "", |
| 114 | + "[*edtExport] имя базового проекта в рабочей области (для расширений))") |
| 115 | + .ТСтрока() |
| 116 | + .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); |
| 117 | + |
| 118 | + КлассРеализации.Опция("M module", |
| 119 | + "", |
| 120 | + "[*edtExport] имя установленного модуля edt") |
| 121 | + .ТСтрока() |
| 122 | + .ВОкружении("GITSYNC_MODULE"); |
124 | 123 |
|
125 | 124 | КонецПроцедуры
|
126 | 125 |
|
|
185 | 184 | Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);
|
186 | 185 | ФС.ОбеспечитьПустойКаталог(КаталогПроекта);
|
187 | 186 |
|
188 |
| - Команда = Новый Команда; |
189 |
| - |
190 |
| - Параметры = Новый Массив(); |
191 |
| - Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); |
192 |
| - Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", ВременноеРабочееПространство)); |
193 |
| - Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); |
194 |
| - |
195 |
| - Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда |
196 |
| - Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); |
197 |
| - КонецЕсли; |
| 187 | + Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта); |
198 | 188 |
|
199 |
| - Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring %1 workspace import", ИмяМодуля)); |
200 |
| - Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); |
201 |
| - Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); |
202 |
| - Команда.ДобавитьПараметры(Параметры); |
203 |
| - Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); |
204 |
| - Команда.ПоказыватьВыводНемедленно(Ложь); |
205 |
| - Команда.УстановитьПравильныйКодВозврата(0); |
206 | 189 | КодВозврата = Команда.Исполнить();
|
207 | 190 |
|
208 | 191 | Лог.Отладка("Код возврата EDT: %1", КодВозврата);
|
|
228 | 211 |
|
229 | 212 | #Область Вспомогательные_процедуры_и_функции
|
230 | 213 |
|
| 214 | +// Функция - получает команду запуска утилиты ring для выполнения конвертации |
| 215 | +// |
| 216 | +// Возвращаемое значение: |
| 217 | +// Команда - команда запуска утилиты ring для выполнения конвертации |
| 218 | +// |
| 219 | +Функция КомандаКонвертации(КаталогВыгрузки, РабочееПространство, КаталогПроекта) |
| 220 | + |
| 221 | + ВерсияEDT = ВерсияEDT(); |
| 222 | + |
| 223 | + Если Лев(ВерсияEDT(), 4) >= "2024" Тогда |
| 224 | + Команда = КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта); |
| 225 | + Иначе |
| 226 | + Команда = КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта); |
| 227 | + КонецЕсли; |
| 228 | + |
| 229 | + Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); |
| 230 | + Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); |
| 231 | + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); |
| 232 | + Команда.ПоказыватьВыводНемедленно(Ложь); |
| 233 | + Команда.УстановитьПравильныйКодВозврата(0); |
| 234 | + |
| 235 | + Возврат Команда; |
| 236 | + |
| 237 | +КонецФункции // КомандаКонвертации() |
| 238 | + |
| 239 | +// Функция - получает команду запуска утилиты ring для выполнения конвертации |
| 240 | +// |
| 241 | +// Возвращаемое значение: |
| 242 | +// Команда - команда запуска утилиты ring для выполнения конвертации |
| 243 | +// |
| 244 | +Функция КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта) |
| 245 | + |
| 246 | + Команда = Новый Команда; |
| 247 | + |
| 248 | + Параметры = Новый Массив(); |
| 249 | + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); |
| 250 | + Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", РабочееПространство)); |
| 251 | + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); |
| 252 | + |
| 253 | + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда |
| 254 | + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); |
| 255 | + КонецЕсли; |
| 256 | + |
| 257 | + ИсполняемыйФайл = НайтиRing(); |
| 258 | + |
| 259 | + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 %2 workspace import", ИсполняемыйФайл, ИмяМодуля)); |
| 260 | + Команда.ДобавитьПараметры(Параметры); |
| 261 | + |
| 262 | + Возврат Команда; |
| 263 | + |
| 264 | +КонецФункции // КомандаRing() |
| 265 | + |
| 266 | +// Функция - получает команду запуска утилиты edtcli для выполнения конвертации |
| 267 | +// |
| 268 | +// Возвращаемое значение: |
| 269 | +// Команда - команда запуска утилиты edtcli для выполнения конвертации |
| 270 | +// |
| 271 | +Функция КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта) |
| 272 | + |
| 273 | + Команда = Новый Команда; |
| 274 | + |
| 275 | + Параметры = Новый Массив(); |
| 276 | + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); |
| 277 | + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); |
| 278 | + // Параметры.Добавить(СтрШаблон("--version ""%1""", Параметры.ВерсияПлатформы)); |
| 279 | + |
| 280 | + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда |
| 281 | + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); |
| 282 | + КонецЕсли; |
| 283 | + |
| 284 | + ИсполняемыйФайл = НайтиEdtcli(); |
| 285 | + |
| 286 | + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 -data ""%2"" -command import", |
| 287 | + ИсполняемыйФайл, |
| 288 | + РабочееПространство)); |
| 289 | + Команда.ДобавитьПараметры(Параметры); |
| 290 | + |
| 291 | + Возврат Команда; |
| 292 | + |
| 293 | +КонецФункции // КомандаEdtcli() |
| 294 | + |
| 295 | +// Функция - выполняет поиск утилиты ring и возвращает полный путь к утилите |
| 296 | +// |
| 297 | +// Возвращаемое значение: |
| 298 | +// Строка - полный путь к утилите ring |
| 299 | +// |
| 300 | +Функция НайтиRing() Экспорт |
| 301 | + |
| 302 | + РасположениеRing = НайтиКоманду("ring"); |
| 303 | + |
| 304 | + Если ЗначениеЗаполнено(РасположениеRing) Тогда |
| 305 | + Возврат РасположениеRing; |
| 306 | + КонецЕсли; |
| 307 | + |
| 308 | + Если ЭтоWindows() Тогда |
| 309 | + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); |
| 310 | + Расширение = ".cmd"; |
| 311 | + Иначе |
| 312 | + КаталогПрограмм = "/opt"; |
| 313 | + Расширение = ""; |
| 314 | + КонецЕсли; |
| 315 | + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); |
| 316 | + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("ring%1", Расширение), Истина); |
| 317 | + |
| 318 | + Если Файлы.Количество() > 0 Тогда |
| 319 | + Возврат Файлы[0].ПолноеИмя; |
| 320 | + КонецЕсли; |
| 321 | + |
| 322 | + Возврат ""; |
| 323 | + |
| 324 | +КонецФункции // НайтиRing() |
| 325 | + |
| 326 | +// Функция - выполняет поиск утилиты edtcli и возвращает полный путь к утилите |
| 327 | +// |
| 328 | +// Возвращаемое значение: |
| 329 | +// Строка - полный путь к утилите edtcli |
| 330 | +// |
| 331 | +Функция НайтиEdtcli() Экспорт |
| 332 | + |
| 333 | + РасположениеEdtcli = НайтиКоманду("1cedtcli"); |
| 334 | + |
| 335 | + Если ЗначениеЗаполнено(РасположениеEdtcli) Тогда |
| 336 | + Возврат РасположениеEdtcli; |
| 337 | + КонецЕсли; |
| 338 | + |
| 339 | + Если ЭтоWindows() Тогда |
| 340 | + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); |
| 341 | + Расширение = ".exe"; |
| 342 | + Иначе |
| 343 | + КаталогПрограмм = "/opt"; |
| 344 | + Расширение = ""; |
| 345 | + КонецЕсли; |
| 346 | + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); |
| 347 | + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("1cedtcli%1", Расширение), Истина); |
| 348 | + |
| 349 | + Если Файлы.Количество() > 0 Тогда |
| 350 | + Возврат Файлы[0].ПолноеИмя; |
| 351 | + КонецЕсли; |
| 352 | + |
| 353 | + Возврат ""; |
| 354 | + |
| 355 | +КонецФункции // НайтиEdtcli() |
| 356 | + |
| 357 | +// Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH |
| 358 | +// |
| 359 | +// Параметры: |
| 360 | +// ИмяКоманды - Строка - имя команды для поиска |
| 361 | +// |
| 362 | +// Возвращаемое значение: |
| 363 | +// Строка - полный путь к команде |
| 364 | +// |
| 365 | +Функция НайтиКоманду(Знач ИмяКоманды) |
| 366 | + |
| 367 | + ЭтоWindows = ЭтоWindows(); |
| 368 | + |
| 369 | + Команда = Новый Команда(); |
| 370 | + Если ЭтоWindows Тогда |
| 371 | + Команда.УстановитьКоманду("where"); |
| 372 | + Иначе |
| 373 | + Команда.УстановитьКоманду("which"); |
| 374 | + КонецЕсли; |
| 375 | + Команда.ДобавитьПараметр(ИмяКоманды); |
| 376 | + |
| 377 | + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); |
| 378 | + Команда.ПоказыватьВыводНемедленно(Ложь); |
| 379 | + |
| 380 | + КодВозврата = Команда.Исполнить(); |
| 381 | + |
| 382 | + ВыводКоманды = СокрЛП(Команда.ПолучитьВывод()); |
| 383 | + |
| 384 | + Если КодВозврата = 0 Тогда |
| 385 | + Лог.Отладка("Найдена команда ""%1"": %2", ИмяКоманды, ВыводКоманды); |
| 386 | + Иначе |
| 387 | + Лог.Предупреждение("Команда ""%1"" не найдена в текущем каталоге или в переменной окружения PATH:%2%3", |
| 388 | + ИмяКоманды, |
| 389 | + Символы.ПС, |
| 390 | + ВыводКоманды); |
| 391 | + Возврат ""; |
| 392 | + КонецЕсли; |
| 393 | + |
| 394 | + Если ФС.ФайлСуществует(ВыводКоманды) Тогда |
| 395 | + Возврат ВыводКоманды; |
| 396 | + КонецЕсли; |
| 397 | + |
| 398 | + Возврат ""; |
| 399 | + |
| 400 | +КонецФункции // НайтиКоманду() |
| 401 | + |
| 402 | +// Функция - проверяет, что скрипт выполняется в среде Windows |
| 403 | +// |
| 404 | +// Возвращаемое значение: |
| 405 | +// Булево - Истина - скрипт выполняется в среде Windows |
| 406 | +// |
| 407 | +Функция ЭтоWindows() Экспорт |
| 408 | + |
| 409 | + СистемнаяИнформация = Новый СистемнаяИнформация; |
| 410 | + Возврат Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; |
| 411 | + |
| 412 | +КонецФункции // ЭтоWindows() |
| 413 | + |
| 414 | +// Функция - выполняет поиск утилиты ring и возвращает полный номер последней версии EDT |
| 415 | +// |
| 416 | +// Возвращаемое значение: |
| 417 | +// Строка - полный номер последней версии EDT |
| 418 | +// |
| 419 | +Функция ВерсияEDT() Экспорт |
| 420 | + |
| 421 | + РасположениеEdtcli = НайтиEdtcli(); |
| 422 | + |
| 423 | + ФайлEdtcli = Новый Файл(РасположениеEdtcli); |
| 424 | + КаталогEdtcli = Новый Файл(ФайлEdtcli.Путь); |
| 425 | + КаталогEdtcli = Новый Файл(КаталогEdtcli.Путь); |
| 426 | + |
| 427 | + Файлы = НайтиФайлы(КаталогEdtcli.Путь, "1cedt.ini", Истина); |
| 428 | + РВ = Новый РегулярноеВыражение("1c-edt-(\d+\.\d+\.\d+)\+"); |
| 429 | + |
| 430 | + НомераВерсий = Новый Массив(); |
| 431 | + |
| 432 | + Для Каждого ТекФайл Из Файлы Цикл |
| 433 | + КаталогВерсии = Новый Файл(ТекФайл.Путь); |
| 434 | + |
| 435 | + Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); |
| 436 | + |
| 437 | + Если Совпадения.Количество() = 0 Тогда |
| 438 | + Продолжить; |
| 439 | + КонецЕсли; |
| 440 | + |
| 441 | + НомераВерсий.Добавить(Совпадения[0].Группы[1].Значение); |
| 442 | + Лог.Отладка("Найдена версия EDT ""%1"" в каталоге ""%2"".", Совпадения[0].Группы[1].Значение, ТекФайл.Путь); |
| 443 | + КонецЦикла; |
| 444 | + |
| 445 | + Версии.СортироватьВерсии(НомераВерсий, "УБЫВ"); |
| 446 | + |
| 447 | + Если НомераВерсий.Количество() = 0 Тогда |
| 448 | + Лог.Предупреждение("Не найдена версия EDT"); |
| 449 | + КонецЕсли; |
| 450 | + |
| 451 | + Лог.Отладка("Найдена версия EDT ""%1"".", НомераВерсий[0]); |
| 452 | + |
| 453 | + Возврат НомераВерсий[0]; |
| 454 | + |
| 455 | +КонецФункции // ВерсияEDT() |
| 456 | + |
231 | 457 | Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки)
|
232 | 458 |
|
233 | 459 | ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла();
|
|
390 | 616 |
|
391 | 617 | Процедура Инициализация()
|
392 | 618 |
|
393 |
| - ВерсияПлагина = "1.3.0"; |
| 619 | + ВерсияПлагина = "1.4.0"; |
394 | 620 | Лог = Логирование.ПолучитьЛог(ИмяЛога());
|
395 | 621 | КомандыПлагина = Новый Массив;
|
396 | 622 | КомандыПлагина.Добавить("sync");
|
|
0 commit comments