Compared to the previous version of this series, this new version: - adds tests (all existing and new tests pass) - properly handles pushes where the push target is a relative path - fixes a few typos on the commit messages