Idiomdrottning’s homepage

Applying thread patches with Emacs Notmuch

I have made this shell script called git-inled in my path.

#!/bin/sh

if git show-ref --verify --quiet "refs/heads/$1"; then
    git checkout "$1"
else
    git checkout main
    git checkout -b "$1"
fi

Then I had this snippet copied from somewhere and changed it from always wanting to create new branches to instead use the inled script:

(defun apply-thread-patchset (repo branch)
  (interactive "Dgit repo: \nsbranch name: ")
  (let ((tid notmuch-show-thread-id)
        (tmp "/tmp/notmuch-patchset"))
    (shell-command (format "notmuch-extract-patch %s > %s && ( cd %s && git inled %s && git am %s )"
                           (shell-quote-argument tid)
                           (shell-quote-argument tmp)
                           (shell-quote-argument (expand-file-name repo))
                           (shell-quote-argument branch)
                           (shell-quote-argument tmp)))))

Thanks to the script I added, if the branch already exists, it switches to it, and if it does not exist, it makes sure the new one is branched off of main.

Before, it’d always create new branches and it’d always create them off of where I already was (which got confusing if I was on a dev branch).

Most of the time I actually do want to accept the patches directly on main. That’s one of the advantages of this workflow after all. And that’s what this script also allows me to do, I just enter main as the branchname to apply to. Then I can use git tools on top of that if I want to fix it up further beyond what was addressed in the review process.