]> git.sesse.net Git - remoteglot/blobdiff - remoteglot.pl
Fix an issue (not yet visible, really) where conversion from single multi-PV would...
[remoteglot] / remoteglot.pl
index a0c1bf12987b526964e03a6a1cb62c1b4d0c4a4c..9f0ac3f8f9352ffcde08343679bfea6dce27080a 100755 (executable)
@@ -67,6 +67,7 @@ select(TBLOG);
 $| = 1;
 
 select(STDOUT);
+umask 0022;
 
 # open the chess engine
 my $engine = open_engine($remoteglotconf::engine_cmdline, 'E1', sub { handle_uci(@_, 1); });
@@ -275,8 +276,12 @@ sub handle_pgn {
        }
 
        my $pgn = Chess::PGN::Parse->new(undef, $body);
-       if (!defined($pgn) || !$pgn->read_game() || $body !~ /^\[/) {
-               warn "Error in parsing PGN from $url\n";
+       if (!defined($pgn)) {
+               warn "Error in parsing PGN from $url [body='$body']\n";
+       } elsif (!$pgn->read_game()) {
+               warn "Error in reading PGN game from $url [body='$body']\n";
+       } elsif ($body !~ /^\[/) {
+               warn "Malformed PGN from $url [body='$body']\n";
        } else {
                eval {
                        # Skip to the right game.
@@ -295,7 +300,7 @@ sub handle_pgn {
                                push @uci_moves, $uci_move;
 
                                # Re-prettyprint the move.
-                               my ($from_col, $from_row, $to_col, $to_row, $promo) = parse_uci_move($uci_move);
+                               my ($from_row, $from_col, $to_row, $to_col, $promo) = parse_uci_move($uci_move);
                                my ($pretty, undef) = $pos->{'board'}->prettyprint_move($from_row, $from_col, $to_row, $to_col, $promo);
                                push @repretty_moves, $pretty;
                                $pos = $npos;
@@ -507,7 +512,7 @@ sub prettyprint_pv_no_cache {
        }
 
        my $pv = shift @pvs;
-       my ($from_col, $from_row, $to_col, $to_row, $promo) = parse_uci_move($pv);
+       my ($from_row, $from_col, $to_row, $to_col, $promo) = parse_uci_move($pv);
        my ($pretty, $nb) = $board->prettyprint_move($from_row, $from_col, $to_row, $to_col, $promo);
        return ( $pretty, prettyprint_pv_no_cache($nb, @pvs) );
 }
@@ -589,6 +594,8 @@ sub output {
                for my $key (qw(pv score_cp score_mate nodes nps depth seldepth tbhits)) {
                        if (exists($info->{$key . '1'})) {
                                $info->{$key} = $info->{$key . '1'};
+                       } else {
+                               delete $info->{$key};
                        }
                }
        }
@@ -898,12 +905,16 @@ sub output_json {
                    ($new_depth == $old_depth && $new_nodes >= $old_nodes)) {
                        atomic_set_contents($filename, $encoded);
                        if (defined($json->{'plot_score'})) {
-                               local $dbh->{AutoCommit} = 0;
-                               $dbh->do('DELETE FROM scores WHERE id=?', undef, $id);
-                               $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?)', undef,
+                               $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?) ' .
+                                        '    ON CONFLICT (id) DO UPDATE SET ' .
+                                        '        plot_score=EXCLUDED.plot_score, ' .
+                                        '        short_score=EXCLUDED.short_score, ' .
+                                        '        engine=EXCLUDED.engine, ' .
+                                        '        depth=EXCLUDED.depth, ' .
+                                        '        nodes=EXCLUDED.nodes',
+                                       undef,
                                        $id, $json->{'plot_score'}, $json->{'short_score'},
                                        $json->{'engine'}{'name'}, $new_depth, $new_nodes);
-                               $dbh->commit;
                        }
                }
        }
@@ -1335,5 +1346,5 @@ sub parse_uci_move {
        my $to_col   = col_letter_to_num(substr($move, 2, 1));
        my $to_row   = row_letter_to_num(substr($move, 3, 1));
        my $promo    = substr($move, 4, 1);
-       return ($from_col, $from_row, $to_col, $to_row, $promo);
+       return ($from_row, $from_col, $to_row, $to_col, $promo);
 }