Eine Möglichkeit, einen vordefinierten Text in das Commit-Nachrichtenfenster von Magit einzufügen?

8

Wir haben die Konvention, dass jede Festschreibungsnachricht mit einer Ausgabenummer beginnt.

Ich möchte in der Lage sein, den Teil der Ausgabenummer (berechnet von einer separaten Funktion) programmgesteuert in das Festschreibungsfenster von Magit einzufügen, wenn es zum ersten Mal geöffnet wird (dh beim Drücken C C).

Wie mache ich das am besten? Wo soll man suchen?

UPDATE: Folgendes verwende ich derzeit.

(defun my-extract-branch-tag (branch-name)
  (let ((TICKET-PATTERN "\\(?:[[:alpha:]]+-\\)?\\([[:alpha:]]+-[[:digit:]]+\\)-.*"))
    (when (string-match-p TICKET-PATTERN branch-name)
       (s-upcase (replace-regexp-in-string TICKET-PATTERN "[\\1] " branch-name)))))

(defun my-git-commit-insert-branch ()
  (insert (my-extract-branch-tag (magit-get-current-branch))))

(add-hook 'git-commit-setup-hook 'my-git-commit-insert-branch)

Für einen Zweigstellennamen, wie <username>-foo-123-<explanatory part>er [FOO-123]in der ersten Zeile der Festschreibungsnachricht erzeugt wird, um eine einfache automatische Ticketverknüpfung in Jira zu ermöglichen.

9000
quelle

Antworten:

9

Es gibt eine git-commit-setup-hook, mit der der Commit-Nachrichtenpuffer vorbereitet werden kann. Hier kommt ein kurzes Beispiel:

(defun my-git-commit-setup ()
  (insert "#123 "))

(add-hook 'git-commit-setup-hook 'my-git-commit-setup)
Wasamasa
quelle
2

Ich bin so froh, diese ältere, aber sehr hilfreiche Antwort von @wasamasa zu finden:

Bei einem gitflow-basierten Verzweigungsmodell, (Feature-) Verzweigungen, die von Bitbucket basierend auf Jira-Problemen erstellt wurden (die immer die Form UPPERCASEALPHA-DIGITS haben), verwende ich dies, um automatisch die aktuelle Ausgabenummer einzufügen:

(let ((ISSUEKEY "[[:upper:]]+-[[:digit:]]+"))
 (when (string-match-p ISSUEKEY (magit-get-current-branch))
  (insert
   (replace-regexp-in-string
    (concat ".*?\\(" ISSUEKEY "\\).*")
    "- \\1: "
    (magit-get-current-branch)))))
A. Schiweck
quelle
2

Um die Dinge wirklich einfach zu halten, können Sie einfach magit-commitmit äquivalenten Git-Argumenten aufrufen , um dasselbe zu erreichen:

(magit-commit `("--edit" ,(format "--message=%d: " 1234)))

Das Hinzufügen dieses Befehls als Aktion zum Popup mit etwa der folgenden Funktion kann zur Optimierung Ihres Git-Workflows beitragen:

(defun my/read-issue-id ()
  "Return an issue ID default to the issue ID you are currently working on."
  ;; Or maybe completing-read w/unwrapping logic to extract the ID from a supplied list of issues...
  (read-number
   "Issue ID: "
   ;; Check your org-clock or make some REST request or something and use that as a default:
   42))

(defun my/issue-commit (issue-id)
  "Make a commit with a message starting with ISSUE-ID."
  (interactive (list (my/read-issue-id)))
  (magit-commit (append `("-e" ,(format "--message=%d: " issue-id))
                        (magit-commit-arguments))))

(magit-define-popup-action 'magit-commit-popup ?I "'Issue' commit" #'my/issue-commit)
ebpa
quelle