]> mj.ucw.cz Git - pciids.git/blobdiff - scripts/mailbot
Sort no longer support +1, using -k1
[pciids.git] / scripts / mailbot
index c43c4c50aa912d5b27ac1c202c8cc9e1c68a2788..f2eab76113cdb67bbb7ae74e1f5f128885114567 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 # Mail robot for processing of PCI ID submissions
 # (c) 2001--2002 Martin Mares <mj@ucw.cz>
-# 2008 Michal Vaner <vorner@ucw.cz>
+# (c) 2008 Michal Vaner <vorner@ucw.cz>
 
 use Mail::Header;
 use Getopt::Long;
@@ -34,26 +34,10 @@ my $subject = "";
 my $tables = PciIds::DBQ::new( connectDb() );
 
 my $hasAuth = $tables->dbh()->prepare( 'SELECT id FROM users WHERE email = ?' );
-my $addAuth = $tables->dbh()->prepare( "INSERT INTO users (email, passwd) VALUES(?, '')" );
 my $hasItem = $tables->dbh()->prepare( "SELECT 1 FROM locations WHERE id = ?" );
 my $addItem = $tables->dbh()->prepare( "INSERT INTO locations (id, parent) VALUES (?, ?)" );
 my $addComment = $tables->dbh()->prepare( "INSERT INTO history (owner, location, discussion, nodename, nodenote) VALUES (?, ?, ?, ?, ?)" );
 
-sub getAuthor( $ ) {
-       my( $mail ) = @_;
-       $hasAuth->execute( $mail );
-       if( my( $id ) = $hasAuth->fetchrow_array ) {
-               tlog( "mailbot: Active user ($mail) id: $nid" );
-               return $id;
-       } else {
-               tlog( "mailbot: Creating user $mail" );
-               $addAuth->execute( $mail );
-               my $nid = $tables->dbh->last_insert_id( undef, undef, undef, undef );
-               tlog( "mailbot: Active user ($mail) id: $nid" );
-               return $nid;
-       }
-}
-
 sub submitItem( $$$$$ ) {
        my( $id, $name, $description, $text, $author ) = @_;
        my $created;
@@ -78,6 +62,9 @@ sub submitItem( $$$$$ ) {
        my $hid = $tables->last();
        tlog( "mailbot: History created $hid $id ".logEscape( $name )." ".logEscape( $description )." ".logEscape( $text ) );
        notify( $tables, $id, $hid, $created ? 2 : 1, $created ? 0 : 1 );
+       if( !$tables->notifExists( $author, $id ) ) {
+               $tables->submitNotification( $author, $id, { 'recursive' => 0, 'notification' => 0, 'way' => 0 } );
+       }
 }
 
 if (!$patch) {
@@ -111,9 +98,18 @@ if (!$patch) {
        $author = $reply_plain;
 }
 
-$tprefix = "tmp/mbot-$$";
-$home = "~/";
-mkdir("tmp", 0777);
+$home = "$ENV{HOME}/";
+$tprefix = "${home}tmp/mbot-$$";
+# Little hack to stop spam: ignore everything from people not already in database
+$hasAuth->execute( $author );
+my( $authorId ) = ( $hasAuth->fetchrow_array );
+if( defined $authorId ) {
+       tlog( "mailbot: Active user ($author) id: $authorId" );
+} else {
+       blackhole("Dropping email from $author, not in database.\n");
+}
+
+mkdir("${home}tmp", 0777);
 mkdir($tprefix, 0777) || error("Cannot create tmpdir");
 chdir($tprefix) || error("Cannot chdir to tmpdir");
 
@@ -202,11 +198,11 @@ sub process
                        print LOG "Parsing patched file.\n";
                        print LOG `$home/bin/ids_to_dbdump <$orig 2>&1 >orig.db.unsorted`;
                        $? && error("Error parsing original ID database");
-                       print LOG `sort +1 <orig.db.unsorted >orig.db`;
+                       print LOG `sort -k1 <orig.db.unsorted >orig.db`;
                        $? && error("Error sorting original ID database");
                        print LOG `$home/bin/ids_to_dbdump <pci.ids 2>&1 >new.db.unsorted`;
                        $? && error("Error parsing the patched pci.ids file");
-                       print LOG `sort +1 <new.db.unsorted >new.db`;
+                       print LOG `sort -k1 <new.db.unsorted >new.db`;
                        $? && error("Error sorting the patched pci.ids file");
                        print LOG "Finding ID differences.\n";
                        `diff -U0 new.db orig.db >diffs`;
@@ -214,7 +210,6 @@ sub process
                        elsif (!$?) { error("No ID changes encountered."); }
                        open(DIFF, "diffs") || error("Cannot open the diff");
                        $subject = undef if $subject eq '';
-                       my $authorId = getAuthor( $author );
                        my $live = (!$emulate && !$debug);
                        while (<DIFF>) {
                                chomp;