Bitbucket Rest API для получения имен репо в рамках проекта

Я пытаюсь получить имена репо в рамках проекта, используя API Bitbucket. Текущая ссылка на документацию говорит об использовании

curl -u имя пользователя: пароль http://${bitbucket-url}/rest/api/1.0/projects/${projectkey}/repos/

Ответ:

{ size: 1, limit: 25, isLastPage: true, values: [ { slug: my-repo, id: 1, name: My repo, scmId: git, state: AVAILABLE, statusMessage: Available, forkable: true, project: { key: PRJ, id: 1, name: My Cool Project, description: Описание моего классного проекта., public: true, тип: NORMAL, ссылки: { self: [ { href: http://link/to/project } ] } }, public: true, links: { clone: ​​[ { href: ssh://git@/PRJ/my-repo.git, name: ssh }, { href: https:///scm/PRJ/my-repo.git, имя: http } ], self: [ { href: http://link/to/repository } ] } } ], start: 0 }

Но мне нужно только название репозитория из ответа


person mightybond    schedule 17.02.2021    source источник
comment
Вы не можете напрямую получить имя репозитория в ответе JSON. В нем также должны быть доступны другие метаданные. Вы можете справиться с этим с помощью скрипта Python, где вы можете получить необходимую информацию из ответа. Скрипт выложу в ответ.   -  person B. Akshay    schedule 25.02.2021


Ответы (2)


from subprocess import call
import configparser
import subprocess
import json
import os

base_dir = os.getcwd()
DETACHED_PROCESS = 0x00000008

cmd = 'curl --url "' + bb_url + '?pagelen=100&page=' + str(page) + '" --user ' + bb_user + ':' + bb_pwd + ' --request GET --header "Accept: application/json"'
output = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=DETACHED_PROCESS).communicate()
datastore = json.loads(output[0].decode("utf-8"))
size = datastore.get("size")
values = datastore.get("values")
if(len(values)) == 0:
    break
for repos in range(size):
    repo_name = values[repos]["values"]["slug"]
    f_initial = open (base_dir+"\\repositoryList.txt", "a+")
    f_initial.write(repo_name)
    f_initial.write("\n")
    f_initial.close()
page = page + 1

Этот скрипт поможет вам получить список всех репозиториев в вашем проекте и записать его в файл репозиторийList.txt.

person B. Akshay    schedule 25.02.2021

С помощью команды bash

repoNamesJson=$(curl -D- -X GET -H "Authorization: Basic <encoded user pasword here>" -H "Content-Type: application/json" https://yourstash/rest/api/1.0/projects/ad/repos?limit=100000)
repoNames=$(echo $repoNamesJson | awk -v RS=',' '/{"slug":/ {print}' | sed -e 's/{"slug":/''/g' | sed -e 's/"/''/g')
echo $repoNames

С библиотекой python-stash

import stashy

bitbucket = stashy.connect("host", "username", "password")
projects = bitbucket.projects.list()
repos = bitbucket.repos.list()

for project in projects:
    for repo in bitbucket.projects["%s" % (project["key"])].repos.list():
        print(repo["name"])
        print(repo["project"]['key'])
person motodiver    schedule 08.07.2021