Thread (16 messages) flat view 16 messages, 8 authors, 2016-06-15

Re: git-send-mail in sh

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:13

Andreas Ericsson [off-list ref] writes:
It's better than the perl version because;
Good.
It's worse than the perl version because;
1. It doesn't thread the patch-series (which I personally prefer anyway 
since it's easier to follow a thread on a particular patch that way).
I think that is an improvement, actually ;-)
2. The patches sent within the same second arrive in random order.
I think you can fudge the "Date: " yourself.  Count the number
of messages you are going to send out, grab the wallclock time
before starting to send the first message, subtract that number
of seconds and give it to the first message, add 1 second and
give it to the second message, and so on.

3. It does not CC signers and authors.  Although I personally
consider not doing it "better", some people _might_ want to keep
that behaviour as an option.
# Instead of applying the 8942 chars long RFC-exact regex to
# match recipients email addresses against, we're satisfied with
# a simple @ somewhere inside an argument and just assume that
# people won't try anything obviously stupid
This is probably adequate in practice.  I have not seen an
e-mail address other than local-part@domain (RFC2822-speak
"addr-spec") form of mailbox on the kernel list for some time.
function usage() {
	echo "Usage: git submit upstream@email.org <commit-ish> [<commit-ish>]"
	exit 1
}
I'm old fashioned and tend to omit noise word "function".

The original format-patch parameters are my fault, but I'd
rather see newly written commands done like this:

	"git-send-email" <param>+

        <param> = <patch> | <addressee> | <commits>
        <patch> = <anything that passes "test -f">
	<addressee> = <RFC2822 addr-spec>
        <commits> = ".." <top> | <bottom> ".." <top> | <commit>
	<bottom> = <extended SHA1 expression>
	<top>    = <extended SHA1 expression>
	<commit> = <extended SHA1 expression>

 * ..<top> is a shorthand of "origin"..<top> (the choice of
   "origin" might be debatable, but probably sane).

 * <bottom>..<top> pair is to format changes in <top> but not in
   <bottom>; typically <top> is the name of a topic branch, and
   <bottom> is typically "origin".  This is to encourage the use
   of topic branches.

 * <commit> is a shorthand for <commit>^1..<commit>; this is to
   allow you to quickly pick just one commit and send it out.
function abort() {
	echo "Aborting."
	exit 0
}
Abort but exit 0?  You do not seem to be using it though ;-).
commits=0
if [ "$com1" ]; then
	if [ -z "$com2" ]; then
		com2="$com1"
		com1=HEAD
	fi

	commits=$(git rev-list $com1 ^$com2 | wc -l)
fi
You do not want to count commits like this.  format-patch drops
patches that are already in upstream even if they are recorded
as diffrent commit objects, so the number you get from rev-list
is just an upper bound, and may not match the number of commits
that would be formatted.
[ $commits -eq 0 -a -z "$patches" ] && usage
And I'd probably drop this one as well; you can have the check
before sending things out, right?
# [ "$email" ] || git repo-config --get patch_email_address
Storing the default addressee in the config is a good idea,
since typically e-mail submissions are to a single address.
[ $commits -gt 1 ] && opts=-n
You can always say -n if you want to do this; format-patch -n
with a single patch would not say [PATCH 1/1].
for patch in $(git format-patch $opts $com2 $com1 | sed 's/^* //'); do
	patches="$patches $patch"
done
This is the first script I saw that uses the standard output
from format-patch, and I do not think nobody else used it so
far.  If the standard output from format-patch is useful like
this, I would like to drop the '* ' prefix from it, so that you
do not have to sed it out.

You would probably want to do "format-patch -o $tmpdir" at least
not to smudge the toplevel directory.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help