Autojump: Falha no Windows devido ao tratamento impróprio de barra invertida em autojump_match.py

Criado em 1 ago. 2016  ·  7Comentários  ·  Fonte: wting/autojump

A execução de qualquer comando autojump normal no Windows leva a isso:

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.

A mudança destacada aqui: https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
levar à disfunção em sistemas Windows.

A solução proposta é basicamente alterar as linhas 78-80 em autojump_match.py ​​para:

    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

(Definindo condicionalmente o valor do separador usado na construção do regex)

os-windows priority-high

Comentários muito úteis

Profissional do Windows 10, encontrei esse problema hoje ... e o patch sugerido funciona perfeitamente! Muito Obrigado. Eu só me pergunto por que o patch não foi mesclado com o mestre enquanto quatro anos se passaram?

Todos 7 comentários

Ei, obrigado pelo relatório de bug detalhado!

Infelizmente não tenho acesso a uma máquina Windows. Você pode atualizar esses testes do Windows de forma que reproduzam o erro que você tem? Dessa forma, podemos evitar futuros bugs de regressão.

Apenas experimentando o autojump no Win10 e acertando isso. O patch proposto parece funcionar para mim.

@wting Se os testes não forem realmente executados no Windows, os testes match_consecutive não detectarão o os.sep errado? Os testes não falharão de fato, a menos que os.sep seja uma barra invertida.

Você pode simular para testes como:

In [1]: import os, mock

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

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

Eu tive o mesmo problema e a correção sugerida resolveu o problema. Acho que uma solução alternativa seria executar os testes em uma plataforma Windows CI como o appveyor.

ganhar 10 64, o mesmo problema. alterar autojump_match.py ​​funcionou. obrigado.

Profissional do Windows 10, encontrei esse problema hoje ... e o patch sugerido funciona perfeitamente! Muito Obrigado. Eu só me pergunto por que o patch não foi mesclado com o mestre enquanto quatro anos se passaram?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

loveencounterflow picture loveencounterflow  ·  6Comentários

pgrm picture pgrm  ·  4Comentários

juanrgon picture juanrgon  ·  4Comentários

xuhdev picture xuhdev  ·  3Comentários

turingking picture turingking  ·  12Comentários