gerrit-rust 0.1.14

Rust client to gerrit
Documentation

Introduction

gerrit-rust is a console client for gerrit written in rust. This is a rust learner project. Have patience with me :-)
I'm happy about every PR, but I will ask questions about changes to learn from your knowledge.

Dependency

  • A installed git binary in $PATH
  • gerrit server with installed download-plugin

Design

Some design considarations here.

  • semver at version 1.0.0. Before this version no semver!

  • remove external depency to host [ ] git binary [ ] gerrit with download plugin

  • 0.1.5 Use of curl-rs as http client

  • 0.1.0 Use a config file .ggr.config in TOML format

    • api: base url with schema (http)

    • 0.1.3 User authentication (deprecated since 0.1.9)

      • username: username for login
      • password: password for login [x] 0.1.9 only .netrc settings are respected for username and password. u/p in config file are ignored
    • root: true if this is the uppermost project of all repositories underneath

    • Authentication (e.g.: digest, basic)

      • digest and basic are supported. Current implementation calls both. First on is basic and second one is digest.
    • Consider to configure via config file or put all settings into as entries in .git/config.
      The values are same for config file and git-config approach. For the git-config we use ggr- as a prefix.

    • provide a configuration frontend

      • ggr config set baseurl 'http://localhost': set new baseurl
      • ggr config unset -C project1 root: remove root in project1 repository
      • ggr config set root: set root for current repository
      • 0.1.0 ggr config list: list all options
        • ... with origin of setting
      • ggr config generate --base <...> ...: generates a .ggr.config file
    • 0.1.9 Use $HOME/.netrc file to get username and password.

  • manage of topics over more than one repository (git submodules like)

    • 0.1.0 ggr topic create <BRANCHNAME> [-r sub:rev]
      Create branch at main folder and specified subfolders. If a branch with same name exists it isn't touched. rev is the reference where branch should created Defaults to orign/master. For base folder use -r ..

      • execute in subfolders: create branch in this repo and in baserepo.
      • Add -R option to create branch on base and all subrepositories.
    • 0.1.0 ggr topic forget <BRANCHNAME> [-R]
      Delete a branch at mainfolder and and with -R in all subfolders.

      • Add option -s in conjunction with -R to remove all branches recursive which have no commit and the repositories are clean. Warn unclean repositories/branches.
    • ggr topic list -s
      List all development branches and the repositories. With -s it includes the commits in the branch like git submodule summary.

    • 0.1.8 ggr topic checkout <BRANCHNAME>
      Checkout a branch on all repositories.

      • 0.1.8 first check base folder if checkout happened sync all submodules than checkout changes for topic on subfolders
    • ggr topic push [-b] [<BRANCHNAME>]
      Push changes to gerrit. Without -b its pushed to gerrit. With option -b its pushed to a build server. Without branchname the current branch is pushed.

    • 0.1.7 ggr topic pull ...
      same as ggr topic fetch. This sub function is renamed because fetch is more in line with git speak than pull.

    • 0.1.8 ggr topic fetch [-f] [-b branchname] <topicname>
      fetch latest version of commits for a topic. Create for all changes a branch with the patch identifier as name, or with -b with a given branchname. [x] 0.1.9 Add tracking information via --track <branch> option.

    • ggr topic reviewer [<BRANCHNAME>] [-r <MAIL>] [-c <MAIL>] [-t <MAIL>]
      Add reviewer (-r), CC: (-c) or TO: (-t) at topic push time. The information is put to branch config like config.BRANCHNAME.ggr-re MAIL. Config lineentries start with ggr-[cc/to/re]. Without any options the current reviewer/to/cc showed for current branch. Without BRANCHNAME te current branch is taken.

    • ggr topic verify [<TOPICNAME>] <LABEL> [<MESSAGE>] Verify all commits of a topic TOPICNAME with a label LABEL (-2|-1|0|+1|+2|=) and a optional message. Be aware the messages is appended as note on ALL commits in this topic.

      • Label = means not changing the current review label value, only a append a message
  • Other Ideas

    • 0.1.9 implement a log mechanism to get debugging information via loglevel switch

    • 0.1.0 ggr changes query <QUERY> query a searchstring to gerrit server. Use as QUERY the same syntax as in gerrit web frontend. eg

      • 0.1.7 Add --regexp-selector to show only keys selected by regular expression. This remove the --fields selector introduced in 0.1.4.

      • 0.1.6 Add a --human option to print it in human readable format.

      • Add --header to get a header line with field names

      • 0.1.4 Add --field-list to get all selectable fields, usable for --fields option on a second call.

      • 0.1.4 Add --raw for json in raw format. Usable for pretty printer over pipe

      • 0.1.4 Option -o/--ofields to get additional information of changes back (like REVISION etc ...)

      Examples:

      • ggr changes query status:open is:watched n:2: query open changes which watched flag.
    • create a helper script for setup of development environment

      • docker based gerrit server
        found docker image docker pull docker.io/fabric8/gerrit:latest
      • setup password and username for gerrit
      • autogenerate git repositrories and submodules
      • setup gerrit for this repositories
      • auto push master branches to gerrit
    • ggr stat [-F <date>] [-T <data>]
      some statistics like opened and closed review since a week or between a timespan. via iso-8601 like date -Is.

      Examples:

      • ggr stat -F 1w: last week to now
      • ggr stat -F 2015-12-31 -T 2016-02-01: from 01.01.2016T00:00 till 01.02.2016T23:59:59
      • ggr stat -F 2016-01-01: from 02.01.2016T00:00 till now
      • ggr stat -T 2016-02-01: from begin of gerrit usage till 01.02.2016T23:59:59
    • reviewer per commit

    • reviewer per repository

    • status of branches
      shows status of a branch (remote and local like git remote show ...

      • ggr status [<BRANCHNAME>]
    • Support for .repo folder

    • Consider to use https://github.com/gsingh93/trace

    • Consider to use https://github.com/ticki/termion

    • Document gerritlib::call module

    • 0.1.5 Add .travis.yml

gerrit demo server local on your host via docker

This creates a dockercontainer which is connectable via http://localhost:8080. The server is setup for development and all accounts can do all things. It generate or use a DOCKER-FOR-GERRIT folder containing of settings, repositories and ssh-keys.

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

useful links

License

Licensed under