b4


Nameb4 JSON
Version 0.13.0 PyPI version JSON
download
home_pagehttps://git.kernel.org/pub/scm/utils/b4/b4.git/tree/README.rst
SummaryA tool to work with public-inbox and patch archives
upload_time2024-02-15 18:48:13
maintainer
docs_urlNone
authorKonstantin Ryabitsev
requires_python>=3.8
licenseGPLv2+
keywords git public-inbox lore.kernel.org patches
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            B4
==
----------------------------------------------------
Work with code submissions in a public-inbox archive
----------------------------------------------------

:Author:    mricon@kernel.org
:Date:      2024-02-15
:Copyright: The Linux Foundation and contributors
:License:   GPLv2+
:Version:   0.13.0
:Manual section: 5

SYNOPSIS
--------
b4 {mbox,am,shazam,pr,diff,ty,kr,prep,send,trailers} [options]

DESCRIPTION
-----------
This is a helper utility to work with patches and pull requests made
available via a public-inbox archive like lore.kernel.org. It is
written to make it easier to participate in a patch-based workflows,
like those used in the Linux kernel development.

The name "b4" was chosen for ease of typing and because B-4 was the
precursor to Lore and Data in the Star Trek universe.

Full documentation is available on https://b4.docs.kernel.org/.

SUBCOMMANDS
-----------
Maintainer-oriented:

* *mbox*: Download a thread as an mbox file
* *am*: Create an mbox file that is ready to git-am
* *shazam*: Apply patch series to git repositories
* *pr*: Work with pull requests
* *diff*: Show range-diff style diffs between patch versions
* *ty*: Create templated replies for processed patches and pull requests
* *kr*: (EXPERIMENTAL) Operate on patatt-compatible keyrings

Contributor-oriented:

* *prep*: (EXPERIMENTAL) prepare your series for submission
* *send*: (EXPERIMENTAL) send your series for review on distribution lists
* *trailers*: (EXPERIMENTAL) retrieve and apply code-review trailers

OPTIONS
-------
-h, --help            show this help message and exit
-d, --debug           Add more debugging info to the output (default: False)
-q, --quiet           Output critical information only (default: False)
-n, --no-interactive  Do not ask any interactive questions (default: False)
--offline-mode        Do not perform any network queries (default: False)
--no-stdin            Disable TTY detection for stdin (default: False)

SUBCOMMAND OPTIONS
------------------

b4 mbox
~~~~~~~

This command allows retrieving entire threads from a remote public-inbox
instance. The resulting mbox file can then be opened with most MUA
clients for actions like replying to conversations or reviewing patch
submissions.

usage:
  b4 mbox [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-o OUTDIR] [-c] [-n WANTNAME] [-M] [-f] [msgid]

positional arguments:
  msgid                 Message ID to process, or pipe a raw message

options:
  -h, --help            show this help message and exit
  -p USEPROJECT, --use-project USEPROJECT
                        Use a specific project instead of default (linux-mm, linux-hardening, etc)
  -m LOCALMBOX, --use-local-mbox LOCALMBOX
                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)
  --stdin-pipe-sep STDIN_PIPE_SEP
                        When accepting messages on stdin, split using this pipe separator string
  -C, --no-cache
                        Do not use local cache
  --single-message
                        Only retrieve the message matching the msgid and ignore the rest of the thread
  -o OUTDIR, --outdir OUTDIR
                        Output into this directory (or use - to output mailbox contents to stdout)
  -c, --check-newer-revisions
                        Check if newer patch revisions exist
  -n WANTNAME, --mbox-name WANTNAME
                        Filename to name the mbox destination
  -M, --save-as-maildir
                        Save as maildir (avoids mbox format ambiguities)
  -f, --filter-dupes
                        When adding messages to existing maildir, filter out duplicates
  -r MBOX, --refetch MBOX
                        Refetch all messages in specified mbox with their original headers
                             

*Example*: b4 mbox 20200313231252.64999-1-keescook@chromium.org

b4 am
~~~~~

This command allows retrieving threads from a public-inbox instance and
preparing them for applying to a git repository using the "git am"
command. It will automatically perform the following operations:

* pick the latest submitted version of the series (it can check for
  newer threads using ``-c`` as well)
* check DKIM signatures and patatt attestation on all patches and code
  review messages
* collate all submitted code-review trailers (Reviewed-by, Acked-by,
  etc) and put them into the commit message
* add your own Signed-off-by trailer (with ``-s``)
* reroll series from partial updates (e.g. someone submits a v2 of a
  single patch instead of rerolling the entire series)
* guess where in the tree history the patches belong, if the exact
  commit-base is not specified (with ``-g``)
* prepare the tree for a 3-way merge (with ``-3``)
* cherry-pick a subset of patches from a large series (with ``-P``)

usage:
  b4 am [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-o OUTDIR] [-c] [-n WANTNAME] [-M] [-v WANTVER] [-t] [-S] [-T] [-s] [-l] [-P CHERRYPICK] [--cc-trailers] [--no-parent] [--allow-unicode-control-chars] [-Q] [-g] [-b GUESSBRANCH [GUESSBRANCH ...]] [--guess-lookback GUESSDAYS] [-3] [--no-cover] [--no-partial-reroll] [msgid]

positional arguments:
  msgid                 Message ID to process, or pipe a raw message

