chiark / gitweb /
metadata as tsv text header
[ypp-sc-tools.db-test.git] / pctb / commod-update-receiver
index ac52fec7fe89499ab5feed1ca168ec858c0f1776..532bf316bfbec43d24cb6b2e2352b1a25c85b495 100755 (executable)
@@ -119,14 +119,29 @@ foreach my $cs (qw(client server)) {
     $o{"${cs}spec"}= join ' ', map { $o{$cs.$_} } qw(name version fixes);
 }
 
-foreach my $vn (sort keys %o) {
-    my $mpart= MIME::Entity->build(Type => 'text/plain',
-                                  Charset => 'utf-8',
-                                  Disposition => 'inline',
-                                  Data => $o{$vn});
-    $mcontent->add_part($mpart);
+my $metadata= '';
+
+sub ksmap ($) {
+    my ($v) = @_;
+    my $i=0; grep { return $i if $_ eq $v; $i++ } qw(ocean island timestamp);
+    sprintf "z %d %s", (length $v) / 8, $v;
+}
+
+foreach my $vn (sort { ksmap($a) cmp ksmap($b) } keys %o) {
+    my $val= $o{$vn};
+    die if $val =~ m/\n|\r|\t/;
+    $metadata .= "$vn\t$o{$vn}\n";
 }
 
+my $mdpart= MIME::Entity->build(Top => 0,
+                               Type => 'text/plain',
+                               Charset => 'utf-8',
+                               Disposition => 'inline',
+                               Encoding => 'quoted-printable',
+                               Filename => 'metadata',
+                               Data => $metadata);
+$mcontent->add_part($mdpart);
+
 my $gunzchild= open(GZ, "-|"); defined $gunzchild or die $!;
 if (!$gunzchild) {
     open STDIN, "<&=", $indatafh or die $!;
@@ -156,15 +171,21 @@ while (<GZ>) {
 GZ->error and die $!;
 $?=0; close GZ; $? and fail("gunzip for check failed code $?");
 
-my $mdatafile= MIME::Entity->build(Type => 'application/octet-stream',
+my $mdatafile= MIME::Entity->build(Top => 0,
+                                  Type => 'application/octet-stream',
                                   Disposition => 'attachment',
                                   Encoding => 'base64',
-                                  File => $datafile);
+                                  Filename => 'deduped.tsv.gz',
+                                  Path => $datafile);
 $mcontent->add_part($mdatafile);
 
-open M, "|/usr/sbin/sendmail -t -oi -oee -odq"
+open M, "|/usr/sbin/sendmail -t -oi -oee -odb"
     or fail("fork sendmail failed! ($!)");
 $mcontent->print(\*M);
 
 M->error and fail("write sendmail failed! ($!)");
 $?=0; close M; $? and fail("sendmail failed code $?");
+
+print header(-type=>'text/plain', -charset=>'us-ascii'),
+      "OK\n"
+    or die $!;