From af679af8257e250ac606e35a1307ad02907b8426 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sat, 18 Oct 2014 13:02:12 -0700 Subject: [PATCH] ssoma-mda: Use the email subject as the commit message This is more interesting than just using 'mda' all the time, but it's harder to setup proper quoting around the message without using third-party Perl modules (e.g. IPC::Run or String::ShellQuote). This proof-of-concept patch just assumes the subject doesn't contain single-quotes ('). This patch also doesn't handle the empty/missing subject case, which should probably fall back to '' or some such. I'm fine dropping support for older Gits here, and just using the -m option to commit-tree. That landed with 96b8d93a (commit-tree: teach -m/-F options to read logs from elsewhere, 2011-11-09) in Git v1.7.9, which was released over 2.5 years ago on 2012-01-27. It would also be useful (I think) to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and GIT_AUTHOR_DATE environment variables from the message header before committing. I know how to do that using Python's subprocess module, but I don't know the Perl incantation. --- lib/Ssoma/Git.pm | 5 ++--- lib/Ssoma/MDA.pm | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Ssoma/Git.pm b/lib/Ssoma/Git.pm index 2211893..e8d4cf6 100644 --- a/lib/Ssoma/Git.pm +++ b/lib/Ssoma/Git.pm @@ -266,10 +266,9 @@ sub commit_index { my @cmd = qw/git commit-tree/; push @cmd, $tree; push @cmd, '-p', $parent if $parent; + push @cmd, '-m', "'$message'"; - # 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 = $self->qx_sha1(join(' ', @cmd)); # update the ref @cmd = (qw/git update-ref/, $ref, $commit); diff --git a/lib/Ssoma/MDA.pm b/lib/Ssoma/MDA.pm index 02816a5..6b58b43 100644 --- a/lib/Ssoma/MDA.pm +++ b/lib/Ssoma/MDA.pm @@ -102,7 +102,8 @@ sub append { my $id = $git->simple_to_blob($simple); $gii->update('100644', $id, $path); } - $git->commit_index($gii, 0, $ref, "mda"); + my $subject = $simple->header("Subject"); + $git->commit_index($gii, 0, $ref, $subject); } # the main entry point takes an Email::Simple object -- 2.26.2