git/contrib
Paolo Bonzini 8d81408435 git-send-email: add --transfer-encoding option
The thread at http://thread.gmane.org/gmane.comp.version-control.git/257392
details problems when applying patches with "git am" in a repository with
CRLF line endings.  In the example in the thread, the repository originated
from "git-svn" so it is not possible to use core.eol and friends on it.

Right now, the best option is to use "git am --keep-cr".  However, when
a patch create new files, the patch application process will reject the
new file because it finds a "/dev/null\r" string instead of "/dev/null".

The problem is that SMTP transport is CRLF-unsafe.  Sending a patch by
email is the same as passing it through "dos2unix | unix2dos".  The newly
introduced CRLFs are normally transparent because git-am strips them. The
keepcr=true setting preserves them, but it is mostly working by chance
and it would be very problematic to have a "git am" workflow in a
repository with mixed LF and CRLF line endings.

The MIME solution to this is the quoted-printable transfer enconding.
This is not something that we want to enable by default, since it makes
received emails horrible to look at.  However, it is a very good match
for projects that store CRLF line endings in the repository.

The only disadvantage of quoted-printable is that quoted-printable
patches fail to apply if the maintainer uses "git am --keep-cr".  This
is because the decoded patch will have two carriage returns at the end
of the line.  Therefore, add support for base64 transfer encoding too,
which makes received emails downright impossible to look at outside
a MUA, but really just works.

The patch covers all bases, including users that still live in the late
80s, by also providing a 7bit content transfer encoding that refuses
to send emails with non-ASCII character in them.  And finally, "8bit"
will add a Content-Transfer-Encoding header but otherwise do nothing.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2014-11-25 14:00:15 -08:00
..
buildsystems mark Windows build scripts executable 2013-11-25 15:01:22 -08:00
completion git-send-email: add --transfer-encoding option 2014-11-25 14:00:15 -08:00
contacts contacts: add a Makefile to generate docs and install 2014-10-15 15:18:27 -07:00
convert-objects various contrib: Fix links in man pages 2014-08-07 09:43:21 -07:00
credential wincred: avoid overwriting configured variables 2014-05-14 10:30:07 -07:00
diff-highlight diff-highlight: exit when a pipe is broken 2014-11-04 13:18:35 -08:00
emacs emacs: make 'git-status' work with separate git dirs 2012-11-26 09:34:28 -08:00
examples various contrib: Fix links in man pages 2014-08-07 09:43:21 -07:00
fast-import comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
git-jump git-jump: ignore (custom) prefix in diff mode 2012-09-17 12:31:57 -07:00
git-shell-commands Add sample commands for git-shell 2010-08-12 15:16:31 -07:00
gitview various contrib: Fix links in man pages 2014-08-07 09:43:21 -07:00
hg-to-git hg-to-git: --allow-empty-message in git commit 2013-07-23 12:17:23 -07:00
hooks git-multimail: update to version 1.0.0 2014-04-07 11:57:11 -07:00
mw-to-git Merge branch 'ep/shell-command-substitution' 2014-06-03 12:06:45 -07:00
persistent-https Add persistent-https to contrib 2012-05-30 13:50:45 -07:00
remote-helpers Revert "Merge branch 'jc/graduate-remote-hg-bzr' (early part)" 2014-05-20 14:48:11 -07:00
stats contrib: update stats/mailmap script 2012-12-12 11:09:11 -08:00
subtree Documentation: typofixes 2014-11-04 13:14:44 -08:00
svn-fe contrib/svn-fe: fix Makefile 2014-08-28 15:41:28 -07:00
thunderbird-patch-inline appp.sh: use the $( ... ) construct for command substitution 2014-04-23 15:17:01 -07:00
workdir prefer test -h over test -L in shell scripts 2010-09-27 10:48:23 -07:00
convert-grafts-to-replace-refs.sh contrib: add convert-grafts-to-replace-refs.sh 2014-07-21 12:05:53 -07:00
git-resurrect.sh git-sh-setup.sh: add variable to use the stuck-long mode 2014-02-03 12:11:10 -08:00
README War on whitespace 2007-06-07 00:04:01 -07:00
remotes2config.sh contrib: Make remotes2config.sh script more robust 2007-12-04 14:35:08 -08:00
rerere-train.sh contrib/rerere-train: use installed git-sh-setup 2012-04-30 12:50:38 -07:00

Contributed Software

Although these pieces are available as part of the official git
source tree, they are in somewhat different status.  The
intention is to keep interesting tools around git here, maybe
even experimental ones, to give users an easier access to them,
and to give tools wider exposure, so that they can be improved
faster.

I am not expecting to touch these myself that much.  As far as
my day-to-day operation is concerned, these subdirectories are
owned by their respective primary authors.  I am willing to help
if users of these components and the contrib/ subtree "owners"
have technical/design issues to resolve, but the initiative to
fix and/or enhance things _must_ be on the side of the subtree
owners.  IOW, I won't be actively looking for bugs and rooms for
enhancements in them as the git maintainer -- I may only do so
just as one of the users when I want to scratch my own itch.  If
you have patches to things in contrib/ area, the patch should be
first sent to the primary author, and then the primary author
should ack and forward it to me (git pull request is nicer).
This is the same way as how I have been treating gitk, and to a
lesser degree various foreign SCM interfaces, so you know the
drill.

I expect that things that start their life in the contrib/ area
to graduate out of contrib/ once they mature, either by becoming
projects on their own, or moving to the toplevel directory.  On
the other hand, I expect I'll be proposing removal of disused
and inactive ones from time to time.

If you have new things to add to this area, please first propose
it on the git mailing list, and after a list discussion proves
there are some general interests (it does not have to be a
list-wide consensus for a tool targeted to a relatively narrow
audience -- for example I do not work with projects whose
upstream is svn, so I have no use for git-svn myself, but it is
of general interest for people who need to interoperate with SVN
repositories in a way git-svn works better than git-svnimport),
submit a patch to create a subdirectory of contrib/ and put your
stuff there.

-jc