The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Git::Hooks::CheckRewrite - Git::Hooks plugin for checking against unsafe rewrites

VERSION

version 1.6.7

DESCRIPTION

This Git::Hooks plugin hooks itself to the pre-rebase hook to guarantee that it is safe in the sense that no rewritten commit is reachable by other branch than the one being rebased.

It also hooks itself to the pre-commit and the post-commit hooks to detect unsafe git commit --amend commands after the fact. An amend is unsafe if the original commit is still reachable by any branch after being amended. Unfortunately git still does not provide a way to detect unsafe amends before committing them.

To enable it you should add it to the githooks.plugin configuration option:

    git config --add githooks.plugin CheckRewrite

NAME

Git::Hooks::CheckRewrite - Git::Hooks plugin for checking against unsafe rewrites

CONFIGURATION

There's no configuration needed or provided.

EXPORTS

This module exports the following routines that can be used directly without using all of Git::Hooks infrastructure.

record_commit_parents GIT

This is the routine used to implement the pre-commit hook. It needs a Git::More object. It simply record the original commit id and its parents in a file called GITHOOKS_CHECKREWRITE inside the git repository directory

check_commit_amend GIT

This is the routine used to implement the post-commit hook. It needs a Git::More object. It reads the original commit id and its parents from a file called GITHOOKS_CHECKREWRITE inside the git repository directory, which must have been created by the record_commit_parents routine during the pre-commit hook. Using this information it detects if this was an unsafe amend and tells the user so.

check_rebase GIT, UPSTREAM [, BRANCH]

This is the routine used to implement the pre-rebase hook. It needs a Git::More object, the name of the upstream branch onto which we're rebasing and the name of the branch being rebased. (If BRANCH is undefined it means that we're rebasing the current branch.

The routine dies with a suitable message if it detects that it will be an unsafe rebase.

REFERENCES

Here are some references about what it means for a rewrite to be unsafe and how to go about detecting them in git:

AUTHOR

Gustavo L. de M. Chaves <gnustavo@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by CPqD <www.cpqd.com.br>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.