mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-31 15:30:51 +03:00
fix(db-*): на POSIX снимать обрамляющие кавычки с аргументов платформы
Воспроизведено на darwin: db-load-xml с путём, содержащим пробел, падает с «Неопределена информационная база». На POSIX аргументы уходят списком, и кавычки, нужные для склейки команды на Windows, становятся частью значения. Тот же механизм ранее молча терял многословный -comment в db-repo. Правка в общей run_v8 (семья platform: run_v8) — чинит все двенадцать потребителей разом. Снимается ОДИН слой обрамляющих кавычек, поэтому склеенные ключи (/N"user", File="…", /ConfigurationRepositoryF"путь") не задеты: у них кавычки внутри токена, там их ждёт разборщик 1С. PS1 не затронут: там команда всегда склеивается в строку. Точечный arg_value(), добавленный в db-repo при разборе дефекта, откачен — семейная правка делает его лишним. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ab5c1fd7c1
commit
b7837c86ce
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# db-create v1.12 — Create 1C information base
|
||||
# db-create v1.13 — Create 1C information base
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -332,11 +332,20 @@ def run_v8(v8path, arguments):
|
||||
The arguments carry their own quotes inside the value (File="C:\\a b") — that is where
|
||||
1C's parser expects them, on Windows and on *nix alike. Windows list2cmdline would
|
||||
escape those quotes, so there the command line is handed over ready-made.
|
||||
|
||||
На POSIX аргументы уходят СПИСКОМ, и кавычки, нужные для склейки на Windows, стали бы
|
||||
частью значения: путь с пробелом платформа не находит («Неопределена информационная
|
||||
база»), многословный -comment теряет молча. Поэтому здесь снимается ОДИН слой
|
||||
обрамляющих кавычек. Склеенные ключи (/N"user", /ConfigurationRepositoryF"путь",
|
||||
File="…") не задеты: у них кавычки внутри токена, а не по краям.
|
||||
"""
|
||||
if os.name == "nt":
|
||||
cmd = '"' + v8path + '" ' + " ".join(arguments)
|
||||
else:
|
||||
cmd = [v8path] + arguments
|
||||
cmd = [v8path] + [
|
||||
a[1:-1] if len(a) > 1 and a[0] == '"' and a[-1] == '"' else a
|
||||
for a in arguments
|
||||
]
|
||||
r = subprocess.run(cmd, input=b"", capture_output=True)
|
||||
r.stdout = decode_platform_bytes(r.stdout)
|
||||
r.stderr = decode_platform_bytes(r.stderr)
|
||||
|
||||
Reference in New Issue
Block a user