# # # patch "enumerator.cc" # from [6f782f247962a77fae94823273cf195a89be333a] # to [b8137d798b5bb05cc7f2481756ae96091efec7ba] # # patch "enumerator.hh" # from [f320216407b6b06b74fbb692f5bf7d24b73a1868] # to [b2662b4dea76a8d832663ed48342920248449f70] # # patch "netsync.cc" # from [24bd0f42d6023df76088fba26e622f2be1aaf3bf] # to [a9812d9e1de941e6f142602ef48ee75ffec09729] # ============================================================ --- enumerator.cc 6f782f247962a77fae94823273cf195a89be333a +++ enumerator.cc b8137d798b5bb05cc7f2481756ae96091efec7ba @@ -123,10 +123,13 @@ for (map::const_iterator fa = cs.files_added.begin(); fa != cs.files_added.end(); ++fa) { - enumerator_item item; - item.tag = enumerator_item::fdata; - item.ident_a = fa->second.inner(); - items.push_back(item); + if (cb.queue_this_file(fa->second.inner())) + { + enumerator_item item; + item.tag = enumerator_item::fdata; + item.ident_a = fa->second.inner(); + items.push_back(item); + } } // Queue up all the file-deltas @@ -134,11 +137,14 @@ = cs.deltas_applied.begin(); fd != cs.deltas_applied.end(); ++fd) { - enumerator_item item; - item.tag = enumerator_item::fdelta; - item.ident_a = fd->second.first.inner(); - item.ident_b = fd->second.second.inner(); - items.push_back(item); + if (cb.queue_this_file(fd->second.second.inner())) + { + enumerator_item item; + item.tag = enumerator_item::fdelta; + item.ident_a = fd->second.first.inner(); + item.ident_b = fd->second.second.inner(); + items.push_back(item); + } } } ============================================================ --- enumerator.hh f320216407b6b06b74fbb692f5bf7d24b73a1868 +++ enumerator.hh b2662b4dea76a8d832663ed48342920248449f70 @@ -26,6 +26,7 @@ // traversed no matter what you return here. virtual bool process_this_rev(revision_id const & rev) = 0; virtual bool queue_this_cert(hexenc const & c) = 0; + virtual bool queue_this_file(hexenc const & c) = 0; virtual void note_file_data(file_id const & f) = 0; virtual void note_file_delta(file_id const & src, file_id const & dst) = 0; ============================================================ --- netsync.cc 24bd0f42d6023df76088fba26e622f2be1aaf3bf +++ netsync.cc a9812d9e1de941e6f142602ef48ee75ffec09729 @@ -311,7 +311,6 @@ auto_ptr cert_out_ticker; auto_ptr revision_in_ticker; auto_ptr revision_out_ticker; - auto_ptr revision_checked_ticker; vector written_revisions; vector written_keys; @@ -339,8 +338,10 @@ revision_enumerator rev_enumerator; // Enumerator_callbacks methods. + set file_items_sent; bool process_this_rev(revision_id const & rev); bool queue_this_cert(hexenc const & c); + bool queue_this_file(hexenc const & f); void note_file_data(file_id const & f); void note_file_delta(file_id const & src, file_id const & dst); void note_rev(revision_id const & rev); @@ -500,7 +501,6 @@ cert_out_ticker(NULL), revision_in_ticker(NULL), revision_out_ticker(NULL), - revision_checked_ticker(NULL), saved_nonce(""), dbw(app, true), protocol_state(working_state), @@ -592,6 +592,12 @@ != cert_refiner.items_to_send.end()); } +bool +session::queue_this_file(hexenc const & f) +{ + return file_items_sent.find(f) == file_items_sent.end(); +} + void session::note_file_data(file_id const & f) { @@ -602,6 +608,7 @@ decode_hexenc(f.inner(), item); app.db.get_file_version(f, fd); queue_data_cmd(file_item, item, fd.inner()()); + file_items_sent.insert(f); } void @@ -618,6 +625,7 @@ app.db.get_file_version(dst, fd2); diff(fd1.inner(), fd2.inner(), del); queue_delta_cmd(file_item, fid1, fid2, del); + file_items_sent.insert(dst); } void @@ -651,8 +659,6 @@ void session::rev_written_callback(revision_id rid) { - if (revision_checked_ticker.get()) - ++(*revision_checked_ticker); written_revisions.push_back(rid); } @@ -713,8 +719,6 @@ if (role == sink_role) { // xgettext: please use short message and try to avoid multibytes chars - revision_checked_ticker.reset(new ticker(_("revs written"), "w", 1)); - // xgettext: please use short message and try to avoid multibytes chars cert_in_ticker.reset(new ticker(_("certs in"), "c", 3)); // xgettext: please use short message and try to avoid multibytes chars revision_in_ticker.reset(new ticker(_("revs in"), "r", 1)); @@ -730,8 +734,6 @@ { I(role == source_and_sink_role); // xgettext: please use short message and try to avoid multibytes chars - revision_checked_ticker.reset(new ticker(_("revs written"), "w", 1)); - // xgettext: please use short message and try to avoid multibytes chars revision_in_ticker.reset(new ticker(_("revs in"), "r", 1)); // xgettext: please use short message and try to avoid multibytes chars revision_out_ticker.reset(new ticker(_("revs out"), "R", 1));