Add a new hook to forbid new submodules

This commit is contained in:
Anthony Sottile 2016-11-30 09:56:42 -08:00
parent 7539d8bd1a
commit 70e405ede2
7 changed files with 75 additions and 5 deletions

View file

@ -6,7 +6,6 @@ from __future__ import unicode_literals
import argparse
import math
import os
import sys
from pre_commit_hooks.util import added_files
from pre_commit_hooks.util import CalledProcessError
@ -49,8 +48,6 @@ def find_large_added_files(filenames, maxkb):
def main(argv=None):
argv = argv if argv is not None else sys.argv[1:]
parser = argparse.ArgumentParser()
parser.add_argument(
'filenames', nargs='*',

View file

@ -2,7 +2,6 @@ from __future__ import print_function
import argparse
import os.path
import sys
CONFLICT_PATTERNS = [
b'<<<<<<< ',
@ -41,5 +40,6 @@ def detect_merge_conflict(argv=None):
return retcode
if __name__ == '__main__':
sys.exit(detect_merge_conflict())
exit(detect_merge_conflict())

View file

@ -67,5 +67,6 @@ def main(argv=None):
else:
return 0
if __name__ == '__main__':
exit(main())

View file

@ -138,5 +138,6 @@ def main(argv=None):
return retv
if __name__ == "__main__":
exit(main())

View file

@ -0,0 +1,31 @@
from __future__ import absolute_import
from __future__ import unicode_literals
from pre_commit_hooks.util import cmd_output
def main(argv=None):
# `argv` is ignored, pre-commit will send us a list of files that we
# don't care about
added_diff = cmd_output(
'git', 'diff', '--staged', '--diff-filter=A', '--raw',
)
retv = 0
for line in added_diff.splitlines():
metadata, filename = line.split('\t', 1)
new_mode = metadata.split(' ')[1]
if new_mode == '160000':
print('{}: new submodule introduced'.format(filename))
retv = 1
if retv:
print('This commit introduces new submodules.')
print('Did you unintentionally `git add .`?')
print('To fix: git rm {thesubmodule} # no trailing slash')
print('Also check .gitmodules')
return retv
if __name__ == '__main__':
exit(main())