glob.translate incorrectly treats ***
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando los ejemplos de glob.translate proporcionados e inspecciona el punto de entrada de glob.translate. Compara el tratamiento de '' y '**' durante la coincidencia recursiva, añade después cobertura para las expresiones regulares que se esperan idénticas y verifica el comportamiento descrito en Python 3.13.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- operating-systems
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 48/100