Autojump: Crash sous Windows en raison d'une mauvaise gestion de la barre oblique inverse dans autojump_match.py

Créé le 1 août 2016  ·  7Commentaires  ·  Source: wting/autojump

L'exécution de n'importe quelle commande autojump normale dans Windows conduit à ceci :

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.

Le changement mis en évidence ici : https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
conduire au dysfonctionnement des systèmes Windows.

La solution proposée consiste essentiellement à modifier les lignes 78-80 dans autojump_match.py ​​en :

    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

(Définition conditionnelle de la valeur de séparation utilisée dans la construction regex)

os-windows priority-high

Commentaire le plus utile

Professionnel de Windows 10, j'ai rencontré ce problème aujourd'hui... et le correctif suggéré fonctionne à merveille ! Merci beaucoup. Je me demande juste pourquoi le patch n'est pas fusionné dans le master alors que quatre ans se sont écoulés ?

Tous les 7 commentaires

Hé merci pour le rapport de bogue détaillé !

Malheureusement, je n'ai pas accès à une machine Windows. Pouvez-vous mettre à jour ces tests Windows de manière à ce qu'ils reproduisent l'erreur que vous avez ? De cette façon, nous pouvons éviter de futurs bugs de régression.

Essayez juste le saut automatique sur Win10 et appuyez dessus. Le patch proposé semble fonctionner pour moi.

@wting Si les tests ne sont pas réellement exécutés sous Windows, les tests match_consecutive ne récupéreront-ils pas le mauvais os.sep ? Les tests n'échoueront pas à moins que os.sep ne soit une barre oblique inverse.

Vous pouvez vous en moquer pour des tests comme ceci :

In [1]: import os, mock

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

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

J'ai eu le même problème et la solution suggérée a résolu le problème. Je suppose qu'une solution alternative serait d'exécuter les tests sur une plate-forme Windows CI telle qu'appveyor.

gagner 10 64, le même problème. changer autojump_match.py ​​a fonctionné. Je vous remercie.

Professionnel de Windows 10, j'ai rencontré ce problème aujourd'hui... et le correctif suggéré fonctionne à merveille ! Merci beaucoup. Je me demande juste pourquoi le patch n'est pas fusionné dans le master alors que quatre ans se sont écoulés ?

Cette page vous a été utile?
0 / 5 - 0 notes