options:
  -h, --help            show this help message and exit
  -p USEPROJECT, --use-project USEPROJECT
                        Use a specific project instead of default (linux-mm, linux-hardening, etc)
  -m LOCALMBOX, --use-local-mbox LOCALMBOX
                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)
  --stdin-pipe-sep STDIN_PIPE_SEP
                        When accepting messages on stdin, split using this pipe separator string
  -C, --no-cache
                        Do not use local cache
  --single-message
                        Only retrieve the message matching the msgid and ignore the rest of the thread
  -o OUTDIR, --outdir OUTDIR
                        Output into this directory (or use - to output mailbox contents to stdout)
  -c, --check-newer-revisions
                        Check if newer patch revisions exist
  -n WANTNAME, --mbox-name WANTNAME
                        Filename to name the mbox destination
  -M, --save-as-maildir
                        Save as maildir (avoids mbox format ambiguities)
  --single-message
                        Only retrieve the message matching the msgid and ignore the rest of the thread
  -v WANTVER, --use-version WANTVER
                        Get a specific version of the patch/series
  -S, --sloppy-trailers
                        Apply trailers without email address match checking
  -T, --no-add-trailers
                        Do not add or sort any trailers
  -s, --add-my-sob
                        Add your own signed-off-by to every patch
  -l, --add-link
                        Add a Link: with message-id lookup URL to every patch
  -P CHERRYPICK, --cherry-pick CHERRYPICK
                        Cherry-pick a subset of patches (e.g. "-P 1-2,4,6-", "-P _" to use just the msgid specified, or "-P *globbing*" to match on commit subject)
  --cc-trailers
                        Copy all Cc'd addresses into Cc: trailers
  --no-parent
                        Break thread at the msgid specified and ignore any parent messages
  --allow-unicode-control-chars
                        Allow unicode control characters (very rarely legitimate)
  -Q, --quilt-ready
                        Save patches in a quilt-ready folder
  -g, --guess-base
                        Try to guess the base of the series (if not specified)

  -b GUESSBRANCH [GUESSBRANCH ...], --guess-branch GUESSBRANCH [GUESSBRANCH ...]
                        When guessing base, restrict to this branch (use with -g)

  --guess-lookback GUESSDAYS
                        When guessing base, go back this many days from the patch date (default: 2 weeks)
  -3, --prep-3way
                        Prepare for a 3-way merge (tries to ensure that all index blobs exist by making a fake commit range)
  --no-cover
                        Do not save the cover letter (on by default when using -o -)
  --no-partial-reroll
                        Do not reroll partial series when detected

*Example*: b4 am 20200313231252.64999-1-keescook@chromium.org

b4 shazam
~~~~~~~~~

This is very similar to **b4 am**, but will also apply patches
directly to the current git tree using ``git am``. Alternatively, when
used with ``-H``, it can fetch the patch series into ``FETCH_HEAD`` as
if it were a pull request, so it can be reviewed and merged. In this
case, the cover letter is used as a template for the merge commit.

If you want to automatically invoke git-merge, you can use ``-M``
instead of ``-H``.

usage:
  b4 shazam [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-v WANTVER] [-t] [-S] [-T] [-s] [-l] [-P CHERRYPICK] [--cc-trailers] [--no-parent] [--allow-unicode-control-chars] [-H | -M] [--guess-lookback GUESSDAYS] [msgid]

positional arguments:
  msgid                 Message ID to process, or pipe a raw message

options:
  -h, --help            show this help message and exit
  -p USEPROJECT, --use-project USEPROJECT
                        Use a specific project instead of default (linux-mm, linux-hardening, etc)
  -m LOCALMBOX, --use-local-mbox LOCALMBOX
                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)
  --stdin-pipe-sep STDIN_PIPE_SEP
                        When accepting messages on stdin, split using this pipe separator string
  -C, --no-cache        Do not use local cache
  --single-message
                        Only retrieve the message matching the msgid and ignore the rest of the thread
  -v WANTVER, --use-version WANTVER
                        Get a specific version of the patch/series
  -S, --sloppy-trailers
                        Apply trailers without email address match checking
  -T, --no-add-trailers
                        Do not add or sort any trailers
  -s, --add-my-sob      Add your own signed-off-by to every patch
  -l, --add-link        Add a Link: with message-id lookup URL to every patch
  -P CHERRYPICK, --cherry-pick CHERRYPICK
                        Cherry-pick a subset of patches (e.g. "-P 1-2,4,6-", "-P _" to use just the msgid specified, or "-P *globbing*" to match on commit subject)
  --cc-trailers         Copy all Cc'd addresses into Cc: trailers
  --no-parent           Break thread at the msgid specified and ignore any parent messages
  --allow-unicode-control-chars
                        Allow unicode control characters (very rarely legitimate)
  -H, --make-fetch-head
                        Attempt to treat series as a pull request and fetch it into FETCH_HEAD
  -M, --merge
                        Attempt to merge series as if it were a pull request (execs git-merge)
  --guess-lookback GUESSDAYS
                        (use with -H or -M) When guessing base, go back this many days from the patch date (default: 3 weeks)
  --merge-base COMMIT
                        (use with -H or -M) Force this base when merging

*Example*: b4 shazam -H 20200313231252.64999-1-keescook@chromium.org

b4 pr
~~~~~
This command is for working with pull requests submitted using
``git-request-pull``.

usage:
  b4 pr [-h] [-g GITDIR] [-b BRANCH] [-c] [-e] [-o OUTMBOX] [msgid]

positional arguments:
  msgid                 Message ID to process, or pipe a raw message

optional arguments:
  -h, --help            show this help message and exit
  -g GITDIR, --gitdir GITDIR
                        Operate on this git tree instead of current dir
  -b BRANCH, --branch BRANCH
                        Check out FETCH_HEAD into this branch after fetching
  -c, --check           Check if pull request has already been applied
  -e, --explode         Convert a pull request into an mbox full of patches
  -o OUTMBOX, --output-mbox OUTMBOX
                        Save exploded messages into this mailbox (default: msgid.mbx)
  -f MAILFROM, --from-addr MAILFROM
                        Use this From: in exploded messages (use with -e)

*Example*: b4 pr 202003292120.2BDCB41@keescook

b4 ty
~~~~~
usage:
  b4 ty [-h] [-g GITDIR] [-o OUTDIR] [-l] [-t THANK_FOR [THANK_FOR ...]] [-d DISCARD [DISCARD ...]] [-a] [-b BRANCH] [--since SINCE] [-S] [--dry-run]

optional arguments:
  -h, --help            show this help message and exit
  -g GITDIR, --gitdir GITDIR
                        Operate on this git tree instead of current dir
  -o OUTDIR, --outdir OUTDIR
                        Write thanks files into this dir (default=.)
  -l, --list            List pull requests and patch series you have retrieved
  -t THANK_FOR, --thank-for THANK_FOR
                        Generate thankyous for specific entries from -l (e.g.: 1,3-5,7-; or "all")
  -d DISCARD, --discard DISCARD
                        Discard specific messages from -l (e.g.: 1,3-5,7-; or "all")
  -a, --auto            Use the Auto-Thankanator gun to figure out what got applied/merged
  -b BRANCH, --branch BRANCH
                        The branch to check against, instead of current
  --since SINCE         The --since option to use when auto-matching patches (default=1.week)
  -S, --send-email      Send email instead of writing out .thanks files
  --dry-run             Print out emails instead of sending them
  --pw-set-state PW_STATE
                        Set this patchwork state instead of default (use with -a, -t or -d)

.. note::

   To send mails directly using -S, you should have a configured
   [sendemail] section somewhere in your applicable git configuration
   files (global or in-tree).

*Example*: b4 ty -aS --dry-run

b4 diff
~~~~~~~
usage:
  b4 diff [-h] [-g GITDIR] [-p USEPROJECT] [-C] [-v WANTVERS [WANTVERS ...]] [-n] [-o OUTDIFF] [-c] [-m AMBOX AMBOX] [msgid]

positional arguments:
  msgid                 Message ID to process, pipe a raw message, or use -m

optional arguments:

  -h, --help            show this help message and exit
  -g GITDIR, --gitdir GITDIR
                        Operate on this git tree instead of current dir
  -p USEPROJECT, --use-project USEPROJECT
                        Use a specific project instead of guessing (linux-mm, linux-hardening, etc)
  -C, --no-cache        Do not use local cache

  -v WANTVERS [WANTVERS ...], --compare-versions WANTVERS [WANTVERS ...]
                        Compare specific versions instead of latest and one before that, e.g. -v 3 5

  -n, --no-diff
                        Do not generate a diff, just show the command to do it

  -o OUTDIFF, --output-diff OUTDIFF
                        Save diff into this file instead of outputting to stdout
  -c, --color
                        Force color output even when writing to file

  -m AMBOX AMBOX, --compare-am-mboxes AMBOX AMBOX
                        Compare two mbx files prepared with "b4 am"

*Example*: b4 diff 20200526205322.23465-1-mic@digikod.net

b4 kr
~~~~~
usage:
  b4 kr [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [--show-keys] [msgid]

positional arguments:
  msgid                 Message ID to process, or pipe a raw message

optional arguments:
  -h, --help            show this help message and exit
  -p USEPROJECT, --use-project USEPROJECT
                        Use a specific project instead of guessing (linux-mm, linux-hardening, etc)
  -m LOCALMBOX, --use-local-mbox LOCALMBOX
                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)
  --stdin-pipe-sep STDIN_PIPE_SEP
                        When accepting messages on stdin, split using this pipe separator string
  -C, --no-cache        Do not use local cache
  --show-keys           Show all developer keys from the thread

*Example*: b4 kr --show-keys 20210521184811.617875-1-konstantin@linuxfoundation.org

b4 prep
~~~~~~~
usage:
  b4 prep [-h] [-c | -p OUTPUT_DIR | --edit-cover | --show-revision | --force-revision N | --compare-to vN | --manual-reroll COVER_MSGID | --set-prefixes PREFIX [PREFIX ...] | --show-info [PARAM] ] | [ --cleanup [BRANCHNAME] ] [-n NEW_SERIES_NAME] [-f FORK_POINT] [-F MSGID] [-e ENROLL_BASE]

options:
  -h, --help            show this help message and exit
  -c, --auto-to-cc      Automatically populate cover letter trailers with To and Cc addresses
  -p OUTPUT_DIR, --format-patch OUTPUT_DIR
                        Output prep-tracked commits as patches
  --edit-cover          Edit the cover letter in your defined $EDITOR (or core.editor)
  --show-revision       Show current series revision number
  --force-revision N    Force revision to be this number instead
  --compare-to vN       Display a range-diff to previously sent revision N
  --manual-reroll COVER_MSGID
                        Mark current revision as sent and reroll (requires cover letter msgid)

  --set-prefixes PREFIX [PREFIX ...]
                        Extra prefixes to add to [PATCH] (e.g.: RFC mydrv)

  --show-info [PARAM]
                        Show series info in a format that can be passed to other tools
  --cleanup [BRANCHNAME]
                        Archive and delete obsolete prep-managed branches

Create new branch:
  Create a new branch for working on patch series

  -n NEW_SERIES_NAME, --new NEW_SERIES_NAME
                        Create a new branch for working on a patch series
  -f FORK_POINT, --fork-point FORK_POINT
                        When creating a new branch, use this fork point instead of HEAD
  -F MSGID, --from-thread MSGID
                        When creating a new branch, use this thread

Enroll existing branch:
  Enroll existing branch for prep work

  -e ENROLL_BASE, --enroll ENROLL_BASE
                        Enroll current branch, using the passed tag, branch, or commit as fork base

b4 send
~~~~~~~
usage:
  b4 send [-h] [-d | -o OUTPUT_DIR | --preview-to ADDR [ADDR ...] | --reflect] [--no-trailer-to-cc] [--to ADDR [ADDR ...]] [--cc ADDR [ADDR ...]] [--not-me-too] [--resend [vN]] [--no-sign] [--web-auth-new] [--web-auth-verify VERIFY_TOKEN]

options:
  -h, --help            show this help message and exit
  -d, --dry-run         Do not send, just dump out raw smtp messages to the stdout

  --preview-to ADDR [ADDR ...]
                        Send everything for a pre-review to specified addresses instead of actual recipients

  -o OUTPUT_DIR, --output-dir OUTPUT_DIR
                        Do not send, write raw messages to this directory (forces --dry-run)

  --reflect
                        Send everything to yourself instead of the actual recipients

  --no-trailer-to-cc
                        Do not add any addresses found in the cover or patch trailers to To: or Cc:

  --to ADDR [ADDR ...]
                        Addresses to add to the To: list

  --cc ADDR [ADDR ...]
                        Addresses to add to the Cc: list

  --not-me-too
                        Remove yourself from the To: or Cc: list

  --resend [vN]
                        Resend a previously sent version of the series

  --no-sign
                        Do not add the cryptographic attestation signature header

Web submission:
  Authenticate with the web submission endpoint

  --web-auth-new        Initiate a new web authentication request
  --web-auth-verify VERIFY_TOKEN
                        Submit the token received via verification email

b4 trailers
~~~~~~~~~~~
usage:
  b4 trailers [-h] [-u] [-S] [-F MSGID] [--since SINCE]

options:
  -h, --help            show this help message and exit
  -u, --update          Update branch commits with latest received trailers
  -S, --sloppy-trailers
                        Apply trailers without email address match checking
  -F MSGID, --trailers-from MSGID
                        Look for trailers in the thread with this msgid instead of using the series change-id
  --since SINCE         The --since option to use with -F when auto-matching patches (default=1.month)
  -m LOCALMBOX, --use-local-mbox LOCALMBOX
                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)
  --stdin-pipe-sep STDIN_PIPE_SEP
                        When accepting messages on stdin, split using this pipe separator string
  -C, --no-cache        Do not use local cache


CONFIGURATION
-------------
B4 configuration is handled via git-config(1), so you can store it in
either the toplevel $HOME/.gitconfig file, or in a per-repository
.git/config file if your workflow changes per project.

To see configuration options available, see online documentation at
https://b4.docs.kernel.org/en/latest/config.html

PROXYING REQUESTS
-----------------
Commands making remote HTTP requests may be configured to use a proxy by
setting the **HTTPS_PROXY** environment variable, as described in
https://docs.python-requests.org/en/latest/user/advanced/#proxies.

SUPPORT
-------
Please email tools@kernel.org with support requests, or browse the list
archive at https://lore.kernel.org/tools.

            

Raw data

            {
    "_id": null,
    "home_page": "https://git.kernel.org/pub/scm/utils/b4/b4.git/tree/README.rst",
    "name": "b4",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "git,public-inbox,lore.kernel.org,patches",
    "author": "Konstantin Ryabitsev",
    "author_email": "mricon@kernel.org",
    "download_url": "https://files.pythonhosted.org/packages/dd/3b/18698bedf57c8cd1d752f63555e654575f06c1b1343fb8a484bdfb6e4fa7/b4-0.13.0.tar.gz",
    "platform": null,
    "description": "B4\n==\n----------------------------------------------------\nWork with code submissions in a public-inbox archive\n----------------------------------------------------\n\n:Author:    mricon@kernel.org\n:Date:      2024-02-15\n:Copyright: The Linux Foundation and contributors\n:License:   GPLv2+\n:Version:   0.13.0\n:Manual section: 5\n\nSYNOPSIS\n--------\nb4 {mbox,am,shazam,pr,diff,ty,kr,prep,send,trailers} [options]\n\nDESCRIPTION\n-----------\nThis is a helper utility to work with patches and pull requests made\navailable via a public-inbox archive like lore.kernel.org. It is\nwritten to make it easier to participate in a patch-based workflows,\nlike those used in the Linux kernel development.\n\nThe name \"b4\" was chosen for ease of typing and because B-4 was the\nprecursor to Lore and Data in the Star Trek universe.\n\nFull documentation is available on https://b4.docs.kernel.org/.\n\nSUBCOMMANDS\n-----------\nMaintainer-oriented:\n\n* *mbox*: Download a thread as an mbox file\n* *am*: Create an mbox file that is ready to git-am\n* *shazam*: Apply patch series to git repositories\n* *pr*: Work with pull requests\n* *diff*: Show range-diff style diffs between patch versions\n* *ty*: Create templated replies for processed patches and pull requests\n* *kr*: (EXPERIMENTAL) Operate on patatt-compatible keyrings\n\nContributor-oriented:\n\n* *prep*: (EXPERIMENTAL) prepare your series for submission\n* *send*: (EXPERIMENTAL) send your series for review on distribution lists\n* *trailers*: (EXPERIMENTAL) retrieve and apply code-review trailers\n\nOPTIONS\n-------\n-h, --help            show this help message and exit\n-d, --debug           Add more debugging info to the output (default: False)\n-q, --quiet           Output critical information only (default: False)\n-n, --no-interactive  Do not ask any interactive questions (default: False)\n--offline-mode        Do not perform any network queries (default: False)\n--no-stdin            Disable TTY detection for stdin (default: False)\n\nSUBCOMMAND OPTIONS\n------------------\n\nb4 mbox\n~~~~~~~\n\nThis command allows retrieving entire threads from a remote public-inbox\ninstance. The resulting mbox file can then be opened with most MUA\nclients for actions like replying to conversations or reviewing patch\nsubmissions.\n\nusage:\n  b4 mbox [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-o OUTDIR] [-c] [-n WANTNAME] [-M] [-f] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, or pipe a raw message\n\noptions:\n  -h, --help            show this help message and exit\n  -p USEPROJECT, --use-project USEPROJECT\n                        Use a specific project instead of default (linux-mm, linux-hardening, etc)\n  -m LOCALMBOX, --use-local-mbox LOCALMBOX\n                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)\n  --stdin-pipe-sep STDIN_PIPE_SEP\n                        When accepting messages on stdin, split using this pipe separator string\n  -C, --no-cache\n                        Do not use local cache\n  --single-message\n                        Only retrieve the message matching the msgid and ignore the rest of the thread\n  -o OUTDIR, --outdir OUTDIR\n                        Output into this directory (or use - to output mailbox contents to stdout)\n  -c, --check-newer-revisions\n                        Check if newer patch revisions exist\n  -n WANTNAME, --mbox-name WANTNAME\n                        Filename to name the mbox destination\n  -M, --save-as-maildir\n                        Save as maildir (avoids mbox format ambiguities)\n  -f, --filter-dupes\n                        When adding messages to existing maildir, filter out duplicates\n  -r MBOX, --refetch MBOX\n                        Refetch all messages in specified mbox with their original headers\n                            \u00a0\n\n*Example*: b4 mbox 20200313231252.64999-1-keescook@chromium.org\n\nb4 am\n~~~~~\n\nThis command allows retrieving threads from a public-inbox instance and\npreparing them for applying to a git repository using the \"git am\"\ncommand. It will automatically perform the following operations:\n\n* pick the latest submitted version of the series (it can check for\n  newer threads using ``-c`` as well)\n* check DKIM signatures and patatt attestation on all patches and code\n  review messages\n* collate all submitted code-review trailers (Reviewed-by, Acked-by,\n  etc) and put them into the commit message\n* add your own Signed-off-by trailer (with ``-s``)\n* reroll series from partial updates (e.g. someone submits a v2 of a\n  single patch instead of rerolling the entire series)\n* guess where in the tree history the patches belong, if the exact\n  commit-base is not specified (with ``-g``)\n* prepare the tree for a 3-way merge (with ``-3``)\n* cherry-pick a subset of patches from a large series (with ``-P``)\n\nusage:\n  b4 am [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-o OUTDIR] [-c] [-n WANTNAME] [-M] [-v WANTVER] [-t] [-S] [-T] [-s] [-l] [-P CHERRYPICK] [--cc-trailers] [--no-parent] [--allow-unicode-control-chars] [-Q] [-g] [-b GUESSBRANCH [GUESSBRANCH ...]] [--guess-lookback GUESSDAYS] [-3] [--no-cover] [--no-partial-reroll] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, or pipe a raw message\n\noptions:\n  -h, --help            show this help message and exit\n  -p USEPROJECT, --use-project USEPROJECT\n                        Use a specific project instead of default (linux-mm, linux-hardening, etc)\n  -m LOCALMBOX, --use-local-mbox LOCALMBOX\n                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)\n  --stdin-pipe-sep STDIN_PIPE_SEP\n                        When accepting messages on stdin, split using this pipe separator string\n  -C, --no-cache\n                        Do not use local cache\n  --single-message\n                        Only retrieve the message matching the msgid and ignore the rest of the thread\n  -o OUTDIR, --outdir OUTDIR\n                        Output into this directory (or use - to output mailbox contents to stdout)\n  -c, --check-newer-revisions\n                        Check if newer patch revisions exist\n  -n WANTNAME, --mbox-name WANTNAME\n                        Filename to name the mbox destination\n  -M, --save-as-maildir\n                        Save as maildir (avoids mbox format ambiguities)\n  --single-message\n                        Only retrieve the message matching the msgid and ignore the rest of the thread\n  -v WANTVER, --use-version WANTVER\n                        Get a specific version of the patch/series\n  -S, --sloppy-trailers\n                        Apply trailers without email address match checking\n  -T, --no-add-trailers\n                        Do not add or sort any trailers\n  -s, --add-my-sob\n                        Add your own signed-off-by to every patch\n  -l, --add-link\n                        Add a Link: with message-id lookup URL to every patch\n  -P CHERRYPICK, --cherry-pick CHERRYPICK\n                        Cherry-pick a subset of patches (e.g. \"-P 1-2,4,6-\", \"-P _\" to use just the msgid specified, or \"-P *globbing*\" to match on commit subject)\n  --cc-trailers\n                        Copy all Cc'd addresses into Cc: trailers\n  --no-parent\n                        Break thread at the msgid specified and ignore any parent messages\n  --allow-unicode-control-chars\n                        Allow unicode control characters (very rarely legitimate)\n  -Q, --quilt-ready\n                        Save patches in a quilt-ready folder\n  -g, --guess-base\n                        Try to guess the base of the series (if not specified)\n\n  -b GUESSBRANCH [GUESSBRANCH ...], --guess-branch GUESSBRANCH [GUESSBRANCH ...]\n                        When guessing base, restrict to this branch (use with -g)\n\n  --guess-lookback GUESSDAYS\n                        When guessing base, go back this many days from the patch date (default: 2 weeks)\n  -3, --prep-3way\n                        Prepare for a 3-way merge (tries to ensure that all index blobs exist by making a fake commit range)\n  --no-cover\n                        Do not save the cover letter (on by default when using -o -)\n  --no-partial-reroll\n                        Do not reroll partial series when detected\n\n*Example*: b4 am 20200313231252.64999-1-keescook@chromium.org\n\nb4 shazam\n~~~~~~~~~\n\nThis is very similar to **b4 am**, but will also apply patches\ndirectly to the current git tree using ``git am``. Alternatively, when\nused with ``-H``, it can fetch the patch series into ``FETCH_HEAD`` as\nif it were a pull request, so it can be reviewed and merged. In this\ncase, the cover letter is used as a template for the merge commit.\n\nIf you want to automatically invoke git-merge, you can use ``-M``\ninstead of ``-H``.\n\nusage:\n  b4 shazam [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [-v WANTVER] [-t] [-S] [-T] [-s] [-l] [-P CHERRYPICK] [--cc-trailers] [--no-parent] [--allow-unicode-control-chars] [-H | -M] [--guess-lookback GUESSDAYS] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, or pipe a raw message\n\noptions:\n  -h, --help            show this help message and exit\n  -p USEPROJECT, --use-project USEPROJECT\n                        Use a specific project instead of default (linux-mm, linux-hardening, etc)\n  -m LOCALMBOX, --use-local-mbox LOCALMBOX\n                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)\n  --stdin-pipe-sep STDIN_PIPE_SEP\n                        When accepting messages on stdin, split using this pipe separator string\n  -C, --no-cache        Do not use local cache\n  --single-message\n                        Only retrieve the message matching the msgid and ignore the rest of the thread\n  -v WANTVER, --use-version WANTVER\n                        Get a specific version of the patch/series\n  -S, --sloppy-trailers\n                        Apply trailers without email address match checking\n  -T, --no-add-trailers\n                        Do not add or sort any trailers\n  -s, --add-my-sob      Add your own signed-off-by to every patch\n  -l, --add-link        Add a Link: with message-id lookup URL to every patch\n  -P CHERRYPICK, --cherry-pick CHERRYPICK\n                        Cherry-pick a subset of patches (e.g. \"-P 1-2,4,6-\", \"-P _\" to use just the msgid specified, or \"-P *globbing*\" to match on commit subject)\n  --cc-trailers         Copy all Cc'd addresses into Cc: trailers\n  --no-parent           Break thread at the msgid specified and ignore any parent messages\n  --allow-unicode-control-chars\n                        Allow unicode control characters (very rarely legitimate)\n  -H, --make-fetch-head\n                        Attempt to treat series as a pull request and fetch it into FETCH_HEAD\n  -M, --merge\n                        Attempt to merge series as if it were a pull request (execs git-merge)\n  --guess-lookback GUESSDAYS\n                        (use with -H or -M) When guessing base, go back this many days from the patch date (default: 3 weeks)\n  --merge-base COMMIT\n                        (use with -H or -M) Force this base when merging\n\n*Example*: b4 shazam -H 20200313231252.64999-1-keescook@chromium.org\n\nb4 pr\n~~~~~\nThis command is for working with pull requests submitted using\n``git-request-pull``.\n\nusage:\n  b4 pr [-h] [-g GITDIR] [-b BRANCH] [-c] [-e] [-o OUTMBOX] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, or pipe a raw message\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -g GITDIR, --gitdir GITDIR\n                        Operate on this git tree instead of current dir\n  -b BRANCH, --branch BRANCH\n                        Check out FETCH_HEAD into this branch after fetching\n  -c, --check           Check if pull request has already been applied\n  -e, --explode         Convert a pull request into an mbox full of patches\n  -o OUTMBOX, --output-mbox OUTMBOX\n                        Save exploded messages into this mailbox (default: msgid.mbx)\n  -f MAILFROM, --from-addr MAILFROM\n                        Use this From: in exploded messages (use with -e)\n\n*Example*: b4 pr 202003292120.2BDCB41@keescook\n\nb4 ty\n~~~~~\nusage:\n  b4 ty [-h] [-g GITDIR] [-o OUTDIR] [-l] [-t THANK_FOR [THANK_FOR ...]] [-d DISCARD [DISCARD ...]] [-a] [-b BRANCH] [--since SINCE] [-S] [--dry-run]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -g GITDIR, --gitdir GITDIR\n                        Operate on this git tree instead of current dir\n  -o OUTDIR, --outdir OUTDIR\n                        Write thanks files into this dir (default=.)\n  -l, --list            List pull requests and patch series you have retrieved\n  -t THANK_FOR, --thank-for THANK_FOR\n                        Generate thankyous for specific entries from -l (e.g.: 1,3-5,7-; or \"all\")\n  -d DISCARD, --discard DISCARD\n                        Discard specific messages from -l (e.g.: 1,3-5,7-; or \"all\")\n  -a, --auto            Use the Auto-Thankanator gun to figure out what got applied/merged\n  -b BRANCH, --branch BRANCH\n                        The branch to check against, instead of current\n  --since SINCE         The --since option to use when auto-matching patches (default=1.week)\n  -S, --send-email      Send email instead of writing out .thanks files\n  --dry-run             Print out emails instead of sending them\n  --pw-set-state PW_STATE\n                        Set this patchwork state instead of default (use with -a, -t or -d)\n\n.. note::\n\n   To send mails directly using -S, you should have a configured\n   [sendemail] section somewhere in your applicable git configuration\n   files (global or in-tree).\n\n*Example*: b4 ty -aS --dry-run\n\nb4 diff\n~~~~~~~\nusage:\n  b4 diff [-h] [-g GITDIR] [-p USEPROJECT] [-C] [-v WANTVERS [WANTVERS ...]] [-n] [-o OUTDIFF] [-c] [-m AMBOX AMBOX] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, pipe a raw message, or use -m\n\noptional arguments:\n\n  -h, --help            show this help message and exit\n  -g GITDIR, --gitdir GITDIR\n                        Operate on this git tree instead of current dir\n  -p USEPROJECT, --use-project USEPROJECT\n                        Use a specific project instead of guessing (linux-mm, linux-hardening, etc)\n  -C, --no-cache        Do not use local cache\n\n  -v WANTVERS [WANTVERS ...], --compare-versions WANTVERS [WANTVERS ...]\n                        Compare specific versions instead of latest and one before that, e.g. -v 3 5\n\n  -n, --no-diff\n                        Do not generate a diff, just show the command to do it\n\n  -o OUTDIFF, --output-diff OUTDIFF\n                        Save diff into this file instead of outputting to stdout\n  -c, --color\n                        Force color output even when writing to file\n\n  -m AMBOX AMBOX, --compare-am-mboxes AMBOX AMBOX\n                        Compare two mbx files prepared with \"b4 am\"\n\n*Example*: b4 diff 20200526205322.23465-1-mic@digikod.net\n\nb4 kr\n~~~~~\nusage:\n  b4 kr [-h] [-p USEPROJECT] [-m LOCALMBOX] [-C] [--show-keys] [msgid]\n\npositional arguments:\n  msgid                 Message ID to process, or pipe a raw message\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -p USEPROJECT, --use-project USEPROJECT\n                        Use a specific project instead of guessing (linux-mm, linux-hardening, etc)\n  -m LOCALMBOX, --use-local-mbox LOCALMBOX\n                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)\n  --stdin-pipe-sep STDIN_PIPE_SEP\n                        When accepting messages on stdin, split using this pipe separator string\n  -C, --no-cache        Do not use local cache\n  --show-keys           Show all developer keys from the thread\n\n*Example*: b4 kr --show-keys 20210521184811.617875-1-konstantin@linuxfoundation.org\n\nb4 prep\n~~~~~~~\nusage:\n  b4 prep [-h] [-c | -p OUTPUT_DIR | --edit-cover | --show-revision | --force-revision N | --compare-to vN | --manual-reroll COVER_MSGID | --set-prefixes PREFIX [PREFIX ...] | --show-info [PARAM] ] | [ --cleanup [BRANCHNAME] ] [-n NEW_SERIES_NAME] [-f FORK_POINT] [-F MSGID] [-e ENROLL_BASE]\n\noptions:\n  -h, --help            show this help message and exit\n  -c, --auto-to-cc      Automatically populate cover letter trailers with To and Cc addresses\n  -p OUTPUT_DIR, --format-patch OUTPUT_DIR\n                        Output prep-tracked commits as patches\n  --edit-cover          Edit the cover letter in your defined $EDITOR (or core.editor)\n  --show-revision       Show current series revision number\n  --force-revision N    Force revision to be this number instead\n  --compare-to vN       Display a range-diff to previously sent revision N\n  --manual-reroll COVER_MSGID\n                        Mark current revision as sent and reroll (requires cover letter msgid)\n\n  --set-prefixes PREFIX [PREFIX ...]\n                        Extra prefixes to add to [PATCH] (e.g.: RFC mydrv)\n\n  --show-info [PARAM]\n                        Show series info in a format that can be passed to other tools\n  --cleanup [BRANCHNAME]\n                        Archive and delete obsolete prep-managed branches\n\nCreate new branch:\n  Create a new branch for working on patch series\n\n  -n NEW_SERIES_NAME, --new NEW_SERIES_NAME\n                        Create a new branch for working on a patch series\n  -f FORK_POINT, --fork-point FORK_POINT\n                        When creating a new branch, use this fork point instead of HEAD\n  -F MSGID, --from-thread MSGID\n                        When creating a new branch, use this thread\n\nEnroll existing branch:\n  Enroll existing branch for prep work\n\n  -e ENROLL_BASE, --enroll ENROLL_BASE\n                        Enroll current branch, using the passed tag, branch, or commit as fork base\n\nb4 send\n~~~~~~~\nusage:\n  b4 send [-h] [-d | -o OUTPUT_DIR | --preview-to ADDR [ADDR ...] | --reflect] [--no-trailer-to-cc] [--to ADDR [ADDR ...]] [--cc ADDR [ADDR ...]] [--not-me-too] [--resend [vN]] [--no-sign] [--web-auth-new] [--web-auth-verify VERIFY_TOKEN]\n\noptions:\n  -h, --help            show this help message and exit\n  -d, --dry-run         Do not send, just dump out raw smtp messages to the stdout\n\n  --preview-to ADDR [ADDR ...]\n                        Send everything for a pre-review to specified addresses instead of actual recipients\n\n  -o OUTPUT_DIR, --output-dir OUTPUT_DIR\n                        Do not send, write raw messages to this directory (forces --dry-run)\n\n  --reflect\n                        Send everything to yourself instead of the actual recipients\n\n  --no-trailer-to-cc\n                        Do not add any addresses found in the cover or patch trailers to To: or Cc:\n\n  --to ADDR [ADDR ...]\n                        Addresses to add to the To: list\n\n  --cc ADDR [ADDR ...]\n                        Addresses to add to the Cc: list\n\n  --not-me-too\n                        Remove yourself from the To: or Cc: list\n\n  --resend [vN]\n                        Resend a previously sent version of the series\n\n  --no-sign\n                        Do not add the cryptographic attestation signature header\n\nWeb submission:\n  Authenticate with the web submission endpoint\n\n  --web-auth-new        Initiate a new web authentication request\n  --web-auth-verify VERIFY_TOKEN\n                        Submit the token received via verification email\n\nb4 trailers\n~~~~~~~~~~~\nusage:\n  b4 trailers [-h] [-u] [-S] [-F MSGID] [--since SINCE]\n\noptions:\n  -h, --help            show this help message and exit\n  -u, --update          Update branch commits with latest received trailers\n  -S, --sloppy-trailers\n                        Apply trailers without email address match checking\n  -F MSGID, --trailers-from MSGID\n                        Look for trailers in the thread with this msgid instead of using the series change-id\n  --since SINCE         The --since option to use with -F when auto-matching patches (default=1.month)\n  -m LOCALMBOX, --use-local-mbox LOCALMBOX\n                        Instead of grabbing a thread from lore, process this mbox file (or - for stdin)\n  --stdin-pipe-sep STDIN_PIPE_SEP\n                        When accepting messages on stdin, split using this pipe separator string\n  -C, --no-cache        Do not use local cache\n\n\nCONFIGURATION\n-------------\nB4 configuration is handled via git-config(1), so you can store it in\neither the toplevel $HOME/.gitconfig file, or in a per-repository\n.git/config file if your workflow changes per project.\n\nTo see configuration options available, see online documentation at\nhttps://b4.docs.kernel.org/en/latest/config.html\n\nPROXYING REQUESTS\n-----------------\nCommands making remote HTTP requests may be configured to use a proxy by\nsetting the **HTTPS_PROXY** environment variable, as described in\nhttps://docs.python-requests.org/en/latest/user/advanced/#proxies.\n\nSUPPORT\n-------\nPlease email tools@kernel.org with support requests, or browse the list\narchive at https://lore.kernel.org/tools.\n",
    "bugtrack_url": null,
    "license": "GPLv2+",
    "summary": "A tool to work with public-inbox and patch archives",
    "version": "0.13.0",
    "project_urls": {
        "Community": "https://lore.kernel.org/tools",
        "Homepage": "https://git.kernel.org/pub/scm/utils/b4/b4.git/tree/README.rst"
    },
    "split_keywords": [
        "git",
        "public-inbox",
        "lore.kernel.org",
        "patches"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb39cc0736755e1a6a24f99bfc1bea1c9a775c9187fb51d335a18bb4f48e1532",
                "md5": "12af23b5b72465963de077bfc2b41b7f",
                "sha256": "44c14aaf8f81cb54635cff6b2c900d854eb7898f42264c445c992db5a021daba"
            },
            "downloads": -1,
            "filename": "b4-0.13.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "12af23b5b72465963de077bfc2b41b7f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 111114,
            "upload_time": "2024-02-15T18:48:09",
            "upload_time_iso_8601": "2024-02-15T18:48:09.671731Z",
            "url": "https://files.pythonhosted.org/packages/eb/39/cc0736755e1a6a24f99bfc1bea1c9a775c9187fb51d335a18bb4f48e1532/b4-0.13.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dd3b18698bedf57c8cd1d752f63555e654575f06c1b1343fb8a484bdfb6e4fa7",
                "md5": "d2fc00fce21867c08d627c2441c27f61",
                "sha256": "82ca24e5a0e2e686093cc5d5bf730501e872299e611c1b6fc1fef3e94b787414"
            },
            "downloads": -1,
            "filename": "b4-0.13.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d2fc00fce21867c08d627c2441c27f61",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 117870,
            "upload_time": "2024-02-15T18:48:13",
            "upload_time_iso_8601": "2024-02-15T18:48:13.201635Z",
            "url": "https://files.pythonhosted.org/packages/dd/3b/18698bedf57c8cd1d752f63555e654575f06c1b1343fb8a484bdfb6e4fa7/b4-0.13.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-15 18:48:13",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "b4"
}
        
Elapsed time: 0.18282s