#curl #gerrit #api-bindings #cli #api

app gerrit-rust

gerrit的Rust客户端

19次发布

使用旧的Rust 2015

0.1.24 2018年2月5日
0.1.23 2017年8月12日
0.1.19 2017年3月29日
0.1.8 2016年11月14日
0.1.2 2016年7月31日

#3 in #gerrit

每月下载 38次

MPL-2.0 许可证

155KB
2.5K SLoC

Build Status

简介

gerrit-rust 是用Rust编写的gerrit控制台客户端。这是一个 rust学习者 项目。请对我有耐心 :-)

目前与Gerrit V02.09和V02.13进行了测试。

贡献

常见的GitHub工作流程:fork、clone、branch、commit、push然后pullrequest。我对每个PR都很高兴,但我会就变化提问,以便从您的知识中学习。

依赖项

  • git 二进制文件中已安装 $PATH
  • 已安装下载插件的gerrit服务器

手册 & 建议

此处有一些设计考虑。已实现的功能用 [x] 标记。所有其他想法都是待办事项,并用 [ ] 标记。

  • semver版本为1.0.0。在这个版本之前没有semver!

  • 从宿主机删除外部依赖

    • git二进制文件
    • 带有下载插件的gerrit
  • 管理多个存储库(如git子模块)中的主题

    • 0.1.0 ggr topic forget <BRANCHNAME> [-R]
      在主文件夹中删除分支,并在所有子文件夹中使用 -R

      • -s 选项与 -R 结合使用,以递归删除所有没有提交的分支和仓库,并对不干净的仓库/分支发出警告。
    • 0.1.8 ggr topic checkout <BRANCHNAME>
      在所有仓库上检出分支。

      • 0.1.8 首先检查基本文件夹,如果检出发生同步所有子模块,然后在子文件夹中检出主题更改
    • 0.1.7 ggr topic pull ...
      等同于 ggr topic fetch。此子函数被重命名,因为 fetch 与git术语比 pull 更一致。

    • 0.1.8 ggr topic fetch [-f] [-b branchname] <topicname>
      获取特定主题的最新提交版本。为所有更改创建一个以补丁标识符命名的分支,或使用 -b 与指定的分支名称。

      • 0.1.9 通过 --track <branch> 选项添加跟踪信息。
      • 0.1.14 添加 --closed 选项以拉取已关闭(合并)的主题。
      • 0.1.21 添加 - 获取主题的历史记录。见 topic history
    • 0.1.21 ggr topic history <topicname>
      将所有更改的所有版本作为标签获取。标签格式为 ggr/<topicname>/<topicid>。其中 topicid 是补丁的参考编号加版本。

    • 0.1.17 ggr topic reviewer [<TOPIC>] [-r <+/-MAIL>,...]
      添加(+)或删除(-)审阅者(-)到主题。如果没有选项,我们将收到该主题上所有审阅者的列表。

      • 0.1.17 -/--verbose 用于详细查看批准情况
      • 没有 TOPIC 时,使用基础和子模块上的实际主题 (!=master)。
      • 添加 --format 选项用于输出格式化。使用 rust 变量和格式化信息,如 {email}{email:15.2}
    • 0.1.18 ggr topic abandon|restore [<TOPIC>]
      放弃/恢复一个完整主题。

      • 没有 TOPIC 时,使用当前主题
      • 0.1.18 [-m <MESSAGE>] 向所有更改添加放弃信息
      • [-n <NONE|OWNER|REVIEWERS|ALL>] 通知一组账户关于此放弃操作或不要通知(通过 NONE)。默认为 ALL
    • 0.1.19 ggr topic verify [<TOPICNAME>] [-c <code-review>] [-l "<revie-label>"] [-m <MESSAGE>]
      Gerrits 标签可以在服务器端进行配置。通过 -l 选项可以访问标签。(例如,-l "Code-Review:2")。选项 -c <VALUE> 是一个方便的选项,用于 -l "Code-Review:<VALUE>"。当前,标签的可能值仅为 -2/-1/0/1/2。另外,可以在主题的所有提交上附加消息。

      • 0.1.21 没有选项时,将打印审查过程的概述
  • 查询变更

    • 0.1.0 ggr changes query <QUERY> 查询搜索字符串到 gerrit 服务器。使用与 gerrit 网络前端相同的语法作为 QUERY。例如

      • 0.1.7 添加 --regexp-selector 以仅显示由正则表达式选择的键。这删除了 0.1.4 中引入的 --fields 选择器。

      • 0.1.6 添加一个 --human 选项以打印人类可读格式。

      • 0.1.4 添加 --field-list 以获取所有可选字段,可用于第二次调用时的 --fields 选项。

      • 0.1.4 添加 --raw 以获取原始格式的 json。可用于通过管道进行漂亮的打印。

      • 0.1.4 选项 -o/--ofields 以获取更改的额外信息(如 REVISION 等 ...)

      示例

      • ggr changes query status:open is:watched n:2:查询标记为已查看的打开更改。
  • 0.1.5 使用 curl-rs 作为 http 客户端

  • 0.1.0 使用 TOML 格式的配置文件 .ggr.config

    • api:带有模式的基准 URL(http)

    • 0.1.3 用户身份验证(自 0.1.9 起已弃用)

      • username:登录用户名
      • password:登录密码 [x] 0.1.9 仅尊重 .netrc 设置的用户名和密码。配置文件中的 u/p 被忽略
    • root:如果是所有存储库下最高级别的项目则为 true

    • 身份验证(例如:摘要,基本)

      • digestbasic 受支持。当前实现调用两者。第一个是 basic,第二个是 digest
    • 考虑通过配置文件进行配置或将所有设置放入 .git/config 中的条目。
      配置文件和 git-config 方法中的值相同。对于 git-config,我们使用 ggr- 作为前缀。

    • 提供一个配置前端

      • ggr config set baseurl 'http://localhost':设置新的 baseurl
      • ggr config unset -C project1 root:从 project1 仓库中删除 root
      • ggr config set root:为当前仓库设置 root
      • 0.1.0 ggr config list:列出所有选项
        • ... 以及设置的来源
      • ggr config generate --base <...> ...:生成一个 .ggr.config 文件
    • 0.1.9 使用 $HOME/.netrc 文件获取用户名和密码。

  • 添加一个 --dry-run 选项来打印我们想要执行的操作,但实际上不执行

    • 更改获取
    • gerritapi 更改放弃
    • gerritapi 更改创建
    • 主题获取
    • 主题放弃
    • 主题检出
    • 主题创建
    • 主题获取
    • 主题忘记
    • 0.1.21 主题历史
    • 主题恢复
    • 主题审阅者
    • 主题验证
  • 库功能

    • 0.1.16 CLI 需要一个子命令来完成低级任务 -> gerritapi

    • 0.1.0 实现了 http 请求和响应的基础

    • 构建一个功能完整的库来与 gerrit 服务器协同工作

      • 访问端点
      • 账户端点
      • 更改端点
        • 0.2.0 创建更改
        • 0.2.0 查询更改
        • 0.2.4 获取更改
        • 0.2.4 获取更改详情
        • 获取主题
        • 设置主题
        • 删除主题
        • 放弃更改
        • 0.2.2 恢复更改
        • 0.2.2 变基更改
        • 移动更改
        • 撤回更改
        • 提交更改
        • 一起提交的更改
        • 发布草稿更改
        • 删除草稿更改
        • 获取包含项
        • 索引更改
        • 列出更改评论
        • 列出更改草稿
        • 检查更改
        • 修复更改
      • 审阅者端点
        • 0.2.1 列出审阅者
        • 建议审阅者
        • 0.2.1 获取审阅者
        • 0.2.1 添加审阅者
        • 0.2.1 删除审阅者
        • 列出投票
        • 删除投票
      • 修订端点
        • 获取提交
        • 获取修订动作
        • 获取审阅
        • 获取相关更改
        • 0.2.3 设置审阅
        • 变基修订
        • 提交修订
        • 发布草稿修订
        • 删除草稿修订
        • 获取补丁
        • 获取可合并
        • 获取提交类型
        • 测试提交类型
        • 测试提交规则
        • 列出修订草稿
        • 创建草稿
        • 获取草稿
        • 更新草稿
        • 删除草稿
        • 列出修订评论
        • 获取评论
        • 列出文件
        • 获取内容
        • 下载内容
        • 获取差异
        • 获取归咎
        • 设置已审阅
        • 删除已审阅
        • 选择修订
      • 配置端点
        • 0.2.0 获取版本
        • 获取服务器信息
        • 确认电子邮件
        • 列出缓存
        • 缓存操作
        • 获取缓存
        • 刷新缓存
        • 获取摘要
        • 列表功能
        • 列出任务
        • 获取任务
        • 删除任务
        • 获取顶级菜单
        • 获取默认用户偏好设置
        • 设置默认用户偏好设置
        • 获取默认差异偏好设置
        • 设置默认差异偏好设置
      • groups端点
      • plugins端点
      • projects端点
  • 已移除的功能

    • ggr主题创建<BRANCHNAME> [-r sub:rev]
      自0.1.22版本起已移除,请使用以下命令代替:git submodule foreach 'git branch <topicname>; true'

      旧功能

      在主文件夹和指定的子文件夹中创建分支。如果存在同名分支,则不进行操作。 rev 是创建分支时应使用的引用,默认为 orign/master。对于基本文件夹使用 -r .

  • 其他想法

    • 0.1.9 实现日志机制,通过日志级别开关获取调试信息

    • 0.1.20 ggr changes fetch CHANGEID 获取changeid CHANGEID 及其祖先。分支名称为 CHANGEID 名称。

    • 0.1.16 支持多个gerrit服务器

    • 0.1.14 创建用于设置开发环境的辅助脚本

      • 基于docker的gerrit服务器
        找到docker镜像 docker pull openfrontier/gerrit
      • 设置gerrit的密码和用户名
      • 自动生成git仓库和子模块
      • 为这些仓库设置gerrit
      • 自动将master分支推送到gerrit
    • ggr统计[-F<日期>] [-T<数据>]
      一些统计信息,如一周内或一段时间内打开和关闭的审查。通过iso-8601类似 date -Is

      示例

      • ggr stat -F 1w:从上周到现在
      • ggr stat -F 2015-12-31 -T 2016-02-01:从2016年1月1日T00:00到2016年2月1日T23:59:59
      • ggr stat -F 2016-01-01:从2016年2月1日T00:00到目前
      • ggr stat -T 2016-02-01:从开始使用gerrit到2016年2月1日T23:59:59
    • ggr主题列表-s
      列出所有开发分支和仓库。使用 -s 包括分支中的提交,如 git submodule summary

    • ggr主题推送[-b] [<BRANCHNAME>]
      将更改推送到gerrit。如果没有 -b,则推送到gerrit。使用选项 -b,则推送到构建服务器。如果没有分支名称,则推送当前分支。

    • ggr主题重命名OLDTOPIC TOPIC
      将OLDTOPIC重命名为TOPIC

      • 使OLDTOPIC可选,当前主题将被重命名
    • 每个提交的审查者

    • 每个仓库的审查者

    • 分支状态
      显示分支状态(远程和本地,例如 git remote show ...

      • ggr 状态[<BRANCHNAME>]
    • 支持 .repo 文件夹

    • 考虑使用 https://github.com/gsingh93/trace

    • 考虑使用 https://github.com/ticki/termion

    • 0.1.11 文档 gerritlib::call 模块

    • 0.1.5 添加 .travis.yml

使用 docker 在本地主机上启动 gerrit 演示服务器

这会创建一个可以通过 https://127.0.0.1:8080 连接的 docker 容器。服务器已设置为开发环境,所有账户都可以执行所有操作。它生成或使用一个包含设置、存储库和 ssh 密钥的 DOCKER-FOR-GERRIT 文件夹。

docker run --rm -it \
           -h localhost
           -p 8080:8080 -p 29418:29418 \
           -v /development/projects/DOCKER-FOR-GERRIT:/var/gerrit/review_site \
           --name gerrit \
           openfrontier/gerrit:latest

许可证

许可下

依赖

~22–32MB
~590K SLoC