使用uwolfer gerrit-rest-java-client获取Gerrit信息

简介: 使用uwolfer gerrit-rest-java-client获取Gerrit信息

使用uwolfer gerrit-rest-java-client获取Gerrit信息

使用Gerrit来做代码管理工具的话,难免要调用Gerrit的API。

Gerrit rest api

我们来看个例子,体会下gerrit rest api的交互过程:

请求如下, changes是API,q字符串想必gerrit的用户是熟悉的,n是限定个数:

GET /changes/?q=status:open+is:watched&n=2 HTTP/1.0

响应信息例:

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
      "project": "demo",
      "branch": "master",
      "change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
      "subject": "One change",
      "status": "NEW",
      "created": "2012-07-17 07:18:30.854000000",
      "updated": "2012-07-17 07:19:27.766000000",
      "mergeable": true,
      "insertions": 26,
      "deletions": 10,
      "_number": 1756,
      "owner": {
        "name": "John Doe"
      },
    },
    {
      "id": "demo~master~I09c8041b5867d5b33170316e2abc34b79bbb8501",
      "project": "demo",
      "branch": "master",
      "change_id": "I09c8041b5867d5b33170316e2abc34b79bbb8501",
      "subject": "Another change",
      "status": "NEW",
      "created": "2012-07-17 07:18:30.884000000",
      "updated": "2012-07-17 07:18:30.885000000",
      "mergeable": true,
      "insertions": 12,
      "deletions": 18,
      "_number": 1757,
      "owner": {
        "name": "John Doe"
      },
      "_more_changes": true
    }
  ]

gerrit的网站上有Rest API的指南和文档。指南:https://gerrit-review.googlesource.com/Documentation/dev-rest-api.html,文档:https://gerrit-review.googlesource.com/Documentation/rest-api.html

uwolfer gerrit rest java client

我们要编程调用gerrit api时发现,光是pojo对象就得写好多。这样例行公事的工作当然是交给开源库来实现最划算了。
比如我们可以使用 uwolfer gerrit rest java client.

引入依赖

大家的后端工程应该是使用maven管理的,我们就先引入maven依赖:

<dependencies>
    <dependency>
        <groupId>com.urswolfer.gerrit.client.rest</groupId>
        <artifactId>gerrit-rest-java-client</artifactId>
        <version>0.8.16</version>
    </dependency>
</dependencies>

鉴权

下一步我们就可以调用gerrit-rest-java-client封装的API来调用gerrit rest api了。
首先要鉴权,记得gerrit的设置中有一项是HTTP password么,这里就该它发挥作用了。

        GerritRestApiFactory gerritRestApiFactory = new GerritRestApiFactory();
        GerritAuthData.Basic authData = new GerritAuthData.Basic("http://gerrit网址", "用户名", "HTTP password");
        GerritApi gerritApi = gerritRestApiFactory.create(authData);

访问gerrit数据

鉴权成功之后,我们就可以通过gerritApi为所欲为了。

例1,查询10个status为merged的change:

            List<ChangeInfo> changes = gerritApi.changes().query("status:merged").withLimit(10).get();

            for (ChangeInfo ci : changes) {
                System.out.println("Change ID:"+ci.changeId);
                System.out.println("Project:"+ci.project);
                System.out.println("Branch:"+ci.branch);
                System.out.println("Subject:"+ci.subject);
                System.out.println("=======================");
            }

运行例:

Change ID:I5c490fba0f109824ae5c5cd91e7222787da9f41d
Project:xxx
Branch:yyy
Subject:zzz

例2,遍历当前gerrit下都有些什么工程

            List<ProjectInfo> projects = gerritApi.projects().list().get();

            for (ProjectInfo pi: projects){
                System.out.println(pi.name);
                System.out.println(pi.description);
                System.out.println("~~~~~~~~~~~~~~");
            }

输出例:

code/device/asus/fugu
null

code/device/asus/fugu-kernel
null

code/device/common
null

code/device/coolpad/common
null

完整代码

下面是上面两例的完整代码:
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.alios.basic.test</groupId>
    <artifactId>TestGerrit3</artifactId>
    <version>1.0.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>com.urswolfer.gerrit.client.rest</groupId>
        <artifactId>gerrit-rest-java-client</artifactId>
        <version>0.8.16</version>
    </dependency>
</dependencies>

</project>

Java代码:

package cn.alios.basic.tools;

import com.google.gerrit.extensions.api.GerritApi;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.urswolfer.gerrit.client.rest.GerritAuthData;
import com.urswolfer.gerrit.client.rest.GerritRestApiFactory;

import java.util.List;

public class TestGerrit {
    public static void main(String[] args) {
        GerritRestApiFactory gerritRestApiFactory = new GerritRestApiFactory();
        GerritAuthData.Basic authData = new GerritAuthData.Basic("http://gerrit.com", "user", "HttpPassword");
        GerritApi gerritApi = gerritRestApiFactory.create(authData);
        try {
            List<ChangeInfo> changes = gerritApi.changes().query("status:merged").withLimit(10).get();

            for (ChangeInfo ci : changes) {
                System.out.println("Change ID:"+ci.changeId);
                System.out.println("Project:"+ci.project);
                System.out.println("Branch:"+ci.branch);
                System.out.println("Subject:"+ci.subject);
                System.out.println("=======================");
            }

            List<ProjectInfo> projects = gerritApi.projects().list().get();

            for (ProjectInfo pi: projects){
                System.out.println(pi.name);
                System.out.println(pi.description);
                System.out.println("~~~~~~~~~~~~~~");
            }

        } catch (RestApiException e) {
            e.printStackTrace();
        }
    }
}
目录
相关文章
|
20天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
34 3
|
24天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
45 2
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
156 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
35 1
|
3月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
39 3
|
3月前
|
Java 编译器 测试技术
|
4月前
|
前端开发 Java
Java高手都在用的秘籍:自定义异常,让错误信息说话!
Java高手都在用的秘籍:自定义异常,让错误信息说话!
165 1
|
4月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
4月前
|
数据采集 机器学习/深度学习 前端开发
Java爬虫中的数据清洗:去除无效信息的技巧
Java爬虫中的数据清洗:去除无效信息的技巧
|
4月前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储