39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
import subprocess
|
|
import sys
|
|
|
|
|
|
def get_staged_files():
|
|
result = subprocess.run(["git", "diff", "--cached", "--name-only"], stdout=subprocess.PIPE, text=True)
|
|
files = result.stdout.splitlines()
|
|
return files
|
|
|
|
|
|
def get_commit_message(commit_msg_filepath):
|
|
with open(commit_msg_filepath, 'r') as f:
|
|
return f.readline().strip()
|
|
|
|
|
|
def main():
|
|
commit_msg_filepath = sys.argv[1]
|
|
commit_message = get_commit_message(commit_msg_filepath)
|
|
staged_files = get_staged_files()
|
|
|
|
has_plus_changes = any(f.startswith('src/plus') for f in staged_files)
|
|
print(commit_message)
|
|
starts_with_plus = commit_message.startswith('[PLUS]')
|
|
|
|
if has_plus_changes and not starts_with_plus:
|
|
print("'[PLUS]' not found in commit message, but there's changes are from 'src/plus'.")
|
|
return 1
|
|
|
|
if starts_with_plus and not all(f.startswith('src/plus') for f in staged_files):
|
|
print("'[PLUS]' found in commit message, but there's changes from other directories. \n"
|
|
"Changes MUST be only from 'src/plus'.")
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|