SourceTree + precommit1C = error " Key in dictionary: 'HOME' Key being added: 'home'"

Здравствуйте, коллеги.
С какого-то времени, точно уже не помню, коммит через SourceTree выдает ошибку, если в репо установлен precommit1c:
ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла c:\tmp\testgit\MIS_TEMPLATES.epf в каталог c:\tmp\testgit\src, корень c:\tmp\testgit
ОШИБКА - {Модуль C:\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 310 / Внешнее исключение (System.ArgumentException): Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}

Через консоль все нормально.

Версия precommit1c v2.1.1, версия SourceTree 2.4.7.0

Пробовал opm update -all, не помогает.

1 Симпатия

opm install 1commands@1.3.1

Или попытаться разобраться в движке и пофиксить ошибку.

1 Симпатия

@nicxxx Предлагаю не откатываться, а расследовать, т.к. это недолго

  • установить новый релиз
    opm install 1commands

    • я только что выпустил спец.релиз с расширенной диагностикой этой ошибки
  • затем заново сделать гит коммит

  • и выложить в эту ветку сообщение об ошибке

@nicxxx Также я готов подключиться к тебе и вместе разобрать проблему.

Потому что проблема редкая, но актуальна у разных пользователей :frowning:

310 строка очень интересная - если я её правильно нашел: там создание процесса, а эксепшен почему про “словарь”, как бы в движок лезть не пришлось

P.S. проблема прикольная - нужно расследовать.

Проблема именно в движке. но некий грызун :slight_smile: не грызет эту проблему.

В свежем релизе я по его совету добавил расширенную диагностику

вот ишуз для решения https://github.com/artbear/1commands/issues/33 (пока не в движке)

s’il vous plait.

