Merge pull request #266 from pre-commit/fix_no_commit_to_branch
Fix no-commit-to-branch when not on a branch
diff --git a/pre_commit_hooks/no_commit_to_branch.py b/pre_commit_hooks/no_commit_to_branch.py
index 22ee95e..0c75217 100644
--- a/pre_commit_hooks/no_commit_to_branch.py
+++ b/pre_commit_hooks/no_commit_to_branch.py
@@ -1,21 +1,25 @@
from __future__ import print_function
import argparse
-import sys
+from pre_commit_hooks.util import CalledProcessError
from pre_commit_hooks.util import cmd_output
def is_on_branch(protected):
- branch = cmd_output('git', 'symbolic-ref', 'HEAD')
+ try:
+ branch = cmd_output('git', 'symbolic-ref', 'HEAD')
+ except CalledProcessError:
+ return False
chunks = branch.strip().split('/')
return '/'.join(chunks[2:]) == protected
-def main(argv=[]):
+def main(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument(
- '-b', '--branch', default='master', help='branch to disallow commits to',
+ '-b', '--branch', default='master',
+ help='branch to disallow commits to',
)
args = parser.parse_args(argv)
@@ -23,4 +27,4 @@
if __name__ == '__main__':
- sys.exit(main(sys.argv))
+ exit(main())
diff --git a/tests/check_no_commit_to_branch_test.py b/tests/check_no_commit_to_branch_test.py
index 99af938..7e39256 100644
--- a/tests/check_no_commit_to_branch_test.py
+++ b/tests/check_no_commit_to_branch_test.py
@@ -29,19 +29,22 @@
assert is_on_branch('master') is True
-def test_main_b_call(temp_git_dir):
- with temp_git_dir.as_cwd():
- cmd_output('git', 'checkout', '-b', 'other')
- assert main(['-b', 'other']) == 1
-
-
def test_main_branch_call(temp_git_dir):
with temp_git_dir.as_cwd():
cmd_output('git', 'checkout', '-b', 'other')
- assert main(['--branch', 'other']) == 1
+ assert main(('--branch', 'other')) == 1
def test_main_default_call(temp_git_dir):
with temp_git_dir.as_cwd():
cmd_output('git', 'checkout', '-b', 'anotherbranch')
- assert main() == 0
+ assert main(()) == 0
+
+
+def test_not_on_a_branch(temp_git_dir):
+ with temp_git_dir.as_cwd():
+ cmd_output('git', 'commit', '--no-gpg-sign', '--allow-empty', '-m1')
+ head = cmd_output('git', 'rev-parse', 'HEAD').strip()
+ cmd_output('git', 'checkout', head)
+ # we're not on a branch!
+ assert main(()) == 0