Эх сурвалжийг харах

dev: automated commit - 2026-01-13 11:39:58

Mariano Z. 3 долоо хоног өмнө
parent
commit
9017135ac0

+ 100 - 0
git/.config/git/commit.py

@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+import re
+import subprocess
+import sys
+
+# ---------- Styling ----------
+RESET = "\033[0m"
+BOLD = "\033[1m"
+DIM = "\033[2m"
+
+GREEN = "\033[32m"
+YELLOW = "\033[33m"
+BLUE = "\033[34m"
+CYAN = "\033[36m"
+RED = "\033[31m"
+
+def log(icon, label, value="", color=RESET):
+    if value:
+        print(f"{color}{icon} {label:<14}{RESET} {value}")
+    else:
+        print(f"{color}{icon} {label}{RESET}")
+
+def info(label, value=""):
+    log("▶", label, value, BLUE)
+
+def success(label, value=""):
+    log("✔", label, value, GREEN)
+
+def warn(label, value=""):
+    log("⚠", label, value, YELLOW)
+
+def action(label, value=""):
+    log("✎", label, value, CYAN)
+
+# ---------- Git helpers ----------
+def git(cmd):
+    return subprocess.check_output(cmd, stderr=subprocess.DEVNULL).decode().strip()
+
+def get_branch():
+    try:
+        return git(["git", "symbolic-ref", "--short", "HEAD"])
+    except subprocess.CalledProcessError:
+        return None
+
+def get_ticket(branch):
+    if not branch:
+        return None
+    m = re.match(r"(ocst-\d{2,5})", branch, re.IGNORECASE)
+    return m.group(1).lower() if m else None
+
+# ---------- Commit logic ----------
+def format_subject(message, ticket):
+    m = re.match(r"([^:]+):\s*(.*)", message)
+    if m:
+        return f"{m.group(1)}({ticket}): {m.group(2)}"
+    return message
+
+def main():
+    if len(sys.argv) < 2:
+        print("Usage: g cm <message> [git commit flags]", file=sys.stderr)
+        sys.exit(1)
+
+    message = sys.argv[1]
+    flags = sys.argv[2:]
+
+    branch = get_branch()
+    if branch:
+        info("Branch", branch)
+
+    ticket = get_ticket(branch)
+    if ticket:
+        success("Ticket", ticket.upper())
+        subject = format_subject(message, ticket)
+        action("Subject", subject)
+        action("Reference", f"Refs: {ticket.upper()}")
+
+        cmd = [
+            "git", "commit",
+            "-m", subject,
+            "-m", f"Refs: {ticket.upper()}",
+            *flags,
+        ]
+    else:
+        warn("No ticket found in branch name")
+        cmd = ["git", "commit", "-m", message, *flags]
+
+    info("Committing…")
+    proc = subprocess.run(cmd)
+
+    if proc.returncode == 0:
+        success("Done")
+    elif proc.returncode == 1:
+        warn("Nothing to commit")
+        sys.exit(0)
+    else:
+        sys.exit(proc.returncode)
+
+if __name__ == "__main__":
+    main()
+

+ 2 - 1
git/.config/git/gitalias.ini

@@ -27,7 +27,8 @@
   # Commit commands
   ca = commit --amend
   cane = commit --amend --no-edit
-  cm = "!sh $XDG_CONFIG_HOME/git/commit.sh"
+  ; cm = "!sh $XDG_CONFIG_HOME/git/commit.sh"
+  cm = "!$XDG_CONFIG_HOME/git/commit.py"
 
   # Checkout shortcuts
   co = checkout