Uma maneira de inserir um texto predefinido na janela de mensagem de confirmação do Magit?

8

Temos uma convenção de que toda mensagem de confirmação começa com um número de problema.

Eu gostaria de poder inserir programaticamente a parte do número da questão (calculada por uma função separada) na janela de confirmação do Magit, quando ela abrir pela primeira vez (ou seja, ao pressionar C C).

Como eu faço melhor? Onde olhar?

UPDATE: Aqui está o que estou usando no momento.

(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)

Para um nome de filial como <username>-foo-123-<explanatory part>ele produz [FOO-123]na primeira linha da mensagem de confirmação, para permitir fácil vinculação automática de ticket no Jira.

9000
fonte

Respostas:

9

Existe um git-commit-setup-hookque pode ser usado para preparar o buffer de mensagem de confirmação. Aqui está um pequeno exemplo:

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

(add-hook 'git-commit-setup-hook 'my-git-commit-setup)
wasamasa
fonte
2

Portanto, um prazer encontrar esta resposta mais velho, mas muito útil por @wasamasa:

Em um modelo de ramificação baseado em gitflow, ramificações (recurso) criadas pelo Bitbucket com base em problemas do Jira (que estão sempre no formato UPPERCASEALPHA-DIGITS), eu uso isso para inserir automaticamente o número da questão atual:

(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
fonte
2

Para manter as coisas realmente simples, basta invocar magit-commitargumentos git equivalentes para realizar a mesma coisa:

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

Adicionar esse comando como uma ação ao pop-up com algo como o seguinte pode ajudar a otimizar seu fluxo de trabalho git:

(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
fonte