threads / patch / 10572

patchMake git-mailinfo strip whitespace from the start of the mail file.

Subject: [PATCH] Make git-mailinfo strip whitespace from the start of the mail file.

## tl;dr

7 messages between Nov 1, 2007 and Nov 4, 2007. Diffs are folded; open one to read it.

replies: 6people: 2as markdown or json

Simon Sasburg· Nov 1, 2007, 21:05 UTC · lore
This allows you to use files gotten through gmail's web interface via its 'Show original' option.
Signed-off-by: Simon Sasburg <Simon.Sasburg@gmail.com>
---
Note that this doesn't exactly follow RFC 2822 as far as i can see, but i don't know if git prefers to be strict or tolerant in these cases, so i'm sending the patch anyway.
It certaily helps me, even if just a little bit.
 builtin-mailinfo.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
Show changes to builtin-mailinfo.c +6 −0
diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c
index fb12248..5d4b6bf 100644
--- a/builtin-mailinfo.c
+++ b/builtin-mailinfo.c
@@ -915,6 +915,7 @@ static void handle_info(void)
 static int mailinfo(FILE *in, FILE *out, int ks, const char *encoding,
 		    const char *msg, const char *patch)
 {
+	int peek;
 	keep_subject = ks;
 	metainfo_charset = encoding;
 	fin = in;
@@ -935,6 +936,11 @@ static int mailinfo(FILE *in, FILE *out, int ks, const char *encoding,
 	p_hdr_data = xcalloc(MAX_HDR_PARSED, sizeof(char *));
 	s_hdr_data = xcalloc(MAX_HDR_PARSED, sizeof(char *));
 
+	do {
+		peek = fgetc(in);
+	} while (peek == ' ' || peek == '\r' || peek == '\n');
+	ungetc(peek, in);
+
 	/* process the email header */
 	while (read_one_header_line(line, sizeof(line), fin))
 		check_header(line, sizeof(line), p_hdr_data, 1);
-- 
1.5.3.4.502.g37c97
Junio C Hamano· Nov 1, 2007, 21:33 UTC · re: Simon Sasburg · lore

Re: [PATCH] Make git-mailinfo strip whitespace from the start of the mail file.

Just to help me understand why this change is needed...

Are you using mailinfo directly without splitting with mailsplit first?

Simon Sasburg· Nov 1, 2007, 21:41 UTC · re: Junio C Hamano · lore

Re: [PATCH] Make git-mailinfo strip whitespace from the start of the mail file.

> Just to help me understand why this change is needed...
>
> Are you using mailinfo directly without splitting with mailsplit
> first?

Well, when using gmail's web interface, when reading a mail, there is this option to show the raw mail text (headers+body) with the 'show original' option.

If you do 'save as..' in your browser to save what you get with that, and try to do git-am on that file, it fails because it starts with some whitespace.

With this patch git-am works on these files.

So, i'm not using mailsplit or any other mail tools at all, just my browser and git.

Junio C Hamano· Nov 1, 2007, 22:26 UTC · re: Simon Sasburg · lore

Re: [PATCH] Make git-mailinfo strip whitespace from the start of the mail file.

"Simon Sasburg" <simon.sasburg@gmail.com> writes:
Show 17 quoted lines
>> Just to help me understand why this change is needed...
>>
>> Are you using mailinfo directly without splitting with mailsplit
>> first?
>
> Well, when using gmail's web interface, when reading a mail, there is
> this option to show the raw mail text (headers+body) with the 'show
> original' option.
>
> If you do 'save as..' in your browser to save what you get with that,
> and try to do git-am on that file, it fails because it starts with
> some whitespace.
>
> With this patch git-am works on these files.
>
> So, i'm not using mailsplit or any other mail tools at all, just my
> browser and git.

Ah, I meant "git-mailsplit", which is the command internally run by "git-am" to preprocess the file and to split it into individual mail pieces to be fed to "git-mailinfo".

That may suggest the change is better done in git-mailsplit not git-mailinfo.

Or perhaps both.
Simon Sasburg· Nov 1, 2007, 22:57 UTC · re: Junio C Hamano · lore

[PATCH] Make git-mailsplit strip whitespace from the start of the mailbox file.

Signed-off-by: Simon Sasburg <Simon.Sasburg@gmail.com>
---
Ah, i see.
Well, this patch also fixes the problem in my case.
 builtin-mailsplit.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
Show changes to builtin-mailsplit.c +6 −0
diff --git a/builtin-mailsplit.c b/builtin-mailsplit.c
index 43fc373..3fdeb23 100644
--- a/builtin-mailsplit.c
+++ b/builtin-mailsplit.c
@@ -164,6 +164,7 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
 {
 	char name[PATH_MAX];
 	int ret = -1;
+	int peek;
 
 	FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "r");
 	int file_done = 0;
@@ -173,6 +174,11 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
 		goto out;
 	}
 
+	do {
+		peek = fgetc(f);
+	} while (peek == ' ' || peek == '\r' || peek == '\n');
+	ungetc(peek, f);
+
 	if (fgets(buf, sizeof(buf), f) == NULL) {
 		/* empty stdin is OK */
 		if (f != stdin) {
-- 
1.5.3.4.504.gdf75-dirty
Junio C Hamano· Nov 2, 2007, 08:53 UTC · re: Simon Sasburg · lore

Re: [PATCH] Make git-mailinfo strip whitespace from the start of the mail file.

Simon Sasburg <simon.sasburg@gmail.com> writes:
Show 9 quoted lines
> @@ -935,6 +936,11 @@ static int mailinfo(FILE *in, FILE *out, int ks, const char *encoding,
>  	p_hdr_data = xcalloc(MAX_HDR_PARSED, sizeof(char *));
>  	s_hdr_data = xcalloc(MAX_HDR_PARSED, sizeof(char *));
>  
> +	do {
> +		peek = fgetc(in);
> +	} while (peek == ' ' || peek == '\r' || peek == '\n');
> +	ungetc(peek, in);
> +
I wonder why this is not using isspace(peek).
Simon Sasburg· Nov 4, 2007, 13:32 UTC · re: Junio C Hamano · lore

[PATCH] Make git-mailsplit strip whitespace from the start of the mailbox file.

This will allow it to handle the files gotten through gmail's web interface via its 'Show original' option. These files contain the mail headers and the mail body, but start with some whitespace. Now you can give these files to git-am without having to remove the whitespace yourself.

Signed-off-by: Simon Sasburg <Simon.Sasburg@gmail.com>
---
On Nov 2, 2007 9:53 AM, Junio C Hamano <gitster@pobox.com> wrote:
> I wonder why this is not using isspace(peek).
Fixed.
On Nov 1, 2007 11:26 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 6 quoted lines
> Ah, I meant "git-mailsplit", which is the command internally run
> by "git-am" to preprocess the file and to split it into
> individual mail pieces to be fed to "git-mailinfo".
> 
> That may suggest the change is better done in git-mailsplit not
> git-mailinfo.

The files from gmail only contain 1 mail per file, but having git-mailspit massage these into a proper file that git-mailinfo can parse seems like a sane solution to me.

 builtin-mailsplit.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
Show changes to builtin-mailsplit.c +6 −0
diff --git a/builtin-mailsplit.c b/builtin-mailsplit.c
index 43fc373..74b0470 100644
--- a/builtin-mailsplit.c
+++ b/builtin-mailsplit.c
@@ -164,6 +164,7 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
 {
 	char name[PATH_MAX];
 	int ret = -1;
+	int peek;
 
 	FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "r");
 	int file_done = 0;
@@ -173,6 +174,11 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
 		goto out;
 	}
 
+	do {
+		peek = fgetc(f);
+	} while (isspace(peek));
+	ungetc(peek, f);
+
 	if (fgets(buf, sizeof(buf), f) == NULL) {
 		/* empty stdin is OK */
 		if (f != stdin) {
-- 
1.5.3.4.504.gdf75-dirty

← back to recent threads