open:prepare-commit-msg

prepare commit msg

#!/usr/bin/env bb
 
(ns prepare_commit_msg
  (:require [clojure.java.shell :refer [sh]]
            [clojure.string :refer [includes? split trim trim-newline
                                    upper-case]]))
 
(def ^:private branches-to-skip #{"master"
                                  "main"
                                  "develop"
                                  "test"})
 
(def commit-message-file ".git/COMMIT_EDITMSG")
(def commit-message (slurp commit-message-file))
 
(defn- should-skip-this-branch? [branch]
  (contains? branches-to-skip branch))
 
(defn current-git-branch []
  (->> (sh "git" "symbolic-ref" "--short" "HEAD")
       :out
       trim-newline))
 
(defn jira-ticket-number []
  (when-let [s (->> (split (current-git-branch) #"/")
                    last
                    (re-seq #"^[a-zA-Z]+-[0-9]+")
                    first)]
    (upper-case s)))
 
(defn github-issue-number []
  (when-let [s (->> (split (current-git-branch) #"/")
                    last
                    (re-seq #"#[0-9]+$")
                    last)]
    (upper-case s)))
 
(defn include-jira-ticket-number? []
  (when-let [ticket (jira-ticket-number)]
    (includes? commit-message ticket)))
 
(defn include-github-issue-number? []
  (when-let [ticket (github-issue-number)]
    (includes? commit-message ticket)))
 
(defn combine-ticket-number-with-message []
  (if-let [ticket (or (jira-ticket-number)
                      (github-issue-number))]
    (format "%s (%s)" (trim commit-message) ticket)
    commit-message))
 
(defn skip? [branch]
  (or (should-skip-this-branch? branch)
      (include-jira-ticket-number?)))
 
(defn -main [& _args]
  (->> (if (skip? (current-git-branch))
         commit-message
         (combine-ticket-number-with-message))
       (spit commit-message-file))
  (System/exit 0))


  • open/prepare-commit-msg.txt
  • 마지막으로 수정됨: 2022/06/07 05:54
  • 저자 127.0.0.1