Autojump: Сбой в Windows из-за неправильной обработки обратной косой черты в autojump_match.py

Созданный на 1 авг. 2016  ·  7Комментарии  ·  Источник: wting/autojump

Выполнение любой обычной команды автоперехода в Windows приводит к следующему:

Traceback (most recent call last):
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\\autojump", line 320, in <module>
    sys.exit(main(parse_arguments()))
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\\autojump", line 314, in main
    ['.'])))
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\autojump_utils.py", line 42, in first
    return it.next()
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\autojump_match.py", line 86, in <lambda>
    flags=regex_flags,
  File "F:\Programs\Python\lib\re.py", line 146, in search
    return _compile(pattern, flags).search(string)
  File "F:\Programs\Python\lib\re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression
ECHO is off.

Выделенное здесь изменение: https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
привести к дисфункции в системах Windows.

Предлагаемое решение в основном меняет строки 78-80 в autojump_match.py ​​на:

    sep = '\\\\' if os.sep == '\\' else os.sep
    regex_no_sep = '[^' + sep + ']*'
    regex_no_sep_end = regex_no_sep + '$'
    regex_one_sep = regex_no_sep + sep + regex_no_sep

(Условная установка значения разделителя, используемого в конструкции регулярного выражения)

os-windows priority-high

Самый полезный комментарий

Window 10 professional, я столкнулся с этой проблемой сегодня .... и предложенный патч работает как шарм! Большое спасибо. Просто интересно, почему патч не слился с мастером, пока прошло четыре года?

Все 7 Комментарий

Привет, спасибо за подробный отчет об ошибке!

К сожалению, у меня нет доступа к машине с Windows. Можете ли вы обновить эти тесты Windows , чтобы они воспроизводили имеющуюся у вас ошибку? Таким образом мы можем предотвратить будущие ошибки регрессии.

Просто попробуй автопрыжок на Win10 и нажми это. Предложенный патч, кажется, мне подходит.

@wting Если тесты на самом деле не выполняются в Windows, не обнаружат ли тесты match_consecutive неправильный os.sep ? На самом деле тесты не завершатся ошибкой, если os.sep не является обратной косой чертой.

Вы можете смоделировать это для тестов так:

In [1]: import os, mock

In [2]: os.sep
Out[2]: '/'

In [3]: with mock.patch.object(os, 'sep', '\\'):
   ...:     print(os.sep)
   ...:     
\

У меня была та же проблема, и предложенное решение решило ее. Я предполагаю, что альтернативным решением было бы запустить тесты на платформе Windows CI, такой как appveyor.

win 10 64, такая же проблема. изменение autojump_match.py ​​сработало. Спасибо.

Window 10 professional, я столкнулся с этой проблемой сегодня .... и предложенный патч работает как шарм! Большое спасибо. Просто интересно, почему патч не слился с мастером, пока прошло четыре года?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

pgrm picture pgrm  ·  4Комментарии

qazip picture qazip  ·  3Комментарии

nunoh picture nunoh  ·  20Комментарии

chauzer picture chauzer  ·  13Комментарии

grota picture grota  ·  16Комментарии