libgit2 / libgit2/pygit2

Repository.resolve_refish does not return a commit if given annotated tag SHA

Offen
#1,082 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
1.7k
Forks
408
Ø Merge
2 T. 57 Min.
Gemergte PRs (30 T.)
7

Beschreibung

The repository.resolve_refish function is meant to return a commit object as the first element of the tuple ( source ).

However, if given a SHA of an annotated tag, it returns a tag object instead, which causes problems downstream.

The SHA of the target commit is available under result.target (see below)

How to reproduce:

Execute the following (clone the pygit2 repo into a temporary dir, create an annotated tag):

import pygit2
from pathlib import Path
import tempfile

repo_dir = tempfile.TemporaryDirectory()
repo_path = Path(repo_dir.name)

repo = pygit2.clone_repository("https://github.com/libgit2/pygit2.git", repo_path)
head_sha = repo.head.peel().id

old = repo.create_tag(
    'test_annotated_tag',
    head_sha,
    pygit2.GIT_OBJ_COMMIT,
    pygit2.Signature('John Doe', 'jdoe@example.com', 12347, 0),
    'message'
)

commit, ref = repo.resolve_refish(str(old))

Then we can investigate the results:

In [2]: commit  # not really a commit!
Out[2]: <pygit2.Object{tag:66986bf4eb1e47c3049f5a146609f0aa7b64757d}>

In [3]: commit.target
Out[3]: e2c0fdbfbd7f84374f8c7a3df256547b7ea99192

In [4]: head_sha
Out[4]: e2c0fdbfbd7f84374f8c7a3df256547b7ea99192

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in pygit2/repository.py bei der resolve_refish-Implementierung, auf die im Issue verwiesen wird. Reproduziere den Fall eines SHA eines annotierten Tags mit dem bereitgestellten Skript und verfolge anschließend das zurückgegebene Objekt und sein target. Erledigt ist dies, wenn das erste Tupel-Element für diesen Fall ein Commit-Objekt ist und das bestehende Verhalten für andere refish-Eingaben erhalten bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
git, python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.