Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AERC-PATCH(7)	       Miscellaneous Information Manual		 AERC-PATCH(7)

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	direc-
	   tory.

	   -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  sub-
	   ject	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  re-
	   sults.  Only	 effective when	search for Message-ID was not success-
	   ful.

       :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 cur-
	   rent	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 automati-
	   cally 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	direc-
       tory /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  ap-
       plied.

       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 in-
       ternal 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 argu-
       ment (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-04-17			 AERC-PATCH(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=aerc-patch&sektion=7&manpath=FreeBSD+Ports+14.3.quarterly>

home | help