libgit2 / libgit2/pygit2

Suggestion: better handling of `repo.set_head(pygit2.Commit)`

Ouverte
#750 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
1.7k
Forks
408
Merge moyen
2 j 57 min
PR mergées (30 j)
7

Description

I have tried to emulate git checkout --detach <commit> in pygit2, to create detached HEAD checkout, and I did come up with the following rough equivalent (though the following does not uses transactions as git does):

rev = repo.revparse_single(commit_name)
repo.checkout_tree(rev)
repo.set_head(rev.id)

However when I tried to use simply repo.set_head(rev), I got the following error:

TypeError                                 Traceback (most recent call last)
<ipython-input-35-9612528ec0ac> in <module>()
----> 1 repo.set_head(rev)

/usr/lib/python2.7/dist-packages/pygit2/repository.pyc in set_head(self, target)
    293
    294         # if it's a string, then it's a reference name
--> 295         err = C.git_repository_set_head(self._repo, to_bytes(target))
    296         check_error(err)
    297

TypeError: initializer for ctype 'char *' must be a cdata pointer, not _pygit2.Commit

It would be nice if pygit2.Commit object was automatically peeled, but if it is decided to be not good idea, then what it needs is more user-friendly error message than the one above.


pygit2 0.26.0

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par Repository.set_head dans la traceback de repository.py et comparez le flux affiché de revparse_single, checkout_tree et C.git_repository_set_head. Vérifiez dans les tests ou la documentation existants quels sont les types de cibles acceptés ; c'est terminé lorsque le comportement d'entrée de Commit est établi et couvert, avec notamment un message d'erreur clair s'il reste non pris en charge.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
git, python
Domaine
tooling
Type d'issue
Fonctionnalité
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.