# # # patch "cmd_netsync.cc" # from [351b6596193cc5b9f2e248f3800d594b549b8632] # to [62159d3af04e6f156e30da179b30b043835da8bb] # # patch "monotone.texi" # from [fdb503ac6d8193d9102cb519f0219c117da9a974] # to [177b4ecfde2afa533f04aa542b03bf1271bfba1c] # # patch "tests/automate_netsync/pull_r1.expected" # from [0b6810e239e6d498cf412f017fcaae5db4cc2228] # to [897dceb9ee821ebf8c79cd42c1403949e76710cb] # # patch "tests/automate_netsync/push_cert.expected" # from [dce134b636439cbd2a8d90597a99012766a0b7a0] # to [244e0a38f5de81bfb4f24342471796963c7ee8c1] # # patch "tests/automate_netsync/send_branch.expected" # from [f4aeadf6bb878ab8c2bc6628d7fc5ba080de0ebd] # to [109353ef2b6e3770ada4aace7bcfeb69c1ffafe8] # # patch "tests/automate_netsync/sync_keys.expected" # from [e62b6fa3689dfeb51f2117de66be65979aadf2f4] # to [15e57156a3eb9c30cb4ab4d3709eb7d38bf48819] # # patch "tests/automate_netsync_dryrun/__driver__.lua" # from [ae9a242e0c5d35a648f44291d7db7d7921f21693] # to [86330dd0aa017dc4ee1c9afb4b69bd3ea75b7e78] # # patch "tests/automate_netsync_dryrun/pull_r1.expected" # from [73f339b0c882ae1687137f3d021117a1ef914912] # to [7edf50e964638f91a1a5944f21fd49f8d4e598bb] # # patch "tests/automate_netsync_dryrun/push_cert.expected" # from [964ccf3ee21eea2cf511ec47a1309268ef1709d4] # to [e5b962fcd0430619b34e6c750da885268addfbc9] # # patch "tests/automate_netsync_dryrun/send_branch.expected" # from [60a25e5e0344c9fdc84c156dbd0bc5a10fe4f26a] # to [fe5c101bd7231665a5b2bcbe0d724813532a4413] # # patch "tests/automate_netsync_dryrun/sync_keys.expected" # from [561ef6ed396b07ac8d3a21ba9795cc07e751afd5] # to [6660948e77aa5c8086642c0035b210065fe7f5a1] # ============================================================ --- monotone.texi fdb503ac6d8193d9102cb519f0219c117da9a974 +++ monotone.texi 177b4ecfde2afa533f04aa542b03bf1271bfba1c @@ -8541,83 +8541,77 @@ @section Automation The following is example main channel data: @verbatim -receive revision +receive_cert "test" + value "value" + key [05c26b6cb109ca39bc48bbbdce83564c97796155] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] -revision [114f6aa58c7707bf83516d4080ca6268c36640ad] +receive_revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "branch" -value "foo" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + receive_cert "branch" + value "foo" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "changelog" -value "R1 + receive_cert "changelog" + value "R1 " - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "date" -value "2010-09-01T12:00:00" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + receive_cert "date" + value "2010-09-01T12:00:00" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "author" -value "address@hidden" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + receive_cert "author" + value "address@hidden" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] -receive cert +receive_key [111808abc306fd7423b564f2a8ef5c09745b87d2] - cert "test" - value "value" - key [111808abc306fd7423b564f2a8ef5c09745b87d2] -revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] +send_cert "test" + value "value" + key [05c26b6cb109ca39bc48bbbdce83564c97796155] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] -receive key +send_revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] -key [111808abc306fd7423b564f2a8ef5c09745b87d2] +send_cert "branch" + value "foo2" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] -send revision - -revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - - cert "branch" -value "foo2" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] - - cert "changelog" -value "R2 +send_cert "changelog" + value "R2 " - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "date" -value "2010-09-01T12:00:00" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +send_cert "date" + value "2010-09-01T12:00:00" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "author" -value "address@hidden" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +send_cert "author" + value "address@hidden" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] -send cert - - cert "test" - value "value" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] -revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - -send key - -key [05c26b6cb109ca39bc48bbbdce83564c97796155] +send_key [05c26b6cb109ca39bc48bbbdce83564c97796155] @end verbatim The following is example dry-run main channel data: @verbatim - receive -revision "0" - cert "1" - key "1" - - send -revision "1" - cert "6" - key "1" - branch "foo2" "1" + estimate +receive_revision "0" + receive_cert "0" + receive_key "0" + send_revision "1" + send_cert "5" + send_key "0" + send_branch "foo2" "1" @end verbatim The following shows the progress and ticker data for a pull @@ -8655,19 +8649,20 @@ @section Automation For non-dry-run, all stanzas are optional; they are only output if the data they describe is transferred. -If revisions are received, there is a header stanza @code{receive -revision}. Then for each revision, there is a stanza containing the -revision id, followed by a stanza containing the cert name, value, and -key for each cert associated with the revision. +A partial order is imposed, that the parser can use in deciding how to +store the data. First all certs associated with revisions that are not +transferred in this sync are output, then revisions with associated +certs, then keys. All received data is output before all sent data. -If certs not associated with a transmitted revision are received, -there is a header stanza @code{receive cert}. Then for each cert, +For each cert not associated with a transmitted revision, there is a stanza giving the cert name, value, key, and revision. -If keys are received, there is one stanza containing one line for each -key, giving the key id. +For each revision, there is a stanza containing the revision +id, followed by a stanza containing the cert name, value, key, and +revision id for each cert associated with the revision. -Similarly for sent revisions, certs, and keys. +For each key, there is one stanza containing one line giving the key +id. If run outside of @command{automate stdio}, the progress and ticker output of these commands is equal to the normal netsync command @@ -8696,12 +8691,14 @@ @section Automation @item @code{R}: The number of outgoing revisions (only push and sync) @end itemize -For dry-run, two optional stanzas are output, giving the revision, -cert, and key counts for send and receive. For send, the branch names -of sent revisions are also output. Note that in the branch list, -revisions that have multiple branch certs are listed twice, so the sum -of the revision counts in the branch list may be greater than the -number of revisions transferred. +For dry-run, one stanza is output, with optional lines giving the +revision, cert, and key counts for send and receive. Under some +circumstances, the number of keys that would be received is only an +estimate; in that case, the symbol @code{estimate} is output. For +send, the branch names of sent revisions are also output. Note that in +the branch list, revisions that have multiple branch certs are listed +twice, so the sum of the revision counts in the branch list may be +greater than the number of revisions transferred. @item Error conditions: ============================================================ --- cmd_netsync.cc 351b6596193cc5b9f2e248f3800d594b549b8632 +++ cmd_netsync.cc 62159d3af04e6f156e30da179b30b043835da8bb @@ -332,13 +332,16 @@ namespace { namespace syms { - symbol const branch("branch"); - symbol const cert("cert"); symbol const estimate("estimate"); symbol const key("key"); - symbol const receive("receive"); + symbol const receive_cert("receive_cert"); + symbol const receive_key("receive_key"); + symbol const receive_revision("receive_revision"); symbol const revision("revision"); - symbol const send("send"); + symbol const send_branch("send_branch"); + symbol const send_cert("send_cert"); + symbol const send_key("send_key"); + symbol const send_revision("send_revision"); symbol const value("value"); } } @@ -351,39 +354,37 @@ print_dryrun_info_auto(protocol_role rol { // print dry run info for automate session basic_io::printer pr; + basic_io::stanza st; if (role != source_role) { // sink or sink_and_source; print sink info - basic_io::stanza st; - st.push_symbol(syms::receive); if (counts->keys_in.can_have_more_than_min) { st.push_symbol(syms::estimate); } - st.push_str_pair(syms::revision, + st.push_str_pair(syms::receive_revision, boost::lexical_cast(counts->revs_in.min_count)); - st.push_str_pair(syms::cert, + st.push_str_pair(syms::receive_cert, boost::lexical_cast(counts->certs_in.min_count)); - st.push_str_pair(syms::key, + st.push_str_pair(syms::receive_key, boost::lexical_cast(counts->keys_in.min_count)); - pr.print_stanza(st); } if (role != sink_role) { // source or sink_and_source; print source info - basic_io::stanza st; - st.push_symbol(syms::send); - st.push_str_pair(syms::revision, + st.push_str_pair(syms::send_revision, boost::lexical_cast(counts->revs_out.items.size())); - st.push_str_pair(syms::cert, + st.push_str_pair(syms::send_cert, boost::lexical_cast(counts->certs_out.min_count)); - st.push_str_pair(syms::key, + st.push_str_pair(syms::send_key, boost::lexical_cast(counts->keys_out.min_count)); + + // count revisions per branch map branch_counts; for (vector::const_iterator i = counts->revs_out.items.begin(); i != counts->revs_out.items.end(); ++i) @@ -399,25 +400,31 @@ print_dryrun_info_auto(protocol_role rol for (map::iterator i = branch_counts.begin(); i != branch_counts.end(); ++i) { - st.push_str_triple(syms::branch, i->first(), boost::lexical_cast(i->second)); + st.push_str_triple(syms::send_branch, i->first(), boost::lexical_cast(i->second)); } - pr.print_stanza(st); } + pr.print_stanza(st); output.write(pr.buf.data(), pr.buf.size()); } static void -print_cert(cert const & item, - basic_io::printer & pr, - bool print_rev) +print_cert(bool send, + cert const & item, + basic_io::printer & pr) { basic_io::stanza st; - st.push_str_pair(syms::cert, item.name()); + if (send) + { + st.push_str_pair(syms::send_cert, item.name()); + } + else + { + st.push_str_pair(syms::receive_cert, item.name()); + } st.push_str_pair(syms::value, item.value()); st.push_binary_pair(syms::key, item.key.inner()); - if (print_rev) - st.push_binary_pair(syms::revision, item.ident.inner()); + st.push_binary_pair(syms::revision, item.ident.inner()); pr.print_stanza(st); } @@ -438,63 +445,41 @@ print_info_auto(protocol_role role, map > rev_certs; sort_rev_order (counts->revs_in, counts->certs_in, unattached_certs, rev_certs); - if (rev_certs.size() > 0) + if (unattached_certs.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::receive, syms::revision); - pr.print_stanza(st); - } - - { - for (map >::const_iterator i = rev_certs.begin(); - i != rev_certs.end(); ++i) - { - basic_io::stanza st; - st.push_binary_pair(syms::revision, i->first.inner()); - pr.print_stanza(st); - - for (vector::const_iterator j = i->second.begin(); - j != i->second.end(); ++j) - { - print_cert(*j, pr, false); - } - } - } + for (vector::const_iterator i = unattached_certs.begin(); + i != unattached_certs.end(); ++i) + { + print_cert(false, *i, pr); + } } - if (unattached_certs.size() > 0) + if (rev_certs.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::receive, syms::cert); - pr.print_stanza(st); - } + for (map >::const_iterator i = rev_certs.begin(); + i != rev_certs.end(); ++i) + { + basic_io::stanza st; + st.push_binary_pair(syms::receive_revision, i->first.inner()); + pr.print_stanza(st); - for (vector::const_iterator i = unattached_certs.begin(); - i != unattached_certs.end(); ++i) - { - print_cert(*i, pr, true); + for (vector::const_iterator j = i->second.begin(); + j != i->second.end(); ++j) + { + print_cert(false, *j, pr); + } } } if (counts->keys_in.items.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::receive, syms::key); - pr.print_stanza(st); - } - - { - basic_io::stanza st; - for (vector::const_iterator i = counts->keys_in.items.begin(); - i != counts->keys_in.items.end(); ++i) - { - st.push_binary_pair(syms::key, i->inner()); - } - pr.print_stanza(st); - } + basic_io::stanza st; + for (vector::const_iterator i = counts->keys_in.items.begin(); + i != counts->keys_in.items.end(); ++i) + { + st.push_binary_pair(syms::receive_key, i->inner()); + } + pr.print_stanza(st); } } @@ -506,63 +491,41 @@ print_info_auto(protocol_role role, map > rev_certs; sort_rev_order (counts->revs_out, counts->certs_out, unattached_certs, rev_certs); - if (rev_certs.size() > 0) + if (unattached_certs.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::send, syms::revision); - pr.print_stanza(st); - } - - { - for (map >::const_iterator i = rev_certs.begin(); - i != rev_certs.end(); ++i) - { - basic_io::stanza st; - st.push_binary_pair(syms::revision, i->first.inner()); - pr.print_stanza(st); - - for (vector::const_iterator j = i->second.begin(); - j != i->second.end(); ++j) - { - print_cert(*j, pr, false); - } - } - } + for (vector::const_iterator i = unattached_certs.begin(); + i != unattached_certs.end(); ++i) + { + print_cert(true, *i, pr); + } } - if (unattached_certs.size() > 0) + if (rev_certs.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::send, syms::cert); - pr.print_stanza(st); - } + for (map >::const_iterator i = rev_certs.begin(); + i != rev_certs.end(); ++i) + { + basic_io::stanza st; + st.push_binary_pair(syms::send_revision, i->first.inner()); + pr.print_stanza(st); - for (vector::const_iterator i = unattached_certs.begin(); - i != unattached_certs.end(); ++i) - { - print_cert(*i, pr, true); + for (vector::const_iterator j = i->second.begin(); + j != i->second.end(); ++j) + { + print_cert(true, *j, pr); + } } } if (counts->keys_out.items.size() > 0) { - { - basic_io::stanza st; - st.push_str_pair(syms::send, syms::key); - pr.print_stanza(st); - } - - { - basic_io::stanza st; - for (vector::const_iterator i = counts->keys_out.items.begin(); - i != counts->keys_out.items.end(); ++i) - { - st.push_binary_pair(syms::key, i->inner()); - } - pr.print_stanza(st); - } + basic_io::stanza st; + for (vector::const_iterator i = counts->keys_out.items.begin(); + i != counts->keys_out.items.end(); ++i) + { + st.push_binary_pair(syms::send_key, i->inner()); + } + pr.print_stanza(st); } } ============================================================ --- tests/automate_netsync/pull_r1.expected 0b6810e239e6d498cf412f017fcaae5db4cc2228 +++ tests/automate_netsync/pull_r1.expected 897dceb9ee821ebf8c79cd42c1403949e76710cb @@ -1,20 +1,22 @@ -receive revision +receive_revision [114f6aa58c7707bf83516d4080ca6268c36640ad] -revision [114f6aa58c7707bf83516d4080ca6268c36640ad] +receive_cert "branch" + value "foo" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "branch" -value "foo" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] - - cert "changelog" -value "R1 +receive_cert "changelog" + value "R1 " - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "date" -value "2010-09-01T12:00:00" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +receive_cert "date" + value "2010-09-01T12:00:00" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] - cert "author" -value "address@hidden" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +receive_cert "author" + value "address@hidden" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] ============================================================ --- tests/automate_netsync/push_cert.expected dce134b636439cbd2a8d90597a99012766a0b7a0 +++ tests/automate_netsync/push_cert.expected 244e0a38f5de81bfb4f24342471796963c7ee8c1 @@ -1,6 +1,4 @@ -send cert - - cert "test" - value "value" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] -revision [114f6aa58c7707bf83516d4080ca6268c36640ad] +send_cert "test" + value "value" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [114f6aa58c7707bf83516d4080ca6268c36640ad] ============================================================ --- tests/automate_netsync/send_branch.expected f4aeadf6bb878ab8c2bc6628d7fc5ba080de0ebd +++ tests/automate_netsync/send_branch.expected 109353ef2b6e3770ada4aace7bcfeb69c1ffafe8 @@ -1,20 +1,22 @@ -send revision +send_revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] -revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] +send_cert "branch" + value "foo2" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "branch" -value "foo2" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] - - cert "changelog" -value "R2 +send_cert "changelog" + value "R2 " - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "date" -value "2010-09-01T12:00:00" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +send_cert "date" + value "2010-09-01T12:00:00" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "author" -value "address@hidden" - key [46ec58576f9e4f34a9eede521422aa5fd299dc50] +send_cert "author" + value "address@hidden" + key [46ec58576f9e4f34a9eede521422aa5fd299dc50] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] ============================================================ --- tests/automate_netsync/sync_keys.expected e62b6fa3689dfeb51f2117de66be65979aadf2f4 +++ tests/automate_netsync/sync_keys.expected 15e57156a3eb9c30cb4ab4d3709eb7d38bf48819 @@ -1,21 +1,13 @@ -receive cert +receive_cert "test" + value "value" + key [111808abc306fd7423b564f2a8ef5c09745b87d2] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - cert "test" - value "value" - key [111808abc306fd7423b564f2a8ef5c09745b87d2] -revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] +receive_key [111808abc306fd7423b564f2a8ef5c09745b87d2] -receive key +send_cert "test" + value "value" + key [05c26b6cb109ca39bc48bbbdce83564c97796155] + revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] -key [111808abc306fd7423b564f2a8ef5c09745b87d2] - -send cert - - cert "test" - value "value" - key [05c26b6cb109ca39bc48bbbdce83564c97796155] -revision [2a46f4b909071fae756b4911a247ce3ff1c3c4ce] - -send key - -key [05c26b6cb109ca39bc48bbbdce83564c97796155] +send_key [05c26b6cb109ca39bc48bbbdce83564c97796155] ============================================================ --- tests/automate_netsync_dryrun/__driver__.lua ae9a242e0c5d35a648f44291d7db7d7921f21693 +++ tests/automate_netsync_dryrun/__driver__.lua 86330dd0aa017dc4ee1c9afb4b69bd3ea75b7e78 @@ -25,7 +25,7 @@ check(mtn2("automate", "pull", "--dry-ru -- Pull branch 'bar' from test.db to test2.db; nothing to transfer, so -- all zeros on stdout. stderr has progress messages, ticker check(mtn2("automate", "pull", "--dry-run", "mtn://" .. srv.address .. "?bar"), 0, true, false) -check(readfile("stdout") == " receive \nrevision \"0\"\n cert \"0\"\n key \"0\"\n") +check(readfile("stdout") == "receive_revision \"0\"\n receive_cert \"0\"\n receive_key \"0\"\n") -- Pull branch 'foo', confirm dryrun output get("pull_r1.expected") ============================================================ --- tests/automate_netsync_dryrun/pull_r1.expected 73f339b0c882ae1687137f3d021117a1ef914912 +++ tests/automate_netsync_dryrun/pull_r1.expected 7edf50e964638f91a1a5944f21fd49f8d4e598bb @@ -1,4 +1,3 @@ - receive -revision "1" - cert "4" - key "1" +receive_revision "1" + receive_cert "4" + receive_key "1" ============================================================ --- tests/automate_netsync_dryrun/push_cert.expected 964ccf3ee21eea2cf511ec47a1309268ef1709d4 +++ tests/automate_netsync_dryrun/push_cert.expected e5b962fcd0430619b34e6c750da885268addfbc9 @@ -1,4 +1,3 @@ - send -revision "0" - cert "1" - key "0" +send_revision "0" + send_cert "1" + send_key "0" ============================================================ --- tests/automate_netsync_dryrun/send_branch.expected 60a25e5e0344c9fdc84c156dbd0bc5a10fe4f26a +++ tests/automate_netsync_dryrun/send_branch.expected fe5c101bd7231665a5b2bcbe0d724813532a4413 @@ -1,10 +1,7 @@ - receive -revision "0" - cert "0" - key "0" - - send -revision "1" - cert "5" - key "0" - branch "foo2" "1" +receive_revision "0" + receive_cert "0" + receive_key "0" + send_revision "1" + send_cert "5" + send_key "0" + send_branch "foo2" "1" ============================================================ --- tests/automate_netsync_dryrun/sync_keys.expected 561ef6ed396b07ac8d3a21ba9795cc07e751afd5 +++ tests/automate_netsync_dryrun/sync_keys.expected 6660948e77aa5c8086642c0035b210065fe7f5a1 @@ -1,10 +1,7 @@ - receive -revision "0" - cert "1" - key "1" - - send -revision "1" - cert "6" - key "1" - branch "foo2" "1" +receive_revision "0" + receive_cert "1" + receive_key "1" + send_revision "1" + send_cert "6" + send_key "1" + send_branch "foo2" "1"