mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-04-14 17:41:45 +04:00
Add pre-rebase hook support
This commit is contained in:
parent
f2661bfc31
commit
f39154f69f
9 changed files with 114 additions and 0 deletions
|
|
@ -100,6 +100,8 @@ def test_run_legacy_recursive(tmpdir):
|
|||
('commit-msg', ['.git/COMMIT_EDITMSG']),
|
||||
('post-commit', []),
|
||||
('post-merge', ['1']),
|
||||
('pre-rebase', ['main', 'topic']),
|
||||
('pre-rebase', ['main']),
|
||||
('post-checkout', ['old_head', 'new_head', '1']),
|
||||
('post-rewrite', ['amend']),
|
||||
# multiple choices for commit-editmsg
|
||||
|
|
@ -139,6 +141,13 @@ def test_check_args_length_prepare_commit_msg_error():
|
|||
)
|
||||
|
||||
|
||||
def test_check_args_length_pre_rebase_error():
|
||||
with pytest.raises(SystemExit) as excinfo:
|
||||
hook_impl._check_args_length('pre-rebase', [])
|
||||
msg, = excinfo.value.args
|
||||
assert msg == 'hook-impl for pre-rebase expected 1 or 2 arguments but got 0: []' # noqa: E501
|
||||
|
||||
|
||||
def test_run_ns_pre_commit():
|
||||
ns = hook_impl._run_ns('pre-commit', True, (), b'')
|
||||
assert ns is not None
|
||||
|
|
@ -146,6 +155,22 @@ def test_run_ns_pre_commit():
|
|||
assert ns.color is True
|
||||
|
||||
|
||||
def test_run_ns_pre_rebase():
|
||||
ns = hook_impl._run_ns('pre-rebase', True, ('main', 'topic'), b'')
|
||||
assert ns is not None
|
||||
assert ns.hook_stage == 'pre-rebase'
|
||||
assert ns.color is True
|
||||
assert ns.pre_rebase_upstream == 'main'
|
||||
assert ns.pre_rebase_branch == 'topic'
|
||||
|
||||
ns = hook_impl._run_ns('pre-rebase', True, ('main',), b'')
|
||||
assert ns is not None
|
||||
assert ns.hook_stage == 'pre-rebase'
|
||||
assert ns.color is True
|
||||
assert ns.pre_rebase_upstream == 'main'
|
||||
assert ns.pre_rebase_branch is None
|
||||
|
||||
|
||||
def test_run_ns_commit_msg():
|
||||
ns = hook_impl._run_ns('commit-msg', False, ('.git/COMMIT_MSG',), b'')
|
||||
assert ns is not None
|
||||
|
|
|
|||
|
|
@ -810,6 +810,46 @@ def test_post_merge_integration(tempdir_factory, store):
|
|||
assert os.path.exists('post-merge.tmp')
|
||||
|
||||
|
||||
def test_pre_rebase_integration(tempdir_factory, store):
|
||||
path = git_dir(tempdir_factory)
|
||||
config = {
|
||||
'repos': [
|
||||
{
|
||||
'repo': 'local',
|
||||
'hooks': [{
|
||||
'id': 'pre-rebase',
|
||||
'name': 'Pre rebase',
|
||||
'entry': 'touch pre-rebase.tmp',
|
||||
'language': 'system',
|
||||
'always_run': True,
|
||||
'verbose': True,
|
||||
'stages': ['pre-rebase'],
|
||||
}],
|
||||
},
|
||||
],
|
||||
}
|
||||
write_config(path, config)
|
||||
with cwd(path):
|
||||
install(C.CONFIG_FILE, store, hook_types=['pre-rebase'])
|
||||
open('foo', 'a').close()
|
||||
cmd_output('git', 'add', '.')
|
||||
git_commit()
|
||||
|
||||
cmd_output('git', 'checkout', '-b', 'branch')
|
||||
open('bar', 'a').close()
|
||||
cmd_output('git', 'add', '.')
|
||||
git_commit()
|
||||
|
||||
cmd_output('git', 'checkout', 'master')
|
||||
open('baz', 'a').close()
|
||||
cmd_output('git', 'add', '.')
|
||||
git_commit()
|
||||
|
||||
cmd_output('git', 'checkout', 'branch')
|
||||
cmd_output('git', 'rebase', 'master', 'branch')
|
||||
assert os.path.exists('pre-rebase.tmp')
|
||||
|
||||
|
||||
def test_post_rewrite_integration(tempdir_factory, store):
|
||||
path = git_dir(tempdir_factory)
|
||||
config = {
|
||||
|
|
|
|||
|
|
@ -563,6 +563,16 @@ def test_merge_conflict_resolved(cap_out, store, in_merge_conflict):
|
|||
assert msg in printed
|
||||
|
||||
|
||||
def test_rebase(cap_out, store, repo_with_passing_hook):
|
||||
args = run_opts(pre_rebase_upstream='master', pre_rebase_branch='topic')
|
||||
environ: MutableMapping[str, str] = {}
|
||||
ret, printed = _do_run(
|
||||
cap_out, store, repo_with_passing_hook, args, environ,
|
||||
)
|
||||
assert environ['PRE_COMMIT_PRE_REBASE_UPSTREAM'] == 'master'
|
||||
assert environ['PRE_COMMIT_PRE_REBASE_BRANCH'] == 'topic'
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
('hooks', 'expected'),
|
||||
(
|
||||
|
|
|
|||
|
|
@ -522,6 +522,7 @@ def test_manifest_hooks(tempdir_factory, store):
|
|||
'pre-commit',
|
||||
'pre-merge-commit',
|
||||
'pre-push',
|
||||
'pre-rebase',
|
||||
'prepare-commit-msg',
|
||||
'manual',
|
||||
],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue