stupid stumbling over own feet, but seems better now.
authorChris Koeritz <fred@gruntose.com>
Tue, 18 Sep 2012 19:36:04 +0000 (15:36 -0400)
committerChris Koeritz <fred@gruntose.com>
Tue, 18 Sep 2012 19:36:04 +0000 (15:36 -0400)
octopi/library/tentacles/file_transfer_tentacle.cpp
octopi/library/tentacles/recursive_file_copy.cpp

index 877672b11477a482e4453efcdd31c8d8e6ad1c78..23eee9de193ad5afb992e539d39c3e713d430049 100644 (file)
@@ -620,10 +620,12 @@ outcome file_transfer_tentacle::handle_storage_request
       (_correspondences->translate(the_rec->_src_root), *the_rec->_diffs,
       the_rec->_last_sent, resp->_packed_data, _maximum_transfer);
   if (bufret == heavy_file_operations::FINISHED) {
-    // finish by setting command to be a conclude marker.
-    the_rec->_done = true;
-    resp->_command = file_transfer_infoton::CONCLUDE_TRANSFER_MARKER;
-    bufret = OKAY;  // now it's no longer an exceptional outcome.
+    bufret = OKAY;  // in either case, we don't emit a finished outcome; handled elsewhere.
+    if (!resp->_packed_data.length()) {
+      // blank packages, so finish by setting command to be a conclude marker.
+      the_rec->_done = true;
+      resp->_command = file_transfer_infoton::CONCLUDE_TRANSFER_MARKER;
+    }
   } else if (bufret != OKAY) {
     // complain, but still send.
     LOG(astring("buffer files returned an error on item=")
index a159c41c0622493b3f82db6c3ea847372771b8c0..0b33269f73f858fadb768b12fe6a87ea366fc43f 100644 (file)
@@ -165,6 +165,12 @@ outcome recursive_file_copy::copy_hierarchy(int transfer_mode,
     if (!reply)
       RETURN_ERROR_RFC("failed to get ongoing transfer reply", NONE_READY);
 
+    if (reply->_command == file_transfer_infoton::CONCLUDE_TRANSFER_MARKER) {
+      BASE_LOG(astring("finished transfer from \"") + source_dir
+          + "\" to \"" + target_dir + "\"");
+      break;
+    }
+
     byte_array copy = reply->_packed_data;
     while (copy.length()) {
       file_time empty;
@@ -178,18 +184,11 @@ outcome recursive_file_copy::copy_hierarchy(int transfer_mode,
 
 //hmmm: this needs better formatting, and should not repeat the same file name even
 //      if it's in multiple chunks.
-//hmmm: if logging, then...
       BASE_LOG(head.readable_text_form());
     }
     if (copy.length())
       RETURN_ERROR_RFC("still had data in array", GARBAGE);
 
-    if (reply->_command == file_transfer_infoton::CONCLUDE_TRANSFER_MARKER) {
-      BASE_LOG(astring("finished transfer from \"") + source_dir
-          + "\" to \"" + target_dir + "\"");
-      break;
-    }
-
     octopus_request_id resp_id(ent, iter + 11);
     outcome resp_ret = client_spider.evaluate(reply, resp_id);
     if (resp_ret != tentacle::OKAY)