#
#
# patch "ChangeLog"
# from [e2fd0804a517a3c62c2619e07fb1401d4c9c50ee]
# to [9de161c117d523d724d6ef971a3a4a3f1b3ac21a]
#
# patch "netsync.cc"
# from [a259724511fd7999b39fe3416291886d24ba4445]
# to [92edcc8965d9a45443c912428b3488b586bf65e2]
#
============================================================
--- ChangeLog e2fd0804a517a3c62c2619e07fb1401d4c9c50ee
+++ ChangeLog 9de161c117d523d724d6ef971a3a4a3f1b3ac21a
@@ -1,3 +1,14 @@
+2006-03-18 Richard Levitte
+
+ * netsync.cc (session): Only call the note_netsync hooks if
+ something has been written to the database. The reason is that
+ if those hooks are called from a server process and those hooks
+ are used to update another database (say, for viewmtn), it means
+ another run will be done with monotone to pull from the server,
+ which would trigger another call to the hooks, which would cause
+ another pull, which would cause those hooks to be called again,
+ ...
+
2006-03-17 Richard Levitte
* tests/t_netsync_notes.at: New test to check that the
============================================================
--- netsync.cc a259724511fd7999b39fe3416291886d24ba4445
+++ netsync.cc 92edcc8965d9a45443c912428b3488b586bf65e2
@@ -500,7 +500,7 @@
string nonce;
for (int i = 0; i < 16; i++)
nonce.append(1, letters[Botan::Global_RNG::random(Botan::Nonce)
- % sizeof(letters)]);
+ % (sizeof(letters) - 1)]);
vector unattached_certs;
map > revcerts;
@@ -518,47 +518,52 @@
j->second.push_back(*i);
}
- //Start
- app.lua.hook_note_netsync_start(nonce);
-
- //Keys
- for (vector::iterator i = written_keys.begin();
- i != written_keys.end(); ++i)
+ // if (role == sink_role || role == source_and_sink_role)
+ if (!written_keys.empty()
+ || !written_revisions.empty()
+ || !written_certs.empty())
{
- app.lua.hook_note_netsync_pubkey_received(*i, nonce);
- }
+ //Start
+ app.lua.hook_note_netsync_start(nonce);
- //Revisions
- for (vector::iterator i = written_revisions.begin();
- i != written_revisions.end(); ++i)
- {
- vector & ctmp(revcerts[*i]);
- set > > certs;
- for (vector::const_iterator j = ctmp.begin();
- j != ctmp.end(); ++j)
+ //Keys
+ for (vector::iterator i = written_keys.begin();
+ i != written_keys.end(); ++i)
{
- cert_value vtmp;
- decode_base64(j->value, vtmp);
- certs.insert(make_pair(j->key, make_pair(j->name, vtmp)));
+ app.lua.hook_note_netsync_pubkey_received(*i, nonce);
}
- revision_data rdat;
- app.db.get_revision(*i, rdat);
- app.lua.hook_note_netsync_revision_received(*i, rdat, certs, nonce);
- }
- //Certs (not attached to a new revision)
- for (vector::iterator i = unattached_certs.begin();
- i != unattached_certs.end(); ++i)
- {
- cert_value tmp;
- decode_base64(i->value, tmp);
- app.lua.hook_note_netsync_cert_received(i->ident, i->key,
- i->name, tmp, nonce);
+ //Revisions
+ for (vector::iterator i = written_revisions.begin();
+ i != written_revisions.end(); ++i)
+ {
+ vector & ctmp(revcerts[*i]);
+ set > > certs;
+ for (vector::const_iterator j = ctmp.begin();
+ j != ctmp.end(); ++j)
+ {
+ cert_value vtmp;
+ decode_base64(j->value, vtmp);
+ certs.insert(make_pair(j->key, make_pair(j->name, vtmp)));
+ }
+ revision_data rdat;
+ app.db.get_revision(*i, rdat);
+ app.lua.hook_note_netsync_revision_received(*i, rdat, certs, nonce);
+ }
+ //Certs (not attached to a new revision)
+ for (vector::iterator i = unattached_certs.begin();
+ i != unattached_certs.end(); ++i)
+ {
+ cert_value tmp;
+ decode_base64(i->value, tmp);
+ app.lua.hook_note_netsync_cert_received(i->ident, i->key,
+ i->name, tmp, nonce);
+ }
+
+ //Start
+ app.lua.hook_note_netsync_end(nonce);
}
-
- //Start
- app.lua.hook_note_netsync_end(nonce);
}
bool