libgit2 / libgit2/pygit2

Repository.resolve_refish can return a Tag, violates docstring and typehint

Abierto
#1,414 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
1.7k
Forks
408
Merge medio
2 d 57 min
PR fusionados (30 d)
7

Descripción

The typing hint and docstring of Repository.resolve_refish says it returns a Commit object. Actually, it will return a Tag object if given a tag's hex oid. Is this the expected behavior.

For example, in the Linux kernel:

assert pygit2.__version__ == "1.18.0"

# OID of `v6.12.1^{tag}` and v6.12.1^{commit}` in Linux kernel.                 
tag_oid = Oid(hex="a554dea023a451ad985c071f8aae6415f0e274df")   
commit_oid = Oid(hex="d390303b28dabbb91b2d32016a4f72da478733b9")
                                                                
# As documented, symbolic refs resolve to a commit object.
# But the ref target differs from the returned object. Is this the desired behavior?
obj, ref = repo.resolve_refish("v6.12.1")             
assert isinstance(obj, Commit)                                  
assert ref.target != obj.id
assert ref.target == tag_oid                               

# Contrary to the docstring and typing hint, this returns a Tag object.                                                                
obj, ref = repo.resolve_refish(str(tag_oid))                    
assert isinstance(obj, Tag)                                     
assert ref is None

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en el punto de entrada Repository.resolve_refish e inspecciona cómo se resuelven las referencias simbólicas y los ID de objetos directos. Busca las pruebas existentes que cubran objetivos Commit, Tag y ref; después, confirma con los maintainers el contrato de retorno previsto. La tarea estará terminada cuando el comportamiento documentado y tipado coincida con el comportamiento verificado y exista cobertura de regresión para los dos ejemplos.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
git, python
Área
tooling
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Activo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.