git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\nic\AppData\Local\Temp\fwa2fz2x.och
Start hooks before commit for v8unpack erf and epf
ИНФОРМАЦИЯ - precommit1c v2.1.1

ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла c:\temp\gittest\GA_Sample_UF.epf в каталог c:\temp\gittest\src, корень c:\temp\gittest
ОШИБКА - {Модуль C:\Program Files (x86)\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 317 / ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Program Files (x86)\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 312 / Внешнее исключение (System.ArgumentException): Элемент уже добавлен. Ключ в словаре: “HOME” Добавляемый ключ: ‘home’}
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); —> System.ArgumentException: Элемент уже добавлен. Ключ в словаре: “HOME” Добавляемый ключ: ‘home’
в System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
в System.Collections.Hashtable.Add(Object key, Object value)
в System.Collections.Specialized.StringDictionaryWithComparer.Add(String key, String value)
в System.Diagnostics.ProcessStartInfo.get_EnvironmentVariables()
в ScriptEngine.HostedScript.Library.ProcessContext.Create(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
в ScriptEngine.HostedScript.Library.SystemGlobalContext.CreateProcess(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
в ScriptEngine.Machine.Contexts.ContextMethodsMapper1.<>c__DisplayClass24_07.b__0(TInstance inst, IValue[] args)
в ScriptEngine.HostedScript.Library.SystemGlobalContext.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.CallContext(IRuntimeContextInstance instance, Int32 index, MethodInfo& methInfo, IValue[] argValues, Boolean asFunc)
в ScriptEngine.Machine.MachineInstance.MethodCallImpl(Int32 arg, Boolean asFunc)
в ScriptEngine.Machine.MachineInstance.CallFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
— Конец трассировки внутреннего стека исключений —
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()}

Спасибо.
В ишузе https://github.com/artbear/1commands/issues/33 разобрались.
Даже PR с тестами сделали

но почему-то падают и новые тесты, и старые :slight_smile:

Проблема исправлена в ветке девелоп.
Ночная сборка прошла, насколько я понимаю.
Так что тем, у кого проблема сабжа акутальна, можно ставить ночную сборку oscript.

1 Симпатия

не работает :frowning: версия 1.0.21.225
ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла c:\tmp\gittest\MIS_FIFO.epf в каталог c:\tmp\gittest\src, корень c:\tmp\gittest
ОШИБКА - {Модуль C:\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 310 / Внешнее исключение (System.ArgumentException): Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}

@nicxxx Тут странно.
В новой версии 1commands, как и написано выше, добавлен расширенный лог ошибок движка.
А у тебя этого расширенного лога нет :frowning:

  1. Какая версия 1commands стоит? проверь через opm list

  2. Проверь на совсем свежем ночнике, от 22.04

Жду ответа

@nicxxx и раньше по ветке ты указывал ошибку в строке 312, а сейчас у тебя почему строка 310

странно :frowning:

я понял - ты обновил движок и поставил галочку для обновлении библиотек движка, после чего тебе приехала старая версия 1коммандс.

  • Проверь все таки на ночнике от 22.04
  • установи новый 1коммандс opm install 1commands

Я качал отсюда http://oscript.io/downloads/night-build/OneScript-1.0.21.zip. Если это было вчера, то там был ночник от 21 апреля?

сделал, как ты сказал. не работает

git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\eliseev\AppData\Local\Temp\zg05phkn.v2o
Start hooks before commit for v8unpack erf and epf
ИНФОРМАЦИЯ - precommit1c v2.1.1

ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла c:\tmp\gittest\MIS_FIFO.epf в каталог c:\tmp\gittest\src, корень c:\tmp\gittest
ОШИБКА - {Модуль C:\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 317 / ScriptEngine.Machine.ExternalSystemException: {Модуль C:\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 312 / Внешнее исключение (System.ArgumentException): Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); —> System.ArgumentException: Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at System.Collections.Specialized.StringDictionaryWithComparer.Add(String key, String value)
at System.Diagnostics.ProcessStartInfo.get_EnvironmentVariables()
at ScriptEngine.HostedScript.Library.ProcessContext.Create(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
at ScriptEngine.HostedScript.Library.SystemGlobalContext.CreateProcess(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
at lambda_method(Closure , SystemGlobalContext , IValue[] )
at ScriptEngine.HostedScript.Library.SystemGlobalContext.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
at ScriptEngine.Machine.MachineInstance.CallContext(IRuntimeContextInstance instance, Int32 index, MethodInfo& methInfo, IValue[] argValues, Boolean asFunc)
at ScriptEngine.Machine.MachineInstance.MethodCallImpl(Int32 arg, Boolean asFunc)
at ScriptEngine.Machine.MachineInstance.CallFunc(Int32 arg)
at ScriptEngine.Machine.MachineInstance.MainCommandLoop()
— End of inner exception stack trace —
at ScriptEngine.Machine.MachineInstance.MainCommandLoop()
at ScriptEngine.Machine.MachineInstance.ExecuteCode()}

1 Симпатия

У меня заработало. НО precommit1c compile не обновляет модули управляемых форм…

Чего вдруг то произошло то ? По всей стране наблюдаются проблемы :wink: @EvilBeaver не знаешь почему такое ?

проброс переменных среды в 1commands добавлял я. после этого и началось. До этого проброс использоваться редко в единичных проектах, вот и не выплывало массово.

Я так-то знаю, но не знаю. Жили, не тужили, все пользовались ночником и прекоммитом, а потом взяло и перестало работать. Вопрос - а почему раньше до выпуска релиза работало и проблем не было. У меня прекоммит активно используется.

Более того, тут @dmpas выяснил, что это баг в самом .NET Framework вроде как.
Понятно, что нам не сильно легче от этого, но вопрос, почему во время тестовой эксплуатации релиза 1.0.20 (а это около 2 месяцев) ни у кого не было проблем с прекоммитом - остается для меня открытым.

У меня проблемы были, но я стойко переносил тяготы и лишения :slight_smile: Делал коммиты через консоль, там все ОК.