Provided by: aerc_0.20.0-1_amd64 bug

NAME

       aerc-patch - local patch management for aerc(1)

SYNOPSIS

       aerc  provides  support  for  managing local patch sets. In an email-based software development workflow,
       there are usually many different locally applied patch series for testing  and  reviewing.  Managing  the
       local  repository  can thus be challenging. With the local patch management system, aerc facilitates this
       bookkeeping process.

       When applying a patch set, aerc creates a tag for those commits. With this tag,  the  patch  set  can  be
       tracked  and  later  dropped  if  needed. Patches are stored in a project data structure which also keeps
       track of the directory where the repository is. Multiple code bases can be tracked by defining a separate
       project for each.

COMMANDS

       The following :patch sub-commands are supported:

       :patch init [-f] [<project>]
           Creates a new project <project>. If <project> is not defined, aerc will use the last element  of  the
           current  directory  path.  It  also  performs  a  search  for  a  supported repository in the current
           directory.

           -f: Overwrite an existing project.

       :patch list [-a]
       :patch ls [-a]
           Lists the current project with the tracked patch sets.

           -a: Lists all projects.

       :patch apply [-c <cmd>] [-w <commit-ish>] <tag>
           Applies the selected message(s) to the repository of the current project. It uses the  :pipe  command
           for this and keeps track of the applied patch.

           Completions  for  the  <tag>  are  available  based  on  the  subject lines of the selected or marked
           messages.

           -c <cmd>: Apply patches with the provided <cmd>. Any occurrence of '%r' in the command string will be
           replaced with the root directory of the current project. Note that this approach is  not  recommended
           in  general  and should only be used for very specific purposes, i.e. when a maintainer is applying a
           patch set via a separate script to deal with git trailers.

           aerc will propose completions for the <tag> based on the subject lines  of  the  selected  or  marked
           messages.

           Example:
               :patch apply -c "git -C %r am -3" fix_v2

           -w  <commit-ish>:  Create  a  linked  worktree  for the current project at <commit-ish> and apply the
           patches to the linked worktree. A new project is created to store the worktree information. When this
           project is deleted, the worktree will be deleted as well.

           Example:
               :patch apply -w origin/master fix_v2

       :patch drop <tag>
           Drops the patch <tag> from the repository.

       :patch rebase [<commit-ish>]
           Rebases the patch data on commit <commit-ish>.

           If the <commit-ish> is omitted, aerc will use the base commit of the current project for the rebase.

       :patch find [-f] <commit-hash>
           Searches the messages in the current folder of the current account for the  message  associated  with
           this commit hash based on the subject line.

           If  a Message-ID is linked to a commit (i.e. when :patch apply was used) then find will first perform
           a search for the Message-ID.

           -f: Filter the message list instead of just showing the search results. Only  effective  when  search
           for Message-ID was not successful.

       :patch cd
           Changes the working directory to the root directory of the current project.

       :patch term [<cmd>]
           Opens a shell (or runs <cmd>) in the working directory of the current project.

       :patch switch <project>
           Switches the context to <project>.

       :patch unlink [<project>]
           Deletes  all  patch  tracking  data  for <project> and unlinks it from a repository. If no project is
           provided, the current project is deleted.

       :patch
           Root command for path management. Use it to run the sub-commands.

GETTING STARTED

       Make sure you have an initialized project (see :patch init).

       Now, there are two ways to get patches under the local patch management system:

       •   Apply patches with the :patch apply command. This will automatically create a new tag for the applied
           commits.

       •   Use :patch rebase. If there are some existing local patches in the  commit  history  that  should  be
           managed by aerc, you can run :patch rebase <commit-ish> and set the <commit-ish> to the commit before
           the  first  patch that you want to include. For a git repository which has an upstream called origin,
           you would run :patch rebase origin/master.

EXAMPLE

       The following example demonstrates how to manage the local patch sets.

       First, a project needs to be initialized. This is done by changing into the working directory  where  the
       project's  repository  is  located.  For  this  example, let's assume we have a project called bar in the
       directory /home/user/foo/bar.

           :cd /home/user/foo/bar

       and then creating a new project with

           :patch init

       If no name is provided to :patch init, aerc will use the last  element  of  the  working  directory  path
       (here: bar).

       Now the patch tracking is ready for action. Go to the message list, mark a patch series and apply it:

           :patch apply fix_v2

       This will apply the selected patch set and assigns the fix_v2 tag to those commits. The tag helps to keep
       the  commits  grouped  together, and will be helpful when we want to drop this exact patch set at a later
       point.

       With :patch list you can verify that the patch set was correctly applied.

       If there is a change in the underlying repository (e.g. by rebasing  to  upstream),  the  hashes  of  the
       applied  local  commits  can change. :patch list can detect such a change and will then propose to rebase
       the internal data. To do this, run

           :patch rebase

       This will open an editor where you can adjust the correct tags again. You could also  change  the  rebase
       point by providing an optional argument (e.g. a commit hash, or even HEAD~3 or origin/master, etc.).

       To drop a patch set, use the tag that was assigned during applying:

           :patch drop fix_v2

       And to delete the project data in aerc:

           :patch unlink bar

SUPPORTED REVISION CONTROL SYSTEMS

       The supported revision control systems are currently: git.

SEE ALSO

       aerc(1)

AUTHORS

       Originally  created  by  Drew  DeVault and maintained by Robin Jarry who is assisted by other open source
       contributors. For more information about aerc development, see https://sr.ht/~rjarry/aerc/.

                                                   2025-01-25                                      AERC-PATCH(7)