1

是否有任何命令可以从 git 补丁文件中获取电子邮件发送/发往日期和日期,还是我必须从解析补丁文件中读取它?

4

2 回答 2

0

应该涉及解析,因为这git apply无济于事:

git apply --summary

正如您在任何t/t4100/t-apply-*.expect文件中看到的那样,没有提及日期或电子邮件。


话虽如此,由于git format-patch产生了 Unix 邮箱格式,您可以使用工具 lie mailutils在 C中解析这样的文件
。 或者(更容易)使用perl 脚本

while (($line = <F>)) {

   # set variables in order
   chomp($line);
   if ($line =~ /^From /){
        $count++;
   }
   elsif ($line =~ /^Date:/){
        ($date_text,$date) = split(/:/,$line);
   }
   elsif ($line =~ /^From:/){
        ($from_text,$from) = split(/:/,$line);
   }
   elsif ($line =~ /^Subject:/){
        ($subject_text,$subject) = split(/:/,$line);
   }
于 2014-01-25T07:45:23.407 回答
0

formail 命令(我认为通常与 procmail 一起分发)可用于提取电子邮件标题:

formail -x Date < 0000-Some-commit.patch

与使用 sed 或 VonC 答案中发布的简短 Perl 脚本进行临时解析相比,一个不同之处在于它处理换行的标题行。

Subject: The line is so long that
  is has been wrapped.

这对于 Date、From 和 To 行应该是不寻常的,但对于 Subject 行很常见。

甚至 formail 都不处理的另一个极端情况是根据RFC 2047编码的标头字段,如果该行包含纯 US-ASCII 以外的任何内容,则这是必需的。

我建议您使用可用于您使用的语言的任何电子邮件/MIME 解析库。由于您在问题标题中提到了 Python,因此这里有一个简短的 Python 示例,用于读取由git format-patchstdin 创建的文件并打印其一些标题:

import email.header
import email.parser
import sys

def decode_header(s):
    return ' '.join(
        text.decode(charset) if charset else text
        for text, charset in email.header.decode_header(s))

message = email.parser.Parser().parse(sys.stdin)
print decode_header(message['From'])
print decode_header(message['Date'])
print decode_header(message['Subject'])
于 2014-01-25T21:51:12.897 回答