If add_repo_status returns an error it will eventually be printed to the
user but there won't be any repository information:
[✘] Error getting status: No branch checked out
Catch the error earlier so we can print the repository name:
[✘] Error: freebsd-src: Couldn't add repo status: No branch checked out
This refactors a huge chunk of the code base to make it more maintainable.
Main points:
* Proper separation between bin and lib. Bin handles argument parsing &
validation and (most of) the output. Lib provides interfaces for all
opreations.
* Before, libgit2 internals were literred throughout the codebase,
mainly the `Repository` struct and `git2::Error` in Results. They
library is now properly wrapped in `repo.rs`, which exposes only the
required functionality. It also standardizes the Error messages
(they're just Strings for now) and handles stuff like the copious
usage of Options to wrap maybe-invalid-utf-8 values. The program will
still panic on non-utf-8 Strings e.g. in git remotes, but I guess this
is acceptable. If you actually manage to hit this case, I promise I'll
fix it :D
* Many unwraps() are now gone and properly handled.
* The table printing functionality is now confined to `table.rs`,
instead of passing tables as parameters through the whole program.