=head1 NAME

public-inbox-edit - destructively edit messages in a public inbox

=head1 SYNOPSIS

	public-inbox-edit -m MESSAGE-ID --all|INBOX_DIR

	public-inbox-edit -F RAW_FILE --all|INBOX_DIR [.. INBOX_DIR]

=head1 DESCRIPTION

public-inbox-edit allows editing messages in a given inbox
to remove sensitive information.  It is only intended as a
last resort, as it will cause discontiguous git history and
draw more attention to the sensitive data in mirrors.

=head1 OPTIONS

=over

=item --all

Edit the message in all inboxes configured in ~/.public-inbox/config.
This is an alternative to specifying individual inboxes directories
on the command-line.

=item -m MESSAGE-ID

Edits the message corresponding to the given C<MESSAGE-ID>.
If the C<MESSAGE-ID> is ambiguous, C<--force> or using the
C<--file> of the original will be required.

=item -F FILE

Edits the message corresponding to the Message-ID: header
and content given in C<FILE>.  This requires the unmodified
raw message, and the contents of C<FILE> will not itself
be modified.  This is useful if a Message-ID is ambiguous
due to filtering/munging rules or other edits.

=item --force

Forcibly perform the edit even if Message-ID is ambiguous.

=item --raw

Do not perform "From " line escaping.  By default, this
generates a mboxrd variant file to detect unpurged messages
in the new mbox.  This makes sense if your configured
C<publicinbox.mailEditor> is a regular editor and not
something like C<mutt -f>

=back

=head1 CONFIGURATION

=over 8

=item publicinbox.mailEditor

The command to perform the edit with.  An example of this would be
C<mutt -f>, and the user would then use the facilities in L<mutt(1)>
to edit the mail.  This is useful for editing attachments or
Base64-encoded emails which are more difficult to edit with a
normal editor (configured via C<GIT_EDITOR>, C<VISUAL> or C<EDITOR>).

Default: none

=back

=head1 ENVIRONMENT

=over 8

=item GIT_EDITOR / VISUAL / EDITOR

=for comment MAIL_EDITOR is undocumented (unstable, don't want naming conflicts)

public-inbox-edit will fall back to using one of these variables
(in that order) if C<publicinbox.mailEditor> is unset.

=item PI_CONFIG

The default config file, normally "~/.public-inbox/config".
See L<public-inbox-config(5)>

=back

=head1 LIMITATIONS

Only L<v2|public-inbox-v2-format(5)> repositories are supported.

This is safe to run while normal inbox writing tools
(L<public-inbox-mda(1)>, L<public-inbox-watch(1)>,
L<public-inbox-learn(1)>) are active.

Running this in parallel with L<public-inbox-xcpdb(1)> or
C<"public-inbox-index --reindex"> can lead to errors or
edited data remaining indexed.

Incremental L<public-inbox-index(1)> (without C<--reindex>)
is fine.

Keep in mind this is a last resort, as it will be disruptive
to anyone using L<git(1)> to mirror the inbox being edited.

=head1 CONTACT

Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org>

The mail archives are hosted at L<https://public-inbox.org/meta/> and
L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/>

=head1 COPYRIGHT

Copyright 2019-2021 all contributors L<mailto:meta@public-inbox.org>

License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>

=head1 SEE ALSO

L<public-inbox-purge(1)>
