* [bug#44625] [PATCH] gnu: Add b4.
@ 2020-11-14 0:39 Kyle Meyer
2020-11-14 2:14 ` zimoun
2020-11-15 20:18 ` bug#44625: " Christopher Baines
0 siblings, 2 replies; 6+ messages in thread
From: Kyle Meyer @ 2020-11-14 0:39 UTC (permalink / raw)
To: 44625
* gnu/packages/version-control.scm (b4): New variable.
---
b4 is focused on lore.kernel.org public-inbox archives, but it's useful for
any public-inbox [1] instance, including yhetil.org/guix-patches :). Here's
an example with a recent multi-patch thread that involves multiple versions.
$ # in the guix repo
$ git config b4.attestation-policy off
$ git config b4.midmask https://yhetil.org/guix-patches/%s
$ b4 am 20201028165112.28575-1-zimon.toutoune@gmail.com
The end result is a filtered mbox with the v2 patches. Also, because the
sender helpfully included the base commit, `b4 am' will use that information
in the instructions that it outputs.
If the above sounds useful to you but you'd prefer to work in Emacs, you
might be interested in piem (<https://git.kyleam.com/piem/about/>), which
includes a transient (i.e magit-popup's successor) interface to b4.
[1] https://public-inbox.org/
gnu/packages/version-control.scm | 41 ++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 16c70bd1a7..de7c961cea 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -2301,6 +2301,47 @@ (define-public grokmirror
based on a manifest file published by servers.")
(license license:gpl3+)))
+(define-public b4
+ (package
+ (name "b4")
+ (version "0.5.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.kernel.org/pub/scm/utils/b4/b4.git")
+ (commit (string-append "v" version))))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32 "1w11fiyspyncz2m7njrjfylgzch4azi7560ngd8i733wvjjhg3mj"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; No tests.
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-manpages
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((man (string-append (assoc-ref outputs "out")
+ "/man/man5/")))
+ (mkdir-p man)
+ (for-each (lambda (file) (install-file file man))
+ (find-files "man" "\\.[1-8]$")))
+ #t)))))
+ (inputs
+ `(("python-requests" ,python-requests)))
+ (home-page "https://git.kernel.org/pub/scm/utils/b4/b4.git")
+ (synopsis "Tool for working with patches in public-inbox archives")
+ (description "The @code{b4} command is designed to make it easier to
+participate in patch-based workflows for projects that have public-inbox
+archives. Features include
+@itemize
+@item downloading a thread's mbox given a message ID
+@item processing an mbox so that is ready to be fed to @code{git-am}
+@item creating templated replies for processed patches and pull requests
+@item submitting cryptographic attestation for patches.
+@end itemize")
+ (license license:gpl2+)))
+
(define-public git-annex-remote-rclone
(package
(name "git-annex-remote-rclone")
base-commit: 4e9b2e8ba26dd601df67f112852237d5df2f3341
--
2.29.2.454.gaff20da3a2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bug#44625] [PATCH] gnu: Add b4.
2020-11-14 0:39 [bug#44625] [PATCH] gnu: Add b4 Kyle Meyer
@ 2020-11-14 2:14 ` zimoun
2020-11-14 5:22 ` Kyle Meyer
2020-11-15 20:18 ` bug#44625: " Christopher Baines
1 sibling, 1 reply; 6+ messages in thread
From: zimoun @ 2020-11-14 2:14 UTC (permalink / raw)
To: Kyle Meyer, 44625
Hi Kyle,
I have not tried your patch, yet. And I have questions about tooling,
maybe it is not the right place to do so.
On Fri, 13 Nov 2020 at 19:39, Kyle Meyer <kyle@kyleam.com> wrote:
> b4 is focused on lore.kernel.org public-inbox archives, but it's useful for
> any public-inbox [1] instance, including yhetil.org/guix-patches :). Here's
> an example with a recent multi-patch thread that involves multiple versions.
Look super useful.
> $ # in the guix repo
> $ git config b4.attestation-policy off
> $ git config b4.midmask https://yhetil.org/guix-patches/%s
> $ b4 am 20201028165112.28575-1-zimon.toutoune@gmail.com
>
> The end result is a filtered mbox with the v2 patches. Also, because the
> sender helpfully included the base commit, `b4 am' will use that information
> in the instructions that it outputs.
You mean ’b4’ filters out the 2 Ludo’s messages when applying the 2
patches, right?
In this case, ’b4’ will also fetch the patches from yhetil.org, right?
If <issues.guix.gnu.org> exposes (somewhere?) the Message-ID (as we have
discussed [1]), then one user could browse, copy the Message-ID that
they is interested and paste locally as you explain above; without the
need to subscribe or use Emacs-Debbugs. Right?
BTW, I think that base commit should be strongly encouraged when
submitting patches. See [2] :-)
1; <https://yhetil.org/guix-devel/86sgbhz3fe.fsf@gmail.com>
2: <https://yhetil.org/guix-patches/20201012082003.19936-1-zimon.toutoune@gmail.com>
> If the above sounds useful to you but you'd prefer to work in Emacs, you
> might be interested in piem (<https://git.kyleam.com/piem/about/>), which
> includes a transient (i.e magit-popup's successor) interface to b4.
I have not tried either. Is it packaged for Guix?
Well, does b4 and piem works with worktree?
Currently, I am using Emacs and Notmuch. I have subscribed to
guix-patches and when I try a patch, I do:
| git gam the-branch-worktree
where ’gam’ is just ’-C ~/src/guix/wk/ am -3 --reject’. And depending
on the thread structure, sometimes I have to go patch by patch.
Using b4+piem, then reading the message, I will do ’M-x piem-b4-am’ and
whatever the thread structure, the patches sent as “in-reply-to“ will be
applied. Right?
(Aside messages including non inlined patches, if I read correctly the
doc.)
All the best,
simon
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#44625] [PATCH] gnu: Add b4.
2020-11-14 2:14 ` zimoun
@ 2020-11-14 5:22 ` Kyle Meyer
2020-11-14 13:36 ` zimoun
0 siblings, 1 reply; 6+ messages in thread
From: Kyle Meyer @ 2020-11-14 5:22 UTC (permalink / raw)
To: zimoun; +Cc: 44625
zimoun writes:
> On Fri, 13 Nov 2020 at 19:39, Kyle Meyer <kyle@kyleam.com> wrote:
>> $ # in the guix repo
>> $ git config b4.attestation-policy off
>> $ git config b4.midmask https://yhetil.org/guix-patches/%s
>> $ b4 am 20201028165112.28575-1-zimon.toutoune@gmail.com
>>
>> The end result is a filtered mbox with the v2 patches. Also, because the
>> sender helpfully included the base commit, `b4 am' will use that information
>> in the instructions that it outputs.
>
> You mean ’b4’ filters out the 2 Ludo’s messages when applying the 2
> patches, right?
Right, 'b4 am' will try to extract the patch messages for the latest (or
specified) version, discarding everything else. The end product is what
its documentation refers to as an "am-ready" mbox.
> In this case, ’b4’ will also fetch the patches from yhetil.org, right?
Yes. Without the midmask above, it would try to fetch from an archive
at <https://lore.kernel.org> instead.
> If <issues.guix.gnu.org> exposes (somewhere?) the Message-ID (as we have
> discussed [1]), then one user could browse, copy the Message-ID that
> they is interested and paste locally as you explain above; without the
> need to subscribe or use Emacs-Debbugs. Right?
Right, anybody can grab the mbox with just the message ID. b4 is taking
advantage of the fact that public-inbox makes it easy to download a
thread's mbox by specifying the message ID:
curl -fSsL https://yhetil.org/guix-patches/86ima8d6rh.fsf@tournier.info/t.mbox.gz | zless
> BTW, I think that base commit should be strongly encouraged when
> submitting patches. See [2] :-)
>
> 1; <https://yhetil.org/guix-devel/86sgbhz3fe.fsf@gmail.com>
> 2: <https://yhetil.org/guix-patches/20201012082003.19936-1-zimon.toutoune@gmail.com>
I very much agree (and remember https://github.com/magit/magit/issues/4028 :>)
>> If the above sounds useful to you but you'd prefer to work in Emacs, you
>> might be interested in piem (<https://git.kyleam.com/piem/about/>), which
>> includes a transient (i.e magit-popup's successor) interface to b4.
>
> I have not tried either. Is it packaged for Guix?
No. I'm too sheepish to package my own stuff and at this point I'm
aware of no other piem user :). Also I'm still not quite sure where I
want to go with it (and that answer probably largely depends on where
public-inbox goes with some planned features).
But there is a .guix.scm file in piem's repo that has a definition...
> Well, does b4 and piem works with worktree?
Yes. 'b4 am' stops at the am-ready patches, so it doesn't really care
at all. piem will go farther, checking out a branch and calling git-am
with the output of b4 am. It should play fine with worktrees (I use it
with one regularly), as long as :coderepo in piem-inboxes points to the
worktree you want to use.
Hmm, or reading ahead, now I'm wondering if you mean _creates_ a
worktree for applying the patch? In that case, no, piem doesn't do
that. It's not something I've considered before.
> Currently, I am using Emacs and Notmuch. I have subscribed to
> guix-patches and when I try a patch, I do:
>
> | git gam the-branch-worktree
>
> where ’gam’ is just ’-C ~/src/guix/wk/ am -3 --reject’. And depending
> on the thread structure, sometimes I have to go patch by patch.
>
> Using b4+piem, then reading the message, I will do ’M-x piem-b4-am’ and
> whatever the thread structure, the patches sent as “in-reply-to“ will be
> applied. Right?
Yes, you would invoke the piem-b4-am transient, select any options, and
then call piem-b4-am-from-mid ("a"). (The transient contains two other
commands, but they are essentially _just_ calling 'b4 am', stopping at
the am-ready mbox.)
As for which patches are applied, it depends on b4's analysis of the
thread. When you have piem-notmuch-mode enabled, piem tries first to
use the local notmuch database before downloading a thread from a
public-inbox instance [*]. The message ID from the current buffer is
used to generate the entire thread with notmuch, in the same way that
'GET /MID/t.mbox.gz' on a public-inbox instance grabs the whole thread.
At that point, it is up to 'b4 am' which patches are extracted; by
default, it prefers the latest version it finds in the thread, but you
can explicitly select a version with the --use-version argument in the
piem-b4-am transient.
[*] You can even get by without a public-inbox instance:
https://docs.kyleam.com/piem.html#Applying-patches-without-a-public_002dinbox-archive
> (Aside messages including non inlined patches, if I read correctly the
> doc.)
Correct, b4 only handles inline patches. There is another command,
piem-am, that will try to do something sensible with attached patches in
the current message, but things get a lot less fancy once b4 is out of
the equation.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#44625] [PATCH] gnu: Add b4.
2020-11-14 5:22 ` Kyle Meyer
@ 2020-11-14 13:36 ` zimoun
0 siblings, 0 replies; 6+ messages in thread
From: zimoun @ 2020-11-14 13:36 UTC (permalink / raw)
To: Kyle Meyer; +Cc: 44625
Hi,
Thank you for the explanations, drifting from the patch. :-)
On Sat, 14 Nov 2020 at 00:22, Kyle Meyer <kyle@kyleam.com> wrote:
>> BTW, I think that base commit should be strongly encouraged when
>> submitting patches. See [2] :-)
>
> I very much agree (and remember https://github.com/magit/magit/issues/4028 :>)
Yeah! And the last remaining piece if “git-send-email”. :-)
> Hmm, or reading ahead, now I'm wondering if you mean _creates_ a
> worktree for applying the patch? In that case, no, piem doesn't do
> that. It's not something I've considered before.
Yes, somehow. Generally, I create a new checked out worktree with a new
branch starting at base-commit, then I apply the patches in. Well, my
sequence looks like:
M-C-SPC M-w <base-commmit>
C-x b <magit-guix-master>
% c /path/to/wk/foo RET C-y RET foo RET
C-x b <message-with-patch>
| git gam foo
and I am not enough annoyed (yet!) to write some Emacs helper
functions. However, if b4+piem could do that for me, should be
awesome. :-)
All the best,
simon
PS:
After a discussion with Bastien and when I let my imagination goes far
away, it could be nice to something like:
<https://updates.orgmode.org/>
bridging <issues.guix.gnu.org> and
<lists.gnu.org/archive/html/{{bug,help}-guix,guix-{devel,patches}}>
(or an instance of public-inbox as <yhetil.org>)
and <ci.guix.gnu.org> and <data.guix.gnu.org>,
even maybe <logs.guix.gnu.org>.
The email-based workflow with some fancy interfaces to be welcoming with
new contributors (smooth the learning curve).
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#44625: [PATCH] gnu: Add b4.
2020-11-14 0:39 [bug#44625] [PATCH] gnu: Add b4 Kyle Meyer
2020-11-14 2:14 ` zimoun
@ 2020-11-15 20:18 ` Christopher Baines
2020-11-15 20:53 ` [bug#44625] " Kyle Meyer
1 sibling, 1 reply; 6+ messages in thread
From: Christopher Baines @ 2020-11-15 20:18 UTC (permalink / raw)
To: Kyle Meyer; +Cc: 44625-done
[-- Attachment #1: Type: text/plain, Size: 3694 bytes --]
Kyle Meyer <kyle@kyleam.com> writes:
> * gnu/packages/version-control.scm (b4): New variable.
> ---
>
> b4 is focused on lore.kernel.org public-inbox archives, but it's useful for
> any public-inbox [1] instance, including yhetil.org/guix-patches :). Here's
> an example with a recent multi-patch thread that involves multiple versions.
>
> $ # in the guix repo
> $ git config b4.attestation-policy off
> $ git config b4.midmask https://yhetil.org/guix-patches/%s
> $ b4 am 20201028165112.28575-1-zimon.toutoune@gmail.com
>
> The end result is a filtered mbox with the v2 patches. Also, because the
> sender helpfully included the base commit, `b4 am' will use that information
> in the instructions that it outputs.
>
> If the above sounds useful to you but you'd prefer to work in Emacs, you
> might be interested in piem (<https://git.kyleam.com/piem/about/>), which
> includes a transient (i.e magit-popup's successor) interface to b4.
>
> [1] https://public-inbox.org/
n>
> gnu/packages/version-control.scm | 41 ++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
> index 16c70bd1a7..de7c961cea 100644
> --- a/gnu/packages/version-control.scm
> +++ b/gnu/packages/version-control.scm
> @@ -2301,6 +2301,47 @@ (define-public grokmirror
> based on a manifest file published by servers.")
> (license license:gpl3+)))
>
> +(define-public b4
> + (package
> + (name "b4")
> + (version "0.5.2")
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://git.kernel.org/pub/scm/utils/b4/b4.git")
> + (commit (string-append "v" version))))
> + (file-name (string-append name "-" version "-checkout"))
> + (sha256
> + (base32 "1w11fiyspyncz2m7njrjfylgzch4azi7560ngd8i733wvjjhg3mj"))))
> + (build-system python-build-system)
> + (arguments
> + `(#:tests? #f ; No tests.
> + #:phases
> + (modify-phases %standard-phases
> + (add-after 'install 'install-manpages
> + (lambda* (#:key outputs #:allow-other-keys)
> + (let ((man (string-append (assoc-ref outputs "out")
> + "/man/man5/")))
> + (mkdir-p man)
> + (for-each (lambda (file) (install-file file man))
> + (find-files "man" "\\.[1-8]$")))
> + #t)))))
> + (inputs
> + `(("python-requests" ,python-requests)))
> + (home-page "https://git.kernel.org/pub/scm/utils/b4/b4.git")
> + (synopsis "Tool for working with patches in public-inbox archives")
> + (description "The @code{b4} command is designed to make it easier to
> +participate in patch-based workflows for projects that have public-inbox
> +archives. Features include
> +@itemize
> +@item downloading a thread's mbox given a message ID
> +@item processing an mbox so that is ready to be fed to @code{git-am}
> +@item creating templated replies for processed patches and pull requests
> +@item submitting cryptographic attestation for patches.
> +@end itemize")
> + (license license:gpl2+)))
> +
> (define-public git-annex-remote-rclone
> (package
> (name "git-annex-remote-rclone")
>
> base-commit: 4e9b2e8ba26dd601df67f112852237d5df2f3341
Thanks Kyle, I tweaked the formatting of the description, just adding a
newline as I thought it looked better, and pushed this to master as
3b77ba78684e201382b1c28f2618252205891568.
Thanks again,
Chris
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 987 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#44625] [PATCH] gnu: Add b4.
2020-11-15 20:18 ` bug#44625: " Christopher Baines
@ 2020-11-15 20:53 ` Kyle Meyer
0 siblings, 0 replies; 6+ messages in thread
From: Kyle Meyer @ 2020-11-15 20:53 UTC (permalink / raw)
To: Christopher Baines; +Cc: 44625
Christopher Baines writes:
> Thanks Kyle, I tweaked the formatting of the description, just adding a
> newline as I thought it looked better, and pushed this to master as
> 3b77ba78684e201382b1c28f2618252205891568.
The tweaked formatting looks good to me.
Thanks!
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-11-15 20:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-14 0:39 [bug#44625] [PATCH] gnu: Add b4 Kyle Meyer
2020-11-14 2:14 ` zimoun
2020-11-14 5:22 ` Kyle Meyer
2020-11-14 13:36 ` zimoun
2020-11-15 20:18 ` bug#44625: " Christopher Baines
2020-11-15 20:53 ` [bug#44625] " Kyle Meyer
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.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).