[PYTHON] Téléchargez le lien brut du référentiel privé GitLab avec CLI

Download gitlab private repository's raw link using CLI

À partir de GitLab 11.5.1, vous ne pouvez plus télécharger de liens bruts en utilisant l'en-tête PRIVATE-TOKEN (cf https://about.gitlab.com/releases/2018/11/28/security-release-gitlab-11 -dot-5-dot-1-published / Application incorrecte de la portée du jeton). Lorsque le lien brut a été transmis, j'ai analysé et converti l'URL afin de pouvoir également télécharger le fichier lui-même.

#!/usr/bin/python
#gitlab_download

import os
import sys
import json
import shutil
from contextlib import closing

if sys.version_info[0]>=3:
    import http.client as httplib
    from urllib.request import urlparse
    binstdout = sys.stdout.buffer
else:
    import httplib
    from urlparse import urlparse
    binstdout = sys.stdout

url = urlparse(sys.argv[1])
a=url.path[1:].split('/')
projname='/'.join([a[0],a[1]])
revision=a[3]
filepath='%2F'.join(a[4:])

token = os.environ.get('gitlab_token_'+url.hostname.replace('.','_'),'')

with closing(httplib.HTTPSConnection(url.hostname,port=url.port)) as https:
    https.request('GET','/api/v4/projects?search_namespaces=true&search='+projname,None,{'PRIVATE-TOKEN':token})
    resp = https.getresponse()
    jso = json.loads(resp.read())
    proj = next(e for e in jso if e['path_with_namespace']==projname)
    resolvedPath = '/api/v4/projects/'+str(proj['id'])+'/repository/files/'+filepath.replace('/','%2F')+'/raw?ref='+revision
    sys.stderr.write('resolved: https://%s%s\n'%(url.netloc,resolvedPath))
    https.request('GET',resolvedPath,None,{'PRIVATE-TOKEN':token})
    resp = https.getresponse()
    #print(resp.getheaders())
    shutil.copyfileobj(resp,binstdout)

200602

Changé pour donner search_namespaces = true lors de la conversion du nom de projet en ID de projet.

Recommended Posts

Téléchargez le lien brut du référentiel privé GitLab avec CLI
Téléchargez le fichier déployé avec appcfg.py
Exécutez IDCF Cloud CLI sur Docker
Alignez la taille de la barre de couleurs avec matplotlib
Vérifier l'existence du fichier avec python
Télécharger des fichiers sur le Web avec Python
La troisième nuit de la boucle avec pour
La deuxième nuit de la boucle avec pour
Créer un référentiel privé avec AWS CodeArtifact
Téléchargez le fichier avec PHP [En construction]
Compter le nombre de caractères avec écho