This is more interesting than just using 'mda' all the time. Based on original patch by: W. Trevor King
Cc: W. Trevor King <wk...@tremily.us> --- Makefile.PL | 1 + lib/Ssoma/Git.pm | 13 +++++++------ lib/Ssoma/MDA.pm | 4 +++- t/all.t | 2 ++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index 3b961ff..a28be51 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -19,6 +19,7 @@ WriteMakefile( 'Email::LocalDelivery' => 0, 'Email::Simple' => 0, 'Email::MIME' => 0, + 'IPC::Run' => 0, 'File::Path::Expand' => 0, 'Net::IMAP::Simple' => 0, }, diff --git a/lib/Ssoma/Git.pm b/lib/Ssoma/Git.pm index 839d07a..60058df 100644 --- a/lib/Ssoma/Git.pm +++ b/lib/Ssoma/Git.pm @@ -14,6 +14,7 @@ use Fcntl qw/:DEFAULT :flock SEEK_END/; use IO::Handle; use Email::Simple; use Digest::SHA qw/sha1_hex/; +use IPC::Run qw/run/; # Future versions of Ssoma will always be able to handle this version, at least our $REPO_VERSION = 1; @@ -261,19 +262,19 @@ sub commit_index { my @cmd = qw/git commit-tree/; push @cmd, $tree; push @cmd, '-p', $parent if $parent; - - # git commit-tree -m didn't work in older git versions - $message =~ /\A\w+\z/ or die "message must be \\w+ only\n"; - my $commit = $self->qx_sha1("echo $message |". join(' ', @cmd)); + my $commit = ''; + $cmd = join(' ', @cmd); + run(\@cmd, \$message, \$commit) or die "command: $cmd failed: $?\n"; + $commit = ensure_sha1($commit, $cmd); # update the ref @cmd = (qw/git update-ref/, $ref, $commit); push @cmd, $parent if $parent; # verification - system(@cmd) == 0 or die "command: ". join(' ', @cmd) . ": $?\n"; + system(@cmd) == 0 or die "command: $cmd failed: $?\n"; # gc if needed @cmd = qw/git gc --auto/; - system(@cmd) == 0 or die "command: ". join(' ', @cmd) . ": $?\n"; + system(@cmd) == 0 or die "command: $cmd failed: $?\n"; } # keep Git.pm optional, not all installations of git have it diff --git a/lib/Ssoma/MDA.pm b/lib/Ssoma/MDA.pm index 387b1a2..46dd79e 100644 --- a/lib/Ssoma/MDA.pm +++ b/lib/Ssoma/MDA.pm @@ -110,10 +110,12 @@ sub append { my $name = $from[0]->name; my $email = $from[0]->address; my $date = $mime->header('Date'); + my $subject = $mime->header("Subject"); + $subject = '(no subject)' unless defined $subject; local $ENV{GIT_AUTHOR_NAME} ||= $name if defined $name; local $ENV{GIT_AUTHOR_EMAIL} ||= $email if defined $email; local $ENV{GIT_AUTHOR_DATE} ||= $date if defined $date; - $git->commit_index($gii, 0, $ref, "mda"); + $git->commit_index($gii, 0, $ref, $subject); } } diff --git a/t/all.t b/t/all.t index 6f6a203..2d86989 100644 --- a/t/all.t +++ b/t/all.t @@ -52,6 +52,8 @@ EOF chomp @x; my @au = grep(/^author /, @x); like($au[0], qr/\Aauthor me <me\@example\.com>/, "author set"); + + is('zzz', $x[-1], "subject set"); } } -- EW -- unsubscribe: meta+unsubscr...@public-inbox.org archive: http://public-inbox.org/meta/