定義済みのテキストをMagitのコミットメッセージウィンドウに挿入する方法は?


8

すべてのコミットメッセージが問題番号で始まるという規則があります。

最初に開いたとき(つまり、を押したとき)に、Magitのコミットウィンドウに(別の関数で計算された)問題番号部分をプログラムで挿入できるようにしたいと思いますC C

どうすればよいですか。どこを見ますか?

更新:これは私が現在使用しているものです。

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

Jiraで簡単にチケットを自動リンクできるように、コミットメッセージの最初の行で<username>-foo-123-<explanatory part>生成さ[FOO-123]れるようなブランチ名の場合。


回答:


9

git-commit-setup-hookコミットメッセージバッファの準備に使用できるがあります。ここに短い例があります:

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

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

2

だから、 @wasamasaことで、この古いが、非常に有用な答えを見つけることが嬉しいです。

gitflowベースの分岐モデルでは、Jiraの問題に基づいてBitbucketによって作成された(機能-)ブランチ(常にUPPERCASEALPHA-DIGITSの形式です)を使用して、現在の問題番号を自動的に挿入します。

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

2

物事を本当にシンプルに保つにはmagit-commit、同等のgit引数を指定して呼び出すだけで、同じことを実行できます。

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

このコマンドをアクションとしてポップアップに追加すると、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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.