$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Emacsで現在見ている行を変更したPRを開けるようにした

このコードどうしてこうなってるのかという経緯を知りたい時、git blameなどのコマンドを利用することが多い。しかし、git blameだとその行を変更したcommitが分かるだけであり、経緯が結局分からないということがよくある。

そういう時にその行を変更したPRを開けるようにしたいなーと思って、いろいろやったところ、Emacsで現在見ている行を変更したPRを開けるようになったのでメモ。

特定のコミットが含まれるPull Requestを開くには


Pull Request


Commit Hash  Pull Request  - Qiita

How to find pull-request by a commit sha - Pitr.ch

GitTips - 


 Commit Hash  Pull Request  - Qiita 
hub browse -- `git log --merges --oneline --reverse --ancestry-path $1...master | grep 'Merge pull request #' | head -n 1 | cut -f5 -d' ' | sed -e 's%#%pull/%'`

使githubdefault branchmaster github - git - how to get default branch? - Stack Overflow default branchopen-pr-from-commit

open-pr-from-commit
#!/bin/bash

default_branch=`git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'`
hub browse -- `git log --merges --oneline --reverse --ancestry-path $1...$default_branch | grep 'Merge pull request #' | head -n 1 | cut -f5 -d' ' | sed -e 's%#%pull/%'`

open-pr-from-commit f2cf9cdcadbcommitPull Request

tig blameから該当行が変更されたPull Requestを開く


tig  Pull Request  - Qiita tig.tigrc
bind generic P @open-pr-from-commit %(commit)

tig blamePPull Request


Emacsでvc-annotate中に該当業が変更されたPull Requestを開く


tigtigEmacs

Emacsgit blamevc-annotate使 Emacs  vc-annotate - naoya

vc-annotaterevisionvc-annotate-extract-revision-at-line使vc-annotate-mode-map
;; vc-annotateで現在の行がmergeされたPRを開く
(defun vc-annotate-open-pr-at-line ()
  (interactive)
  (let* ((rev-at-line (vc-annotate-extract-revision-at-line))
         (rev (car rev-at-line)))
    (shell-command (concat "open-pr-from-commit " rev))))

(define-key vc-annotate-mode-map (kbd "P") 'vc-annotate-open-pr-at-line)

vc-annotatePPR


まとめ

今回は特定のコミットが含まれるPull Requestを開くコマンドを作りつつ、それを使うことでEmacsで現在見ている行を変更したPRを開けるようにした。シュッと関係するPRを見れるようになったのは非常に便利。