chiark / gitweb /
cmd updates: Restart updates when insert follows delete
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 31 Mar 2021 18:14:13 +0000 (19:14 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 1 Apr 2021 10:37:58 +0000 (11:37 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs

index b7dfdd6730ebbf2007307b6dfd86f7520c0a0447..1556e5e0634dcbe7f3a0ff4773e6bbd2baf65638 100644 (file)
@@ -924,6 +924,7 @@ fn execute_for_game<'cs, 'igr, 'ig: 'igr>(
 #[derive(Debug,Default)]
 struct UpdateHandlerBulk {
   pieces: HashMap<PieceId, PieceUpdateOp<(),()>>,
+  have_deleted: bool,
   logs: bool,
   raw: Vec<PreparedUpdateEntry>,
 }
@@ -952,6 +953,15 @@ impl UpdateHandler {
     match self {
       Bulk(bulk) => {
         for (upiece, uuop) in updates.pcs {
+          match uuop {
+            Insert(()) if bulk.have_deleted => {
+              UpdateHandler::Bulk(mem::take(bulk)).complete(g, who)?;
+            },
+            Delete() => {
+              bulk.have_deleted = true;
+            },
+            _ => { },
+          }
           use PieceUpdateOp::*;
           let oe = bulk.pieces.get(&upiece);
           let ne = match (oe, uuop) {