mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-11-04 00:36:21 +00:00 
			
		
		
		
	
		
			
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env python3
							 | 
						|||
| 
								 | 
							
								"""Commitizen commit message checker that is .venv aware.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Works for commits with -m or commit message file.
							 | 
						|||
| 
								 | 
							
								"""
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import os
							 | 
						|||
| 
								 | 
							
								import subprocess
							 | 
						|||
| 
								 | 
							
								import sys
							 | 
						|||
| 
								 | 
							
								from pathlib import Path
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								def find_cz() -> str:
							 | 
						|||
| 
								 | 
							
								    """Find Commitizen executable, preferring virtualenv."""
							 | 
						|||
| 
								 | 
							
								    venv = os.getenv("VIRTUAL_ENV")
							 | 
						|||
| 
								 | 
							
								    paths = []
							 | 
						|||
| 
								 | 
							
								    if venv:
							 | 
						|||
| 
								 | 
							
								        paths.append(Path(venv))
							 | 
						|||
| 
								 | 
							
								    paths.append(Path.cwd() / ".venv")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    for base in paths:
							 | 
						|||
| 
								 | 
							
								        cz = base / ("Scripts" if os.name == "nt" else "bin") / ("cz.exe" if os.name == "nt" else "cz")
							 | 
						|||
| 
								 | 
							
								        if cz.exists():
							 | 
						|||
| 
								 | 
							
								            return str(cz)
							 | 
						|||
| 
								 | 
							
								    return "cz"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								def main():
							 | 
						|||
| 
								 | 
							
								    cz = find_cz()
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    # 1️⃣ Try commit-msg file (interactive commit)
							 | 
						|||
| 
								 | 
							
								    commit_msg_file = sys.argv[1] if len(sys.argv) > 1 else None
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    # 2️⃣ If not file, fallback to -m message (Git sets GIT_COMMIT_MSG in some environments, or we create a temp file)
							 | 
						|||
| 
								 | 
							
								    if not commit_msg_file:
							 | 
						|||
| 
								 | 
							
								        msg = os.getenv("GIT_COMMIT_MSG") or ""
							 | 
						|||
| 
								 | 
							
								        if not msg:
							 | 
						|||
| 
								 | 
							
								            print("⚠️  No commit message file or environment message found. Skipping Commitizen check.")
							 | 
						|||
| 
								 | 
							
								            return 0
							 | 
						|||
| 
								 | 
							
								        import tempfile
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        with tempfile.NamedTemporaryFile("w+", delete=False) as tmp:
							 | 
						|||
| 
								 | 
							
								            tmp.write(msg)
							 | 
						|||
| 
								 | 
							
								            tmp.flush()
							 | 
						|||
| 
								 | 
							
								            commit_msg_file = tmp.name
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    print(f"🔍 Checking commit message using {cz}...")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        subprocess.check_call([cz, "check", "--commit-msg-file", commit_msg_file])
							 | 
						|||
| 
								 | 
							
								        print("✅ Commit message follows Commitizen convention.")
							 | 
						|||
| 
								 | 
							
								        return 0
							 | 
						|||
| 
								 | 
							
								    except subprocess.CalledProcessError:
							 | 
						|||
| 
								 | 
							
								        print("❌ Commit message validation failed.")
							 | 
						|||
| 
								 | 
							
								        return 1
							 | 
						|||
| 
								 | 
							
								    finally:
							 | 
						|||
| 
								 | 
							
								        # Clean up temp file if we created one
							 | 
						|||
| 
								 | 
							
								        if 'tmp' in locals():
							 | 
						|||
| 
								 | 
							
								            os.unlink(tmp.name)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						|||
| 
								 | 
							
								    sys.exit(main())
							 |