# gri : Git Reduced Interface

`gri` is a CLI tool that **lists git reviews** from multiple servers
in a way that makes easier to to identify which one need you attention.

Currently supported backends are Gerrit and GitHub but it should be easy to
add others if needed.

![screenshot](https://sbarnea.com/ss/Screen-Shot-2020-09-18-10-41-05.06.png)

## Features

* combines results from multiple Gerrit or GitHub servers
* uses terminal clickable links to make it easy to access these reviews
* displays important metadata related to reviews in a compressed format
* reviews are sorted based on probablility of getting merged
* allows user to abandon very old reviews
* can be used to query:
  * already merged reviews
  * incoming reviews (where you are a reviewer)
  * reviewes created by other users than yourself
* produce HTML reports

## Installing

```bash
pip install gri
```

## Usage

You can just run `gri`, or `python -m gri` in order to get a list of your
current reviews, aslo known as outgoing reviews.

GRI uses a simple config file [`~/.config/gri/gri.yaml`][1] but when the file
is missing, it will try to load servers from [`~/.gertty.yaml`][2] in case you
have one.

```console
$ gri --help
Usage: gri [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...

Options:
  -a, --abandon              Abandon changes (delete for drafts) when they are
                              >90 days old and with negative score. Requires -f
                             to perform the action.
  -z, --abandon-age INTEGER  default=90, number of days for which changes are
                             subject to abandon
  -u, --user TEXT            Query another user than self
  -s, --server TEXT          [0,1,2] key in list of servers, Query a single
                             server instead of all
  -o, --output TEXT          Filename to dump the result in, currently only
                             HTML is supported
  -f, --force                Perform potentially destructive actions.
  -d, --debug                Debug mode
  --help                     Show this message and exit.

Commands:
  incoming  Incoming reviews (not mine)
  merged    merged in the last number of days
  owned     Changes originated from current user (implicit)
```

There is also an experimental `grib` command line for quering bugs (issues),
which has almost identical options.

## Configuring

Unless you already have a GerTTY config, here is how to configure the tool:

```yaml
# ~/.config/gri/gri.yaml
servers:
- name: opendev  # server 0, select it with '-s 0'
  url: https://review.opendev.org/
- name: rdo  # server 0, select it with '-s 1'
  url: https://review.rdoproject.org/r/
  auth-type: basic  # needed only for old gerrit versions
```

You may be surprised to observe that the credentials are not stored inside
the same file. That is by design and the tool will load them from `~/.netrc`
file, which is also the standard way to place network related credentials.

```ini
# ~/.netrc
# password is the token generated by gerrit on your user settings page
machine review.rdoproject.org login jonhdoe password changeme
```

## Contributing

Are you missing a feature, just check if there is a bug open for it and add
a new one if not. Once done, you are welcomed to make a PR that implements
the missing change.

## Related tools

* [git-review][4] is the git extension for working with gerrit, where I am also
  one of the core contributors.
* [gertty](https://opendev.org/ttygroup/gertty) is a very useful tui for gerrit
  which inspired me but which presents one essential design limitation: it does
  not work with multiple Gerrit servers.
* [gerrit-view](https://github.com/Gruntfuggly/gerrit-view) is a vscode plugin
  that can be installed from [Visual Studio Marketplace][3].

## Notes

1. `gri` name comes from my attempt to find a short name that was starting
   with **g** (from git/gerrit) and preferably sounds like `cli`.

[1]: https://github.com/pycontribs/gri/blob/master/test/gri.yaml
[2]: https://opendev.org/ttygroup/gertty/src/branch/master/examples/minimal-gertty.yaml
[3]: https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.gerrit-view
[4]: https://docs.openstack.org/infra/git-review/
