{"thread":{"id":"7857","subject":"[PATCH 2/5] builtin-fmt-merge-msg.c: Use for_each_revision() helper","startedAt":"2007-04-26T19:46:35Z","lastAt":"2007-04-27T17:13:40Z","messageCount":15,"participants":["Luiz Fernando N Capitulino","Andy Whitcroft","Hermes Trismegisto","Sam Ravnborg","Luiz Fernando N. Capitulino","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"40527","messageId":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":null,"subject":"[PATCH 0/5] RFC: for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:35Z","receivedAt":"2007-04-26T19:46:35Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":" Hi,\n\n [This' also a git-send-email test, so, if this fail by showing just\n  the first e-mail in the series, do not blame me :)]\n\n This series introduces a helper macro to help programs to walk through\nrevisions (details on the first patch).\n\n Shawn has already alerted me that some people don't like to\n'hide C constructs', but I think that in this case it's useful, as explained\nin the next e-mail.\n\n The complete diff stat is:\n\n builtin-fmt-merge-msg.c |    3 +--\n builtin-log.c           |   12 ++++--------\n builtin-shortlog.c      |    3 +--\n reachable.c             |    3 +--\n revision.h              |   11 +++++++++++\n 5 files changed, 18 insertions(+), 14 deletions(-)\n\n But if we subtract the for_each_revision() macro's code we get:\n\n 4 files changed, 7 insertions(+), 14 deletions(-)\n"},{"id":"40524","messageId":"11776168001048-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"[PATCH 1/5] Introduces for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:36Z","receivedAt":"2007-04-26T19:46:36Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"This macro may be used to iterate over revisions, so, instead of\ndoing:\n\n\tstruct commit *commit;\n\n\t...\n\n\tprepare_revision_walk(rev);\n\twhile ((commit = get_revision(rev)) != NULL) {\n\t\t...\n\t}\n\nNew code should use:\n\n\tstruct commit *commit;\n\n\t...\n\n\tfor_each_revision(commit, rev) {\n\t\t...\n\t}\n\n The only disadvantage is that it's something magical, and the fact that\nit returns a struct commit is not obvious.\n\n On the other hand it's documented, has the advantage of making the walking\nthrough revisions easier and can save some lines of code.\n\nSigned-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n---\n revision.h |   11 +++++++++++\n 1 files changed, 11 insertions(+), 0 deletions(-)\n\ndiff --git a/revision.h b/revision.h\nindex cdf94ad..bb6f475 100644\n--- a/revision.h\n+++ b/revision.h\n@@ -133,4 +133,15 @@ extern void add_object(struct object *obj,\n extern void add_pending_object(struct rev_info *revs, struct object *obj, const char *name);\n extern void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, const char *name, unsigned mode);\n \n+/* helpers */\n+\n+/**\n+ * for_each_revision\t-\titerate over revisions\n+ * @commit:\tpointer to a commit object returned for each iteration\n+ * @rev:\trevision pointer\n+ */\n+#define for_each_revision(commit, rev) \\\n+\tprepare_revision_walk(rev);    \\\n+\twhile ((commit = get_revision(rev)) != NULL)\n+\n #endif\n-- \n1.5.1.1.320.g1cf2\n"},{"id":"40522","messageId":"11776168001607-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"[PATCH 2/5] builtin-fmt-merge-msg.c: Use for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:37Z","receivedAt":"2007-04-26T19:46:37Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Signed-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n---\n builtin-fmt-merge-msg.c |    3 +--\n 1 files changed, 1 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin-fmt-merge-msg.c b/builtin-fmt-merge-msg.c\nindex 5c145d2..8e1db1c 100644\n--- a/builtin-fmt-merge-msg.c\n+++ b/builtin-fmt-merge-msg.c\n@@ -189,8 +189,7 @@ static void shortlog(const char *name, unsigned char *sha1,\n \tadd_pending_object(rev, branch, name);\n \tadd_pending_object(rev, &head->object, \"^HEAD\");\n \thead->object.flags |= UNINTERESTING;\n-\tprepare_revision_walk(rev);\n-\twhile ((commit = get_revision(rev)) != NULL) {\n+\tfor_each_revision(commit, rev) {\n \t\tchar *oneline, *bol, *eol;\n \n \t\t/* ignore merges */\n-- \n1.5.1.1.320.g1cf2\n"},{"id":"40526","messageId":"11776168002081-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"[PATCH 3/5] reachable.c: Use for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:38Z","receivedAt":"2007-04-26T19:46:38Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Signed-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n---\n reachable.c |    3 +--\n 1 files changed, 1 insertions(+), 2 deletions(-)\n\ndiff --git a/reachable.c b/reachable.c\nindex ff3dd34..b69edd8 100644\n--- a/reachable.c\n+++ b/reachable.c\n@@ -79,7 +79,7 @@ static void walk_commit_list(struct rev_info *revs)\n \tstruct object_array objects = { 0, 0, NULL };\n \n \t/* Walk all commits, process their trees */\n-\twhile ((commit = get_revision(revs)) != NULL)\n+\tfor_each_revision(commit, revs)\n \t\tprocess_tree(commit->tree, &objects, NULL, \"\");\n \n \t/* Then walk all the pending objects, recursively processing them too */\n@@ -195,6 +195,5 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog)\n \t * Set up the revision walk - this will move all commits\n \t * from the pending list to the commit walking list.\n \t */\n-\tprepare_revision_walk(revs);\n \twalk_commit_list(revs);\n }\n-- \n1.5.1.1.320.g1cf2\n"},{"id":"40525","messageId":"11776168011384-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"[PATCH 4/5] builtin-shortlog.c: Use for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:39Z","receivedAt":"2007-04-26T19:46:39Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Signed-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n---\n builtin-shortlog.c |    3 +--\n 1 files changed, 1 insertions(+), 2 deletions(-)\n\ndiff --git a/builtin-shortlog.c b/builtin-shortlog.c\nindex 3f93498..eca802d 100644\n--- a/builtin-shortlog.c\n+++ b/builtin-shortlog.c\n@@ -216,8 +216,7 @@ static void get_from_rev(struct rev_info *rev, struct path_list *list)\n \tchar scratch[1024];\n \tstruct commit *commit;\n \n-\tprepare_revision_walk(rev);\n-\twhile ((commit = get_revision(rev)) != NULL) {\n+\tfor_each_revision(commit, rev) {\n \t\tconst char *author = NULL, *oneline, *buffer;\n \t\tint authorlen = authorlen, onelinelen;\n \n-- \n1.5.1.1.320.g1cf2\n"},{"id":"40523","messageId":"11776168013249-git-send-email-lcapitulino@mandriva.com.br","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"[PATCH 5/5] builtin-log.c: Use for_each_revision() helper","fromName":"Luiz Fernando N Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T19:46:40Z","receivedAt":"2007-04-26T19:46:40Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Signed-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n---\n builtin-log.c |   12 ++++--------\n 1 files changed, 4 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin-log.c b/builtin-log.c\nindex 38bf52f..705050a 100644\n--- a/builtin-log.c\n+++ b/builtin-log.c\n@@ -79,8 +79,7 @@ static int cmd_log_walk(struct rev_info *rev)\n {\n \tstruct commit *commit;\n \n-\tprepare_revision_walk(rev);\n-\twhile ((commit = get_revision(rev)) != NULL) {\n+\tfor_each_revision(commit, rev) {\n \t\tlog_tree_commit(rev, commit);\n \t\tif (!rev->reflog_info) {\n \t\t\t/* we allow cycles in reflog ancestry */\n@@ -390,9 +389,8 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids, const cha\n \to2->flags ^= UNINTERESTING;\n \tadd_pending_object(&check_rev, o1, \"o1\");\n \tadd_pending_object(&check_rev, o2, \"o2\");\n-\tprepare_revision_walk(&check_rev);\n \n-\twhile ((commit = get_revision(&check_rev)) != NULL) {\n+\tfor_each_revision(commit, &check_rev) {\n \t\t/* ignore merges */\n \t\tif (commit->parents && commit->parents->next)\n \t\t\tcontinue;\n@@ -578,8 +576,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \tif (!use_stdout)\n \t\trealstdout = fdopen(dup(1), \"w\");\n \n-\tprepare_revision_walk(&rev);\n-\twhile ((commit = get_revision(&rev)) != NULL) {\n+\tfor_each_revision(commit, &rev) {\n \t\t/* ignore merges */\n \t\tif (commit->parents && commit->parents->next)\n \t\t\tcontinue;\n@@ -716,8 +713,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)\n \t\tdie(\"Unknown commit %s\", limit);\n \n \t/* reverse the list of commits */\n-\tprepare_revision_walk(&revs);\n-\twhile ((commit = get_revision(&revs)) != NULL) {\n+\tfor_each_revision(commit, &revs) {\n \t\t/* ignore merges */\n \t\tif (commit->parents && commit->parents->next)\n \t\t\tcontinue;\n-- \n1.5.1.1.320.g1cf2\n"},{"id":"40530","messageId":"46310485.8070605@shadowen.org","threadId":"7857","inReplyTo":"11776168001048-git-send-email-lcapitulino@mandriva.com.br","subject":"Re: [PATCH 1/5] Introduces for_each_revision() helper","fromName":"Andy Whitcroft","fromEmail":"apw@shadowen.org","sentAt":"2007-04-26T19:59:01Z","receivedAt":"2007-04-26T19:59:01Z","isPatch":true,"sender":{"key":"apw@shadowen.org","avatar":"https://gravatar.com/avatar/d3088262854661a913ef35cc40fedcc270142d4461791142bc1ea0b2a4e2e147?d=mp&s=160"},"body":"Luiz Fernando N Capitulino wrote:\n> This macro may be used to iterate over revisions, so, instead of\n> doing:\n> \n> \tstruct commit *commit;\n> \n> \t...\n> \n> \tprepare_revision_walk(rev);\n> \twhile ((commit = get_revision(rev)) != NULL) {\n> \t\t...\n> \t}\n> \n> New code should use:\n> \n> \tstruct commit *commit;\n> \n> \t...\n> \n> \tfor_each_revision(commit, rev) {\n> \t\t...\n> \t}\n> \n>  The only disadvantage is that it's something magical, and the fact that\n> it returns a struct commit is not obvious.\n> \n>  On the other hand it's documented, has the advantage of making the walking\n> through revisions easier and can save some lines of code.\n> \n> Signed-off-by: Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br>\n> ---\n>  revision.h |   11 +++++++++++\n>  1 files changed, 11 insertions(+), 0 deletions(-)\n> \n> diff --git a/revision.h b/revision.h\n> index cdf94ad..bb6f475 100644\n> --- a/revision.h\n> +++ b/revision.h\n> @@ -133,4 +133,15 @@ extern void add_object(struct object *obj,\n>  extern void add_pending_object(struct rev_info *revs, struct object *obj, const char *name);\n>  extern void add_pending_object_with_mode(struct rev_info *revs, struct object *obj, const char *name, unsigned mode);\n>  \n> +/* helpers */\n> +\n> +/**\n> + * for_each_revision\t-\titerate over revisions\n> + * @commit:\tpointer to a commit object returned for each iteration\n> + * @rev:\trevision pointer\n> + */\n> +#define for_each_revision(commit, rev) \\\n> +\tprepare_revision_walk(rev);    \\\n> +\twhile ((commit = get_revision(rev)) != NULL)\n> +\n>  #endif\n\nIf this is constructed like that then I would expect the code below to\nbe miss-compiled:\n\n\tif (condition)\n\t\tfor_each_revision(commit, rev) {\n\t\t}\n\nAs it would be effectivly be:\n\n\tif (condition)\n\t\tprepare_revision_walk(rev);\n\twhile ((commit = get_revision(rev)) != NULL) {\n\t}\n\nI think you'd want this to be something more like:\n\n#define for_each_revision(commit, rev) \\\n\tfor (prepare_revision_walk(rev); \\\n\t\t(commit = get_revision(rev))) != NULL); ) {\n\n-apw\n"},{"id":"40532","messageId":"7vr6q6svkc.fsf@assigned-by-dhcp.cox.net","threadId":"7857","inReplyTo":"11776168001253-git-send-email-lcapitulino@mandriva.com.br","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Hermes Trismegisto","fromEmail":"junkio@cox.net","sentAt":"2007-04-26T20:57:23Z","receivedAt":"2007-04-26T20:57:23Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br> writes:\n\n>  [This' also a git-send-email test, so, if this fail by showing just\n>   the first e-mail in the series, do not blame me :)]\n\nBut if you changed your name to omit '.', that is not much of a\ntest I suspect...\n"},{"id":"40533","messageId":"20070426210551.GA25377@uranus.ravnborg.org","threadId":"7857","inReplyTo":"7vr6q6svkc.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Sam Ravnborg","fromEmail":"sam@ravnborg.org","sentAt":"2007-04-26T21:05:51Z","receivedAt":"2007-04-26T21:05:51Z","isPatch":true,"sender":{"key":"sam@ravnborg.org","avatar":"https://gravatar.com/avatar/168a912606ed0742d840bb365e3cc21db390c36531a58341dc7a069cc1f15f62?d=mp&s=160"},"body":"On Thu, Apr 26, 2007 at 01:57:23PM -0700, Hermes Trismegisto wrote:\n\n[Copied from mail header]\nFrom: Hermes Trismegisto <junkio@cox.net>\n\nWonder who sent this mail???\nhttp://en.wikipedia.org/wiki/Hermes_Trismegistus\n\n\tSam\n"},{"id":"40534","messageId":"20070426181214.36049e32@localhost","threadId":"7857","inReplyTo":"46310485.8070605@shadowen.org","subject":"Re: [PATCH 1/5] Introduces for_each_revision() helper","fromName":"Luiz Fernando N. Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T21:12:14Z","receivedAt":"2007-04-26T21:12:14Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Em Thu, 26 Apr 2007 20:59:01 +0100\nAndy Whitcroft <apw@shadowen.org> escreveu:\n\n| If this is constructed like that then I would expect the code below to\n| be miss-compiled:\n| \n| \tif (condition)\n| \t\tfor_each_revision(commit, rev) {\n| \t\t}\n| \n| As it would be effectivly be:\n| \n| \tif (condition)\n| \t\tprepare_revision_walk(rev);\n| \twhile ((commit = get_revision(rev)) != NULL) {\n| \t}\n| \n| I think you'd want this to be something more like:\n| \n| #define for_each_revision(commit, rev) \\\n| \tfor (prepare_revision_walk(rev); \\\n| \t\t(commit = get_revision(rev))) != NULL); ) {\n\n I'm *so* clueless that this mistake does not surprise me.\n\n Will fix, thanks for the review Andy.\n\n-- \nLuiz Fernando N. Capitulino\n"},{"id":"40535","messageId":"20070426181420.4db235cc@localhost","threadId":"7857","inReplyTo":"7vr6q6svkc.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Luiz Fernando N. Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T21:14:20Z","receivedAt":"2007-04-26T21:14:20Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Em Thu, 26 Apr 2007 13:57:23 -0700\nHermes Trismegisto <junkio@cox.net> escreveu:\n\n| Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br> writes:\n| \n| >  [This' also a git-send-email test, so, if this fail by showing just\n| >   the first e-mail in the series, do not blame me :)]\n| \n| But if you changed your name to omit '.', that is not much of a\n| test I suspect...\n\n Yes, I did. But git-send-email is taking my name from the patches,\nso the same problem happened.\n\n I had to change my name in the patches to make it to work.\n\n-- \nLuiz Fernando N. Capitulino\n"},{"id":"40536","messageId":"20070426181733.68b87ab0@localhost","threadId":"7857","inReplyTo":"20070426210551.GA25377@uranus.ravnborg.org","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Luiz Fernando N. Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-26T21:17:33Z","receivedAt":"2007-04-26T21:17:33Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Em Thu, 26 Apr 2007 23:05:51 +0200\nSam Ravnborg <sam@ravnborg.org> escreveu:\n\n| On Thu, Apr 26, 2007 at 01:57:23PM -0700, Hermes Trismegisto wrote:\n| \n| [Copied from mail header]\n| From: Hermes Trismegisto <junkio@cox.net>\n| \n| Wonder who sent this mail???\n| http://en.wikipedia.org/wiki/Hermes_Trismegistus\n\n Looks like Junio has a pseudonym:\n\n\"\"\"\n<lcapitulino>   gitster: hi, who's Hermes Trismegisto? :)\n* gitster leaked his pseudonym by accident.\n\"\"\"\n\n Or I didn't get the joke.\n\n-- \nLuiz Fernando N. Capitulino\n"},{"id":"40537","messageId":"7vk5vysufp.fsf@assigned-by-dhcp.cox.net","threadId":"7857","inReplyTo":"20070426181420.4db235cc@localhost","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-04-26T21:21:46Z","receivedAt":"2007-04-26T21:21:46Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\nwrites:\n\n> Em Thu, 26 Apr 2007 13:57:23 -0700\n> Hermes Trismegisto <junkio@cox.net> escreveu:\n>\n> | Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br> writes:\n> | \n> | >  [This' also a git-send-email test, so, if this fail by showing just\n> | >   the first e-mail in the series, do not blame me :)]\n> | \n> | But if you changed your name to omit '.', that is not much of a\n> | test I suspect...\n>\n>  Yes, I did. But git-send-email is taking my name from the patches,\n> so the same problem happened.\n>\n>  I had to change my name in the patches to make it to work.\n\nI know.  But my point of \"changing your name is not much of a\ntest\" is that that was exactly what Robin Johnson's patches to\nquote CC: addresses that were taken from the sign-off lines in\nthe proposed commit log message were meant to fix.\n\nSpecifically:\n\nhttp://repo.or.cz/w/alt-git.git?a=commitdiff;h=732263d411fe2e3e29ee9fa1c2ad1a20bdea062c\n"},{"id":"40591","messageId":"20070427102113.46869367@localhost","threadId":"7857","inReplyTo":"7vk5vysufp.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Luiz Fernando N. Capitulino","fromEmail":"lcapitulino@mandriva.com.br","sentAt":"2007-04-27T13:21:13Z","receivedAt":"2007-04-27T13:21:13Z","isPatch":true,"sender":{"key":"lcapitulino@mandriva.com.br","avatar":null},"body":"Em Thu, 26 Apr 2007 14:21:46 -0700\nJunio C Hamano <junkio@cox.net> escreveu:\n\n| \"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\n| writes:\n| \n| > Em Thu, 26 Apr 2007 13:57:23 -0700\n| > Hermes Trismegisto <junkio@cox.net> escreveu:\n| >\n| > | Luiz Fernando N Capitulino <lcapitulino@mandriva.com.br> writes:\n| > | \n| > | >  [This' also a git-send-email test, so, if this fail by showing just\n| > | >   the first e-mail in the series, do not blame me :)]\n| > | \n| > | But if you changed your name to omit '.', that is not much of a\n| > | test I suspect...\n| >\n| >  Yes, I did. But git-send-email is taking my name from the patches,\n| > so the same problem happened.\n| >\n| >  I had to change my name in the patches to make it to work.\n| \n| I know.  But my point of \"changing your name is not much of a\n| test\" is that that was exactly what Robin Johnson's patches to\n| quote CC: addresses that were taken from the sign-off lines in\n| the proposed commit log message were meant to fix.\n| \n| Specifically:\n| \n| http://repo.or.cz/w/alt-git.git?a=commitdiff;h=732263d411fe2e3e29ee9fa1c2ad1a20bdea062c\n\n Okay.\n\n With the --dry-run option it became very easy to run tests,\nso, I've changed everything back and tried to reproduce it\nagain:\n\n-> First e-mail:\n\n\"\"\"\nDry-OK. Log says:\nDate: Fri, 27 Apr 2007 10:04:48 -0300\nSendmail: /usr/sbin/sendmail -i junkio@cox.net git@vger.kernel.org\nFrom: \"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\nSubject: [PATCH 0/5] RFC: for_each_revision() helper\nCc: git@vger.kernel.org\nTo: junkio@cox.net\n\"\"\"\n\n-> Last one (others are the same)\n\n\"\"\"\nDry-OK. Log says:\nDate: Fri, 27 Apr 2007 10:04:53 -0300\nSendmail: /usr/sbin/sendmail -i junkio@cox.net git@vger.kernel.org lcapitulino@mandriva.com.br\nFrom: \"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\nSubject: [PATCH 5/5] builtin-log.c: Use for_each_revision() helper\nCc: git@vger.kernel.org, \"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\nTo: junkio@cox.net\n\"\"\"\n\n Looks like it's fixed, I'll submit this patch series again\nshortly.\n\n BTW, Robin, can we have an option to read the introductory e-mail\nfrom a file? It could read a Subject line from it too.\n\n-- \nLuiz Fernando N. Capitulino\n"},{"id":"40613","messageId":"7vr6q5oi4b.fsf@assigned-by-dhcp.cox.net","threadId":"7857","inReplyTo":"20070427102113.46869367@localhost","subject":"Re: [PATCH 0/5] RFC: for_each_revision() helper","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-04-27T17:13:40Z","receivedAt":"2007-04-27T17:13:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Luiz Fernando N. Capitulino\" <lcapitulino@mandriva.com.br>\nwrites:\n\n>  BTW, Robin, can we have an option to read the introductory e-mail\n> from a file? It could read a Subject line from it too.\n\nWithout adding any new option, I think you can do that today.\n\n\t$ git format-patch -o ./+outgo -n master..jc/my-series\n\t$ edit ./+outgo/0000-cover.txt\n        $ git send-email [options] ./+outgo\n"}]}