是否有任何命令可以从 git 补丁文件中获取电子邮件发送/发往日期和日期,还是我必须从解析补丁文件中读取它?
问问题
194 次
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-patch
stdin 创建的文件并打印其一些标题:
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 回答