glob.translate incorrectly treats ***
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
While I could not find relevant manpage or other Unix standard, gitignore states:
Two consecutive asterisks ("**") in patterns matched against full pathname may have special meaning:
A leading "**" followed by a slash means match in all directories. For example, "**/foo" matches file or directory "foo" anywhere, the same as pattern "foo". "**/foo/bar" matches file or directory "bar" anywhere that is directly under directory "foo".
A trailing "/**" matches everything inside. For example, "abc/**" matches all files inside directory "abc", relative to the location of the .gitignore file, with infinite depth.
A slash followed by two consecutive asterisks then a slash matches zero or more directories. For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
Other consecutive asterisks are considered regular asterisks and will match according to the previous rules.
My understanding of the last sentence is that a triple asterisk *** (and any longer) should be treated exactly the same as a single one *, but it is not the case. While close, and definitely neither a double asterisk nor a naive repetition of a single one, it has an incorrect quantifier. It is likely caused because the first * is neither surrounded by path separators, nor by string begin/end.
import glob;
print(glob.translate('*', include_hidden=True, recursive=True))
print(glob.translate('***', include_hidden=True, recursive=True))
Expected behavior:
(?s:[^/]+)\Z
(?s:[^/]+)\Z
Actual behavior:
(?s:[^/]+)\Z
(?s:[^/]*)\Z
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter les exemples glob.translate fournis et inspectez le point d’entrée de glob.translate. Comparez le traitement de '' et de '**' lors de la correspondance récursive, puis ajoutez une couverture pour les expressions régulières censées être identiques et vérifiez le comportement signalé avec Python 3.13.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- operating-systems
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100