Skip to content

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

@tomaszpietruszka-globality

Description

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions