Skip to content

An ancient Greek known for seeking fame through crime and destruction. Also a Git repository achievements engine.

License

Notifications You must be signed in to change notification settings

Notgnoshi/herostratus

Repository files navigation

Herostratus

lint workflow release workflow code coverage

Herostratus n. 1. An ancient Greek known for seeking fame through crime and destruction. 2. A Git repository achievements engine.

Usage

Trying it out

git clone [email protected]:Notgnoshi/herostratus.git
cd herostratus
cargo run -- check .
cargo run -- check . origin/test/fixup

The check subcommand is stateless. It reads/writes no configuration, and can not fetch from the upstream remote. Read on for stateful configuration that enables running and re-running Herostratus on a group of repositories:

Setting it up

The following example configures Herostratus to run on its own test/simple and test/fixup branches.

$ herostratus add [email protected]:Notgnoshi/herostratus.git test/simple
$ herostratus add [email protected]:Notgnoshi/herostratus.git test/fixup

[!TIP] You may find the --data-dir, --get-data-dir, --config-file, and --get-config options useful when setting up Herostratus to run on one more more repository over time.

After this, you can use the fetch-all and check-all subcommands to update and check the cloned repositories.

$ # Fetch from the remote tracking branch for test/simple and test/fixup
$ herostratus fetch-all
$ # Check the test/simple and test/fixup branches for achievements
$ herostratus check-all
Achievement { name: "I meant to fix that up later, I swear!", commit: 2721748d8fa0b0cc3302b41733d37e30161eabfd }
Achievement { name: "I meant to fix that up later, I swear!", commit: a987013884fc7dafbe9eb080d7cbc8625408a85f }
Achievement { name: "I meant to fix that up later, I swear!", commit: 60b480b554dbd5266eec0f2378f72df5170a6702 }

[!WARNING] This output format will change as Herostratus becomes more usable

Development

Build and test

The usual cargo build and cargo test. There are a few integration tests that take too long to run every time. These can be run with cargo test -- --ignored.

cargo-nextest

I recommend using cargo-nextest for running the tests. It's not strictly necessary, but does give a better experience than cargo test.

cargo nextest run

Mutation testing

Using cargo-mutants for mutation testing is phenomenally easy, and even though Herostratus has pretty good test coverage, cargo-mutants did highlight a few bugs, and several gaps in tests.

cargo mutants --in-place --package herostratus

While not every issue it points out is worth fixing, it is sometimes a useful tool.

Test Branches

There are orphan test branches in this repository used for integration tests.

For example, the test/simple branch was created like this:

git checkout --orphan test/simple
git rm -rf .
for i in `seq 0 4`; do
    git commit --allow-empty -m "test/simple: $i"
done

Contribution

Contribution is welcome! See CONTRIBUTING.md.

About

An ancient Greek known for seeking fame through crime and destruction. Also a Git repository achievements engine.

Topics

Resources

License

Stars

Watchers

Forks