Снегопат https://snegopat.ru/forum/ |
|
Get-Latest на OneScript https://snegopat.ru/forum/viewtopic.php?f=3&t=678 |
Страница 1 из 2 |
Автор: | yukon [ 07 апр 2015, 19:14 ] | ||
Заголовок сообщения: | Get-Latest на OneScript | ||
По поступающим просьбам сделал реплику Get-Latest на PowerShell на OneScript. Для унификации писал на английском диалекте языка 1С. Мдя, OneScript-у ещё есть куда расти Версия 1.0.9.124: 1. Не работает группировка Procedure/EndProcedure, Function/EndFunction во встроенном редакторе 2. Не опознаются ключевые слова "Not", "In", "False", "True" 3. Не опознается объект CommandLineArguments (АргументыКоманднойСтроки) 4. Не опознается метод Count() (Количество()) у массивов 5. RunApp() глотает кавычки: cmdLine = "C:\Snegopat 20\fossil.exe" clone "http://snegopat.ru:9004" "C:\Snegopat 20\repo\core.fossil" а командная строка процесса = "C:\Snegopat 20\fossil.exe" clone http://snegopat.ru:9004 C:\Snegopat 20\repo\core.fossil
|
Автор: | artbear [ 07 апр 2015, 19:36 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
Прикольно. Спасибо! Ты про встроенный редактор 1С, верно? |
Автор: | artbear [ 07 апр 2015, 19:45 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
Вопрос - Юзаешь под снегопатом или просто из командной строки ? |
Автор: | yukon [ 07 апр 2015, 20:19 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
artbear писал(а): Ты про встроенный редактор 1С, верно? Нет, про поставляемый с OneScript. artbear писал(а): Юзаешь под снегопатом или просто из командной строки ? Писал в поставляемом редакторе, там же и проверял работу. А уже когда дело дошло по параметров командной строки, то уже проверял из командной строки. Основной скрипт работает на PowerShell из соседней ветки. |
Автор: | EvilBeaver [ 07 апр 2015, 22:26 ] | ||
Заголовок сообщения: | Re: Get-Latest на OneScript | ||
Цитата: 1. Не работает группировка Procedure/EndProcedure, Function/EndFunction во встроенном редакторе Встроенный редактор - это не редактор а тестовая консоль. В ней не предусмотрены полноценные функции форматирования, свертки блоков и всего такого прочего, что должно быть в редакторе. Этот режим запуска (в TestApp) вообще можно не считать штатным. TestApp это, можно, сказать, внутренняя отладочная утилита, не предназначенная для реального применения. Отсюда и по пункту 2: Цитата: 2. Не опознаются ключевые слова "Not", "In", "False", "True" Тестовое приложение не предназначено для реальной работы. Оно не будет ни развиваться, ни предлагаться к использованию. Для написания кода есть достаточное количество специализированных инструментов и у нас нет желания писать свой велосипед-редактор Цитата: 3. Не опознается объект CommandLineArguments (АргументыКоманднойСтроки) У свойства АргументыКоманднойСтроки действительно нет английского терма. Записал задачу (https://bitbucket.org/EvilBeaver/1script/issue/137) Отмечу также, что в первую очередь разрабатываются объекты под русские термы. Это все-таки 1С Цитата: 4. Не опознается метод Count() (Количество()) у массивов Это не воспроизводится, см. скриншот Цитата: 5. RunApp() глотает кавычки: cmdLine = "C:\Snegopat 20\fossil.exe" clone "http://snegopat.ru:9004" "C:\Snegopat 20\repo\core.fossil" Так и должно быть. Кавычки определяют границы параметра, но в сам параметр не входят.
|
Автор: | yukon [ 08 апр 2015, 08:22 ] | ||
Заголовок сообщения: | Re: Get-Latest на OneScript | ||
EvilBeaver писал(а): Встроенный редактор - это не редактор а тестовая консоль. Все же ожидается, что валидный код в ней будет работать. EvilBeaver писал(а): Тестовое приложение не предназначено для реальной работы. Для написания кода есть достаточное количество специализированных инструментов Хм, пока все скриншоты с OneScript, в т.ч. для разработки я видел в рамках тестовой консоли. А какие специализированные инструменты, кроме Конфигуратора есть для OneScript? EvilBeaver писал(а): Цитата: 4. Не опознается метод Count() (Количество()) у массивов Это не воспроизводится, см. скриншот Возможно, это ошибка связана с п.3, см. скриншот. EvilBeaver писал(а): Цитата: 5. RunApp() глотает кавычки: Так и должно быть. Кавычки определяют границы параметра, но в сам параметр не входят. Не соглашусь. Из-за этой ошибки не получается запустить обновление снегопата в каталоге, путь к которому содержит пробелы, т.к. не получается экранировать пути. Строка запуска должна передаваться as is, ответственность за "левые" символы полностью лежит на разработчике скрипта. Сейчас получается, что если скопировать cmdLine в командную строку, то все запуститься, а если вызвать RunApp(cmdLine) то нет. OneScript отличная вещь, из всех встреченных багов, пока лично для меня критичная за №5, т.к. влияет на функциональность решения, остальное издержки молодости продукта. Я в некоторой степени специально написал скрипт на английском диалекте языка, чтобы проверить работу движка. Результаты меня не удивили и не расстроили.
|
Автор: | EvilBeaver [ 08 апр 2015, 09:51 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
В качестве инструмента разработки плагинов к Снегопату сам собой напрашивается Конфигуратор. Открываем текстовый файл, включаем в меню текст расширение "Встроенный язык". Снегопат начнет работать, как с модулем, выдавать подсказки и т.п. Для разработки standalone скриптов я использую Notepad++. Как его приготовить, можно почитать здесь: http://infostart.ru/public/327581 Цитата: Все же ожидается, что валидный код в ней будет работать Я не совсем понял, все-таки, какой валидный код не работает в testapp? Если речь о английских термах в КоллецииАргументовКоманднойСтроки, то да, я вроде написал, что там не сделаны английские термы (вернее, уже сделаны, благодаря вашему сообщению https://bitbucket.org/EvilBeaver/1scrip ... 762871d8a1) Кроме этого есть что-то, что не работает? Теперь попробуем разобраться с кавычками и RunApp. Когда вы вводите в консоли командную строку, то параметры, содержащие пробелы экранируете кавычками. При этом, сами символы кавычек не должны попасть в приложение, я правильно понял? т.е. если имеем ком. строку: Код: fossil.exe dosmth какой-то путь с пробелами то мы должны экранировать путь кавычками и передать в RunApp следующее:Код: RunApp("fossil.exe dosmth ""какой-то путь с пробелами"""); правильно?Так вот, само приложение должно получить на входе параметр без кавычек. Именно это и происходит. Путь с пробелами обернут в кавычки. Именно так вы делаете и при запуске приложения просто в консоли. Или я чего-то не понимаю, тогда извиняюсь за недогадливость и прошу еще раз пояснить доходчивым примером, что не получается сделать? P.S. кстати, забыл уточнить. Если речь идет о плагине к Снегопату, то там не будет объекта АргументыКоманднойСтроки. Под управлением Снегопата там совсем другое программное окружение. См. https://bitbucket.org/EvilBeaver/1script/wiki/snegopat |
Автор: | yukon [ 08 апр 2015, 10:47 ] | ||
Заголовок сообщения: | Re: Get-Latest на OneScript | ||
EvilBeaver писал(а): В качестве инструмента разработки плагинов к Снегопату сам собой напрашивается Конфигуратор. Для разработки standalone скриптов я использую Notepad++. Проблемы в написании кода как такового нет, а вот с отладкой? В конфигураторе ещё более менее можно оттестировать часть функционала. В моем случае EvilBeaver писал(а): Я не совсем понял, все-таки, какой валидный код не работает в testapp? Например такой: Код: Array = New Array(); Stop = False; For Each String In Array Do If Not String = "stop" Then Stop = True; EndIf; EndDo; EvilBeaver писал(а): Теперь попробуем разобраться с кавычками и RunApp. Когда вы вводите в консоли командную строку, то параметры, содержащие пробелы экранируете кавычками. При этом, сами символы кавычек не должны попасть в приложение, я правильно понял? Это определяет разработчик стороннего приложения. В частности, если путь должен быть экранирован кавычками, то путь должен попадать вместе с кавычками. EvilBeaver писал(а): Код: RunApp("fossil.exe dosmth ""какой-то путь с пробелами"""); правильно?Да. EvilBeaver писал(а): Так вот, само приложение должно получить на входе параметр без кавычек. Именно это и происходит. Не должно. Они должно получить параметр с кавычками. Т.е. для стороннего приложения параметр равен ["какой-то путь с пробелами"], а не [какой-то путь с пробелами]. EvilBeaver писал(а): Или я чего-то не понимаю, тогда извиняюсь за недогадливость и прошу еще раз пояснить доходчивым примером, что не получается сделать? Пример: Код: cmdLine = """C:\Snegopat 20\fossil.exe"" clone http://snegopat.ru:9004 ""C:\Snegopat 20\repo\core.fossil"""; Message(cmdLine); RunApp(cmdLine); Если скопировать вывод message() в командную строку, то commandLine процесса будет равен ["C:\Snegopat 20\fossil.exe" clone http://snegopat.ru:9004 "C:\Snegopat 20\core.fossil"], а при вызове RunApp имеем ["C:\Snegopat 20\fossil.exe" clone http://snegopat.ru:9004 C:\Snegopat 20\core.fossil], и fossil, впрочем как и onescript, и много других приложений будет считать последний вариант как набор параметров [clone],[C:\Snegopat],[20\core.fossil], а не [clone],[C:\Snegopat 20\repo\core.fossil] Пример для OneScript: Код: Сообщить("-Старт-"); Для каждого Параметр из АргументыКоманднойСтроки Цикл Сообщить(Параметр); КонецЦикла; Сообщить("-Конец-"); Сравните: Код: oscript.exe test.os раз два три
-Старт- раз два три -Конец- oscript.exe test.os раз "два три" -Старт- раз два три -Конец-
|
Автор: | EvilBeaver [ 08 апр 2015, 11:52 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
Да, похоже, это баг в парсере параметров, передаваемых RunApp. Спасибо. Завел issue https://bitbucket.org/EvilBeaver/1script/issue/139 Можете на него подписаться, тогда придет вам уведомление, когда баг будет закрыт. P.S. странно, что мы за почти год эксплуатации ни разу с ним не столкнулись Еще раз спасибо. |
Автор: | EvilBeaver [ 08 апр 2015, 12:30 ] |
Заголовок сообщения: | Re: Get-Latest на OneScript |
Завел Gist для данного скрипта. Предлагаю дорабатывать в рамках данного gist, имхо, будет более продуктивно. https://gist.github.com/EvilBeaver/286d ... /revisions |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |