как получить количество коммитов в Bitbucket, используя его API

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


person benzo    schedule 24.06.2014    source источник


Ответы (2)


Я предполагаю, что под «завершенными кодами» вы подразумеваете «наборы изменений». Из документации REST API Bitbucket:

Получает список наборов изменений, связанных с репозиторием. По умолчанию этот вызов возвращает 15 самых последних наборов изменений. Он также возвращает количество, которое представляет собой общее количество наборов изменений в репозитории. Частные репозитории требуют аутентификации вызывающего абонента.

Используйте следующий URL-адрес (измените «имя пользователя» и «репозиторий» на свои):

https://bitbucket.org/api/1.0/repositories/username/repository/changesets?limit=0

Для моего тестового репо это возвращает:

{"count": 2, "start": null, "limit": 0, "changesets": []}

Count — это общее количество наборов изменений. 'limit=0' означает, что вы получите обратно только 'count', а не отдельные детали 'changeset'.

Изменить:

Чтобы получить коммиты во всех репозиториях, потребуются некоторые сценарии. Я использовал эту Java-программу, чтобы получить все коммиты для пользователя во всех репозиториях:

Требуются эти банки в пути к классам

-

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;


public class BitBucket {

public static void main(String[] args) throws Exception {
    String username = "YOUR_USERNAME";
    String password = "YOUR_PASSWORD";
    String url = "https://bitbucket.org/api/2.0/repositories/"+username;

    HttpClient client = new DefaultHttpClient();

    JSONParser parser = new JSONParser();

    Object obj = parser.parse(processRequest(url, username, password, client));

    JSONObject jsonObject = (JSONObject) obj;

    JSONArray array = (JSONArray) jsonObject.get("values");
    Set<String> repoNames = new HashSet<>();
    for(int i = 0; i < array.size(); i++){
        repoNames.add(((JSONObject) array.get(i)).get("name").toString());
    }

    long commitCount = 0;
    for(String repoName : repoNames){
        String repoUrl = "https://bitbucket.org/api/1.0/repositories/"+username + "/" + repoName.toLowerCase() + "/changesets?limit=0";
        Object commitobj = parser.parse(processRequest(repoUrl, username, password, client));

        commitCount += (Long) ((JSONObject) commitobj).get("count");
    }
    System.out.println("Total Commit Count across "+repoNames.size() +" repos for user "+username+" = " + commitCount);

}

private static String getBasicAuthenticationEncoding(String username, String password) {

    String userPassword = username + ":" + password;
    return new String(Base64.encodeBase64(userPassword.getBytes()));
}

public static String processRequest(String url, String username, String password, HttpClient client) throws ClientProtocolException, IOException{
    HttpGet request = new HttpGet(url);

    request.addHeader("Authorization", "Basic " + getBasicAuthenticationEncoding(username, password));

    HttpResponse response = client.execute(request);

    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + 
            response.getStatusLine().getStatusCode());

    BufferedReader rd = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

    return result.toString();
}

}
person GoldenJam    schedule 24.06.2014
comment
Эй, спасибо за ответ, быстрый вопрос, так что произойдет, если вы хотите увидеть все репозитории для учетной записи. Я не хочу заполнять {/repository/} для каждого проекта, мне нужны все репозитории одновременно, можно ли это сделать? - person benji_r; 25.06.2014
comment
См. отредактированный ответ, включающий дополнительную информацию о сценарии для всех репозиториев. - person GoldenJam; 27.06.2014

Я только что расширил этот скрипт с форума Atlassian для API v2.0, который работает в 2021 году. Вы можете использовать его из: https://github.com/bc67da8d/bitbucket-commit-counter

person Hà Mã Tím    schedule 04.02.2021