Autojump: Bloqueo en Windows debido a un manejo inadecuado de la barra invertida en autojump_match.py

Creado en 1 ago. 2016  ·  7Comentarios  ·  Fuente: wting/autojump

La ejecución de cualquier comando de salto automático normal en Windows conduce a esto:

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.

El cambio resaltado aquí: https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
conducir a la disfunción en los sistemas Windows.

La solución propuesta es básicamente cambiar las líneas 78-80 en autojump_match.py ​​a:

    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

(Establecer condicionalmente el valor del separador utilizado en la construcción de expresiones regulares)

os-windows priority-high

Comentario más útil

Windows 10 professional, me encontré con este problema hoy ... ¡y el parche sugerido funciona de maravilla! Muchas gracias. Me pregunto por qué el parche no se fusiona con el maestro mientras han pasado cuatro años.

Todos 7 comentarios

¡Hola, gracias por el informe detallado de errores!

Desafortunadamente, no tengo acceso a una máquina con Windows. ¿Puedes actualizar estas pruebas de Windows para que reproduzcan el error que tienes? De esa manera podemos prevenir futuros errores de regresión.

Solo probando autojump en Win10 y presione esto. El parche propuesto parece funcionar para mí.

@wting Si las pruebas no se ejecutan realmente en Windows, ¿no recogerán las pruebas match_consecutive el os.sep incorrecto? En realidad, las pruebas no fallarán a menos que os.sep sea una barra invertida.

Puede simularlo para pruebas como esta:

In [1]: import os, mock

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

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

Tuve el mismo problema y la solución sugerida resolvió el problema. Supongo que una solución alternativa sería ejecutar las pruebas en una plataforma de Windows CI como appveyor.

ganar 10 64, el mismo problema. el cambio autojump_match.py ​​funcionó. gracias.

Windows 10 professional, me encontré con este problema hoy ... ¡y el parche sugerido funciona de maravilla! Muchas gracias. Me pregunto por qué el parche no se fusiona con el maestro mientras han pasado cuatro años.

¿Fue útil esta página
0 / 5 - 0 calificaciones