Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддрержка опции --create-dirs #168

Merged
merged 1 commit into from
Jan 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
|o
|output
|output-dir
|create-dirs
|O
|remote-name
|remote-name-all
Expand Down Expand Up @@ -483,6 +484,8 @@

Процедура ДобавитьВызовHTTPМетода(ОписаниеРесурса)

ДобавитьСозданиеКаталога(ОписаниеРесурса);

ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
Expand All @@ -499,6 +502,29 @@

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

Процедура ДобавитьСозданиеКаталога(ОписаниеРесурса)

Если Не ЗначениеЗаполнено(ОписаниеРесурса.ИмяВыходногоФайла)
Или Не ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов Тогда
Возврат;
КонецЕсли;

Каталог = ОбщегоНазначения.КаталогФайла(ОписаниеРесурса.ИмяВыходногоФайла);

Если Не ПустаяСтрока(Каталог) Тогда
ШаблонСозданияКаталога = "// Создание каталога по необходимости
|Каталог = Новый Файл(""%1"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;";

Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(ШаблонСозданияКаталога, Каталог);
КонецЕсли;

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

Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса)

ДобавитьУстановкуТелаЗапросаТекстовымиДанными();
Expand Down
11 changes: 9 additions & 2 deletions src/core/Классы/КонвертерКомандыCURL.os
Original file line number Diff line number Diff line change
Expand Up @@ -865,11 +865,15 @@
КонецПроцедуры

Процедура ПрочитатьКаталогСохраненияФайлов()
КаталогСохраненияФайлов = "";

КаталогСохраненияФайлов = "";
Каталог = ПоследнееЗначениеОпции("output-dir");
Если Не Каталог = Неопределено Тогда
КаталогСохраненияФайлов = Каталог;
КонецЕсли;

ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов = УстановленФлагОпции("create-dirs");

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

Процедура ПрочитатьАдресПрокси()
Expand Down Expand Up @@ -1068,6 +1072,10 @@
"output-dir",
"Каталог сохранения файлов").ТМассивСтрок();

ДобавитьПоддерживаемуюОпцию(
"create-dirs",
"Создает каталог сохранения файла при необходимости").ТМассивБулево();

ДобавитьПоддерживаемуюОпцию(
"O remote-name",
"Извлечение имени выходного файла из URL").ТМассивБулево();
Expand Down Expand Up @@ -1184,7 +1192,6 @@
ДобавитьНеподдерживаемуюОпцию("C continue-at").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("b cookie").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("c cookie-jar").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("create-dirs").ТМассивБулево();
ДобавитьНеподдерживаемуюОпцию("create-file-mode").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("crlf").ТМассивБулево();
ДобавитьНеподдерживаемуюОпцию("crlfile").ТМассивСтрок();
Expand Down
2 changes: 2 additions & 0 deletions src/internal/Классы/ОписаниеЗапроса.os
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
Перем ОтправлятьКакMultipartFormData Экспорт; // Булево
Перем AWS4 Экспорт; // Структура
Перем ТокенBearer Экспорт; // Строка
Перем СоздатьКаталогСохраненияФайлов Экспорт; // Булево

// Максимальное время ожидания на выполнение запроса
Перем Таймаут Экспорт; // Число
Expand Down Expand Up @@ -110,6 +111,7 @@
ОтправлятьКакMultipartFormData = Ложь;
AWS4 = НовыйAWS4();
ТокенBearer = "";
СоздатьКаталогСохраненияФайлов = Ложь;
КонецПроцедуры

Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
Expand Down
29 changes: 24 additions & 5 deletions src/internal/Модули/ОбщегоНазначения.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,36 @@
КонецПроцедуры

Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога) Экспорт

Если ПустаяСтрока(ПутьКаталога) Тогда
Возврат ПутьКаталога;
КонецЕсли;

ПоследнийСимвол = Прав(ПутьКаталога, 1);

Если ПоследнийСимвол = "/" Или ПоследнийСимвол = "\" Тогда
Возврат ПутьКаталога;
КонецЕсли;

Разделитель = ?(СтрНайти(ПутьКаталога, "\"), "\", "/");

ДобавляемыйСимвол = ПолучитьРазделительПути();
Возврат ПутьКаталога + Разделитель;

КонецФункции

Функция КаталогФайла(ПутьКФайлу) Экспорт

ИндексРазделителя1 = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца);
ИндексРазделителя2 = СтрНайти(ПутьКФайлу, "/", НаправлениеПоиска.СКонца);

ИндексРазделителя = Макс(ИндексРазделителя1, ИндексРазделителя2);

Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда
Возврат ПутьКаталога;
Иначе
Возврат ПутьКаталога + ДобавляемыйСимвол;
Если ИндексРазделителя Тогда
Возврат Сред(ПутьКФайлу, 1, ИндексРазделителя - 1);
КонецЕсли;

Возврат "";

КонецФункции

Функция ДополнитьИменемФайлаПутьURL(ПолноеИмяФайла, ПутьURL) Экспорт
Expand Down
80 changes: 70 additions & 10 deletions tests/ГенераторПрограммногоКода1С_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -917,16 +917,12 @@
&Тест
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИПереданноеИмяФайла() Экспорт

КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());

КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path'";
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/'";

ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

Expand All @@ -935,21 +931,85 @@
&Тест
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИИзвлеченноеИмяФайлаИзURL() Экспорт

КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());

КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path'";
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path/'";

ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

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

&Тест
Процедура ТестДолжен_ПроверитьСозданиеКаталогСохраненияФайлов() Экспорт

КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/' --create-dirs
|curl http://example.com/about.html -O --output-dir '/some/path/' --create-dirs
|curl http://example.com/about.html -o '/some/path/file.html' --create-dirs
|curl http://example.com/about.html -o '/some/path\file.html' --create-dirs";

ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
|//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");
|
|//////////////////////////////////////////////
|// Команда #3.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
|//////////////////////////////////////////////
|// Команда #4.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path\file.html"");";

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

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

&Тест
Процедура ТестДолжен_ПроверитьПрокси() Экспорт

Expand Down
Loading