From: Kyle Meyer <kyle@kyleam.com>
To: William Casarin <jb55@jb55.com>
Cc: notmuch@notmuchmail.org
Subject: Re: Washing GitHub emails to include inline patch?
Date: Tue, 10 Oct 2017 23:51:42 -0400 [thread overview]
Message-ID: <871smae3zl.fsf@kyleam.com> (raw)
In-Reply-To: <87h8v6foet.fsf@jb55.com>
William Casarin <jb55@jb55.com> writes:
> I now mainly review GitHub PRs via the patch fetching snippet you sent,
> but there's a tedious disconnect between notmuch and magit. In the above
> scenario, I would have to:
>
> 1. cd to the project
> 2. open magit
> 2. fetch
> 3. checkout the branch
> 4. start reviewing
>
> If I want to start a review on GitHub:
>
> 5. go back to the mail buffer
> 6. open the GitHub link
> 7. try to find lines where I had a comment
> 8. make comment, start review
>
> Steps 1-4 are way too long for the number of code reviews I do at work
> and on public projects.
Fair enough. 5-8 are my pain points.
> Perhaps I could write a script that quickly jump from steps 1 to 4. I
> think this would still be too slow compared to simply fetching the patch
> and having a nicer view, at least until we have full magit code reviews.
> I guess I could just wait until that's finished.
I think you could get 1-4 nearly as quick as calling the patch fetching
command. How about something like this?
--8<---------------cut here---------------start------------->8---
(defun km/notmuch-github-pr-number ()
"Return the PR number for this message."
(let (pr)
(with-current-notmuch-show-message
(goto-char (point-min))
(if (re-search-forward "https://github\\.com/.*/pull/\\([0-9]+\\)" nil t)
(setq pr (match-string-no-properties 1))
(user-error "Could not find PR number")))
pr))
;; This function could be anything that figures out the project based
;; on the current notmuch message. Or, if you use projectile and
;; don't mind getting queried each time, it could just read a project
;; from `projectile-relevant-known-projects'.
(defun km/notmuch-repo-from-message ()
"Return the repository that this message is associated with."
(let ((fname (notmuch-show-get-filename)))
(or (and fname
(string-match-p "magit-list" fname)
"~/src/emacs/magit")
(user-error "Could not determine repo"))))
(defun km/notmuch-visit-pr-in-magit (&optional dont-fetch)
"Show the Magit log for this message's PR.
If DONT-FETCH is non-nil, do not fetch first."
(interactive "P")
(let* ((pr (km/notmuch-github-pr-number))
(repo (km/notmuch-repo-from-message))
(default-directory repo))
;; "origin" is hard-coded below, but it could of course be
;; anything. You could also have an alist that maps repo ->
;; remote.
;;
;; This assumes that you've added
;;
;; fetch = +refs/pull/*/head:refs/pull/origin/*
;;
;; to origin's in ".git/config". You could drop that assumption
;; passing a more explicit refspec to the fetch call.
(unless dont-fetch
(magit-call-git "fetch" "origin"))
(magit-log (list (concat "master..refs/pull/origin/" pr)))))
--8<---------------cut here---------------end--------------->8---
Call M-x km/notmuch-visit-pr-in-magit in a notmuch-show buffer for a
GitHub PR, modifying km/notmuch-repo-from-message so that it returns the
full path to the local repository.
--
Kyle
next prev parent reply other threads:[~2017-10-11 3:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-22 1:49 Washing GitHub emails to include inline patch? Kyle Meyer
2017-09-22 14:17 ` Tomi Ollila
2017-09-22 14:57 ` Kyle Meyer
2017-09-22 21:38 ` William Casarin
2017-10-10 17:35 ` William Casarin
2017-10-10 19:54 ` Kyle Meyer
2017-10-11 1:45 ` William Casarin
2017-10-11 3:51 ` Kyle Meyer [this message]
2017-10-11 4:38 ` William Casarin
2017-10-12 19:28 ` William Casarin
2017-10-13 5:24 ` Kyle Meyer
2017-10-13 6:03 ` William Casarin
-- strict thread matches above, loose matches on Subject: below --
2017-09-21 16:34 William Casarin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871smae3zl.fsf@kyleam.com \
--to=kyle@kyleam.com \
--cc=jb55@jb55.com \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).