Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/corytodd/walrus

A multi-repo Git query tool
https://github.com/corytodd/walrus

Last synced: 3 days ago
JSON representation

A multi-repo Git query tool

Awesome Lists containing this project

README

        

# Walrus

[![Test](https://github.com/corytodd/Walrus/actions/workflows/run_tests.yml/badge.svg)](https://github.com/corytodd/Walrus/actions/workflows/run_tests.yml)

A multi-repo Git query tool

## Purpose

I spend a fair amount of time tracking down the what and when of my daily activities. Usually this searching spans many (10+) repositories which means the task is boring and tedious. Walrus
tool aims to automate the discovery of git commits based on date, author, and other criteria.

## Goals

We don't want to reinvent libgit2sharp, we just want a simple query interface specific to commit messages. We don't care about diffs, code content, or even the change sets.
For this reason, Gitbase was found to be entirely overkill even though it is pretty rad. It is a fantastic tool and I do make use of it but managing it is kind of a pain. For this reason, the
overarching goal of this project is simplicity with the ability to opt-in to complexity when needed.

## Getting Started

This utility should be used as a dotnet tool. See `tools/install_as_tool.ps1` for how to build and install Walrus on your system.

```
# Windows
.\tools\install_as_tool.ps1

# Not Windows
bash tools/install_as_tool.ps1
```

To query multiple roots or query from any location, you will need to setup a simple JSON config file. This can be specified as an env `WALRUS_CONFIG_FILE` or a file
named `walrus.json` placed in your current working directory. The contents should look something like this is:

```
{
"DirectoryScanDepth": 3,
"RepositoryRoots": [
"H:\\code"
],
"AuthorAliases": {
"illyum": [
"[email protected]",
"[email protected]"
]
},
"IgnorePaths": [
"H:\\code\\llvm"
]
}
```

If you like to keep a flat code directories then you can set `DirectoryScanDepth` to a smaller value. This value affects performance so chose carefully.

## Examples

These examples assume you have installed Walrus.CLI as a `dotnet tool`.

Show the active configuration
```
walrusc show config
```

Print a list of all repositories
```
walrusc show repos
```

Use the default scan depth and search for repositories relative to your current directory. No config file needed!
```
walrusc query --current-directory
```

Count commits between March 2 and Jun 2 of 2021. This includes all authors on the currently checked out branch in each repository
```
walrusc query --after "Mar 2 2021" --before "Jun 2 2021"
```

Show all commits on all branches since last week (default if --after is not specified) and restrict to a single author
```
walrusc query --all-branches --author-email [email protected]
```

Print a commit summary table organized by repo and date to the console
```
walrusc query --author-email [email protected] --group-by repo

Repository: uarch_benchmarks [file://H:\code\system\uarch_benchmarks]
----------------------------------------------------------------------------------------------------
8/15/2021: 3 Commits
19:16 2bbde046b8232f58357bf89b1b4478f3275e7367 add cmake build scripts
19:38 2e630b5e20d2e66e3809641fc648ec3a7eeef3f6 [cmake] use dots in app names
19:39 bc2232a9bea51d3343eba5e6c818692db7339362 msvc compatibility fix

Repository: Walrus [file://H:\code\tools\Walrus]
----------------------------------------------------------------------------------------------------
8/21/2021: 19 Commits
12:02 ba29639d9eef1e33ae74d4f487eaabf04ce66afc First commit
14:01 89421e0332f1db429a150ffac221a2d46454947a add logging to core library
14:02 31a2cf014c844d0c9da6b93c097e118c95b24efe add ensure helper class
14:02 0335f9a11ec0c5f83c0f412ed49e816f815d9089 enable nullable on core library
14:04 f91dab40a622e4617e72619f56954f0896332ff0 fix crash commit enumerator
14:07 77cfa7fa5bb717902d999e4ce16be8ad7a739379 code cleanup
14:07 515fec7ad07d728044271e7fa6a93a34217613b3 connect logging to core lib in CLI
14:08 666dd3aeb13fccd82676bee06e2bd50b5b367265 add query command
14:10 b59ccd09df2811132752094bfa6307b6fbae3e40 stop tracking config files
14:10 f47fb2990a0d9596e908a23a25e248b0b10a1f37 ignore test and launch configs
14:10 a238cd6a745727f527ac0e7f7da55d955c26b437 remove noisy log line
14:26 79681875e6493fcbfc0496822d440f46ad1a857a add author to query parameters
14:29 48d258f0a443b68bd8619b982b26db6571de7853 exclude remote branches
14:33 ce9c3cc6ebbf615c5ee354b28a06d935f0bff8a8 remove walrus service
15:12 9142eef111af4786c0070fe7f1c75a82564fd861 make query parallel
15:13 ef7118ce0300dd0455983ff93af22d8cb2413a97 add more info to WalrusCommit
21:05 4994950950a5fbd27aa722a1568702a586492db7 add repo name filter
22:24 553bb2cf992eaaf1ae8ee50f1578415715354e65 fix duplicate repo return
22:36 f2e18d204cfb91b0fdc5dd9c880e676634d68db3 [cli] add table format printer
8/22/2021: 1 Commits
09:12 82eb14b37e57a665e7077fb4754a8b3e6a8af6de add file link to cli table output

====================================================================================================
Total Commits: 23
====================================================================================================
```

Show all commits from all aliases known to be associated with a name. This requires an entry in your configuration file.
```
walrusc query --author-alias illyum
```

## Roadmap

- [x] Basic date/author query interface
- [x] Unit tests
- [x] Simple CLI
- [x] Table style CLI output
- [x] Create dotnet tool
- [x] CI tests