From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,T_RP_MATCHES_RCVD shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 7CF8F20C11 for ; Wed, 6 Dec 2017 16:05:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752511AbdLFQE6 (ORCPT ); Wed, 6 Dec 2017 11:04:58 -0500 Received: from cisrsmtp.univ-lyon1.fr ([134.214.188.146]:54793 "EHLO cisrsmtp.univ-lyon1.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752182AbdLFQE4 (ORCPT ); Wed, 6 Dec 2017 11:04:56 -0500 Received: from localhost (localhost [127.0.0.1]) by cisrsmtp.univ-lyon1.fr (Postfix) with ESMTP id E56CEA0049 for ; Wed, 6 Dec 2017 16:33:20 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at cisrsmtp.univ-lyon1.fr Received: from cisrsmtp.univ-lyon1.fr ([127.0.0.1]) by localhost (cisrsmtp.univ-lyon1.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sL5WQVoC0m9e for ; Wed, 6 Dec 2017 16:33:18 +0100 (CET) Received: from BEMBX2013-01.univ-lyon1.fr (bembx2013-01.univ-lyon1.fr [134.214.201.247]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by cisrsmtp.univ-lyon1.fr (Postfix) with ESMTPS id 3E2CCA0395 for ; Wed, 6 Dec 2017 16:33:11 +0100 (CET) Received: from localhost.localdomain (134.214.126.172) by BEMBX2013-01.univ-lyon1.fr (134.214.201.247) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Wed, 6 Dec 2017 16:33:10 +0100 From: Nathan Payre To: CC: Nathan Payre , Matthieu Moy , Timothee Albertin , Daniel Bensoussan Subject: [PATCH v2] send-email: extract email-parsing code into a subroutine Date: Wed, 6 Dec 2017 16:32:23 +0100 Message-ID: <20171206153223.24102-1-nathan.payre@etu.univ-lyon1.fr> X-Mailer: git-send-email 2.15.0.318.g489161bc1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [134.214.126.172] X-ClientProxiedBy: JEMBX2013-02.univ-lyon1.fr (134.214.201.250) To BEMBX2013-01.univ-lyon1.fr (134.214.201.247) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The existing code mixes parsing of email header with regular expression and actual code. Extract the parsing code into a new subroutine 'parse_header_line()'. This improves the code readability and make parse_header_line reusable in other place. Signed-off-by: Nathan Payre Signed-off-by: Matthieu Moy Signed-off-by: Timothee Albertin Signed-off-by: Daniel Bensoussan Thanks-to: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 100 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 27 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 2208dcc21..db16e4dec 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -715,41 +715,73 @@ EOT3 if (!defined $compose_encoding) { $compose_encoding = "UTF-8"; } - while(<$c>) { - next if m/^GIT:/; - if ($in_body) { - $summary_empty = 0 unless (/^\n$/); - } elsif (/^\n$/) { - $in_body = 1; - if ($need_8bit_cte) { + + my %parsed_email; + $parsed_email{'body'} = ''; + while (my $line = <$c>) { + next if $line =~ m/^GIT:/; + parse_header_line($line, \%parsed_email); + if ($line =~ /^\n$/i) { + while (my $body_line = <$c>) { + if ($body_line !~ m/^GIT:/) { + $parsed_email{'body'} = $parsed_email{'body'} . $body_line; + } + } + } + print "la : $line\n"; + } + + if ($parsed_email{'from'}) { + $sender = $parsed_email{'from'}; + } + if ($parsed_email{'in-reply-to'}) { + $initial_reply_to = $parsed_email{'in-reply-to'}; + } + if ($parsed_email{'subject'}) { + $initial_subject = $parsed_email{'subject'}; + print $c2 "Subject: " . + quote_subject($parsed_email{'subject'}, $compose_encoding) . + "\n"; + } + if ($parsed_email{'mime-version'}) { + print "CASE 0\n"; + $need_8bit_cte = 0; + print $c2 "MIME-Version: $parsed_email{'mime-version'}\n", + "Content-Type: $parsed_email{'content-type'};\n", + "Content-Transfer-Encoding: $parsed_email{'content-transfer-encoding'}\n"; + } + if ($need_8bit_cte) { + if ($parsed_email{'content-type'}) { + print "CASE 1\n"; + print $c2 "MIME-Version: 1.0\n", + "Content-Type: $parsed_email{'content-type'};", + "Content-Transfer-Encoding: 8bit\n"; + } else { + print "CASE 2\n"; print $c2 "MIME-Version: 1.0\n", "Content-Type: text/plain; ", - "charset=$compose_encoding\n", + "charset=$compose_encoding\n", "Content-Transfer-Encoding: 8bit\n"; } - } elsif (/^MIME-Version:/i) { - $need_8bit_cte = 0; - } elsif (/^Subject:\s*(.+)\s*$/i) { - $initial_subject = $1; - my $subject = $initial_subject; - $_ = "Subject: " . - quote_subject($subject, $compose_encoding) . - "\n"; - } elsif (/^In-Reply-To:\s*(.+)\s*$/i) { - $initial_reply_to = $1; - next; - } elsif (/^From:\s*(.+)\s*$/i) { - $sender = $1; - next; - } elsif (/^(?:To|Cc|Bcc):/i) { - print __("To/Cc/Bcc fields are not interpreted yet, they have been ignored\n"); - next; - } - print $c2 $_; } + if ($parsed_email{'body'}) { + $summary_empty = 0; + print $c2 "\n$parsed_email{'body'}\n"; + } + close $c; close $c2; + open $c2, "<", $compose_filename . ".final" + or die sprintf(__("Failed to open %s.final: %s"), $compose_filename, $!); + + print "affichage : \n"; + while (<$c2>) { + print $_; + } + + close $c2; + if ($summary_empty) { print __("Summary email is empty, skipping it\n"); $compose = -1; @@ -792,6 +824,20 @@ sub ask { return; } +sub parse_header_line { + my $lines = shift; + my $parsed_line = shift; + + foreach (split(/\n/, $lines)) { + if (/^(To|Cc|Bcc):\s*(.+)$/i) { + $parsed_line->{lc $1} = [ parse_address_line($2) ]; + } elsif (/^(From|Subject|Date|In-Reply-To|Message-ID|MIME-Version|Content-Type|Content-Transfer-Encoding|References):\s*(.+)\s*$/i) { + $parsed_line->{lc $1} = $2; + } + } +} + + my %broken_encoding; sub file_declares_8bit_cte { -- 2.15.1