Pygithub: [Exemple] Exemple complet de validation de plusieurs fichiers

Créé le 30 juil. 2020  ·  5Commentaires  ·  Source: PyGithub/PyGithub

Je passe de gitlab à github.
Nous utilisons https://github.com/python-gitlab/python-gitlab comme bibliothèque
Pour faire un commit pour plusieurs fichiers, nous utilisons exactement cet exemple : https://python-gitlab.readthedocs.io/en/stable/gl_objects/commits.html

Je trouve que create_git_commit ferait la même chose dans github mais manque de docs.
Quelqu'un pourrait-il aider à fournir un exemple de création de ces états-majors Tree etc.?

Merci beaucoup.

stale

Commentaire le plus utile

Voici un exemple complet extrait de mon utilisation réelle :
Je reçois beaucoup d'indices de ce https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446

Pour s'engager sur la branche master

import github
g = github.Github(base_url="https://git.mycompany.com/api/v3",login_or_token="mytoken")
repo = g.get_repo('myorg/myrepo')
# you can read file content into blob, here just use str for example
blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)
head_sha = repo.get_branch('master').commit.sha
base_tree = repo.get_git_tree(sha=head_sha)
tree = repo.create_git_tree([element1, element2], base_tree)
parent = repo.get_git_commit(sha=head_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
master_refs = self.github_repo.get_git_ref('heads/master')
master_ref.edit(sha=commit.sha)

Tous les 5 commentaires

enfin, je me retrouve avec le processus complet... j'espère partager plus tard...

Voici un exemple complet extrait de mon utilisation réelle :
Je reçois beaucoup d'indices de ce https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446

Pour s'engager sur la branche master

import github
g = github.Github(base_url="https://git.mycompany.com/api/v3",login_or_token="mytoken")
repo = g.get_repo('myorg/myrepo')
# you can read file content into blob, here just use str for example
blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)
head_sha = repo.get_branch('master').commit.sha
base_tree = repo.get_git_tree(sha=head_sha)
tree = repo.create_git_tree([element1, element2], base_tree)
parent = repo.get_git_commit(sha=head_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
master_refs = self.github_repo.get_git_ref('heads/master')
master_ref.edit(sha=commit.sha)

Ce problème a été automatiquement marqué comme obsolète, car il n'a pas eu d'activité récente. Il sera fermé s'il n'y a plus d'activité. Merci pour vos contributions.

Je voulais faire quelque chose de similaire (c'est-à-dire valider plusieurs fichiers à la fois), mais cette fois dans une branche. Ci-dessous, le code de travail (faites-moi savoir s'il peut être optimisé cependant)

import github
g = github.Github("mytoken")
repo = g.get_repo('myorg/myrepo')

blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)

head_sha = repo.get_branch('master').commit.sha

# everything above is identical to <strong i="6">@xpdable</strong> 
# but here I create the branch
branch = repo.create_git_ref(ref=f"refs/heads/branch-name", sha=head_sha)
branch_sha = repo.get_branch("branch-name").commit.sha

# similar to <strong i="7">@xpdable</strong> but replacing head_sha with branch_sha
base_tree = repo.get_git_tree(sha=branch_sha)
tree = repo.create_git_tree([configuration_element, stats_element], base_tree)
parent = repo.get_git_commit(sha=branch_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
branch_refs = repo.get_git_ref("heads/branch-name")
branch_refs.edit(sha=commit.sha)

# optional : open a PR with the new branch
repo.create_pull(title="PR title", body="PR body", base="master", head="branch-name")

Des conseils sur la façon de supprimer des fichiers dans le cadre de ces validations de fichiers multiples ?

Certains messages parlent de créer de nouveaux arbres avec des références à des chemins avec des sha nuls, ou de modifier des arbres existants, y compris. des idées sur la boucle et la recherche de toutes les références aux blobs supprimés ?

Cette page vous a été utile?
0 / 5 - 0 notes