# # # patch "ChangeLog" # from [258fa7ece1afa815ba9cfa7ac924aff2f66de342] # to [ab3e32f8f6bb3962c50de379674b8209afaae127] # # patch "automate.cc" # from [68d579fc833b4a0ec52a0c8e5b130af7517ab7ed] # to [a8b515148a3944e116f97c4d084f8bdd5e5b5eaf] # # patch "commands.cc" # from [ffda8a186503943a14239e5193698d3c57a94c01] # to [b8bd7c0f89059356c00616eb2fbfdeb378108b2d] # # patch "tests/t_bad_packets.at" # from [8e2ff9cc8d268247ab5471a1ac4548565e814eb5] # to [2ab2b87f1b55c89f0132a7942a62f2d70c92c313] # ============================================================ --- ChangeLog 258fa7ece1afa815ba9cfa7ac924aff2f66de342 +++ ChangeLog ab3e32f8f6bb3962c50de379674b8209afaae127 @@ -1,3 +1,11 @@ +2006-03-03 Patrick Mauritz + + * commands.cc: remove rdata, certs, fdata and fdelta commands + from user interface, and move them to + * automate.cc: the automate interface as packet_for_rdata, + packets_for_certs, packet_for_fdata, packet_for_fdelta + * tests/t_bad_packets.at: adapt for 0.26 and for the changes above + 2006-03-02 Derek Scherger testsuite.at: fix broken include of t_restriction_excludes_parent.at ============================================================ --- automate.cc 68d579fc833b4a0ec52a0c8e5b130af7517ab7ed +++ automate.cc a8b515148a3944e116f97c4d084f8bdd5e5b5eaf @@ -25,6 +25,7 @@ #include "transforms.hh" #include "vocab.hh" #include "keys.hh" +#include "packet.hh" static std::string const interface_version = "2.0"; @@ -1034,6 +1035,134 @@ output.write(dat.inner()().data(), dat.inner()().size()); } +// Name: packet_for_rdata +// Arguments: +// 1: a revision id +// Added in: 2.0 +// Purpose: Prints the revision data in packet format +// +// Output format: revision data in "monotone read" compatible packet format +// +// Error conditions: If the revision id specified is unknown or invalid prints +// an error message to stderr and exits with status 1. +static void +automate_packet_for_rdata(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() != 1) + throw usage(help_name); + + packet_writer pw(output); + + revision_id r_id(idx(args, 0)()); + revision_data r_data; + + N(app.db.revision_exists(r_id), + F("no such revision '%s'") % r_id); + app.db.get_revision(r_id, r_data); + pw.consume_revision_data(r_id,r_data); +} + +// Name: packets_for_certs +// Arguments: +// 1: a revision id +// Added in: 2.0 +// Purpose: Prints the certs associated with a revision in packet format +// +// Output format: certs in "monotone read" compatible packet format +// +// Error conditions: If the revision id specified is unknown or invalid prints +// an error message to stderr and exits with status 1. +static void +automate_packets_for_certs(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() != 1) + throw usage(help_name); + + packet_writer pw(output); + + revision_id r_id(idx(args, 0)()); + std::vector< revision > certs; + + N(app.db.revision_exists(r_id), + F("no such revision '%s'") % r_id); + app.db.get_revision_certs(r_id, certs); + for (size_t i = 0; i < certs.size(); ++i) + pw.consume_revision_cert(idx(certs,i)); +} + +// Name: packet_for_fdata +// Arguments: +// 1: a file id +// Added in: 2.0 +// Purpose: Prints the file data in packet format +// +// Output format: file data in "monotone read" compatible packet format +// +// Error conditions: If the file id specified is unknown or invalid prints +// an error message to stderr and exits with status 1. +static void +automate_packet_for_fdata(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() != 1) + throw usage(help_name); + + packet_writer pw(output); + + file_id f_id(idx(args, 0)()); + file_data f_data; + + N(app.db.file_version_exists(f_id), + F("no such revision '%s'") % f_id); + app.db.get_file_version(f_id, f_data); + pw.consume_file_data(f_id,f_data); +} + +// Name: packet_for_fdelta +// Arguments: +// 1: a file id +// 1: a file id +// Added in: 2.0 +// Purpose: Prints the file delta in packet format +// +// Output format: file delta in "monotone read" compatible packet format +// +// Error conditions: If any of the file ids specified are unknown or +// invalid prints an error message to stderr and exits with status 1. +static void +automate_packet_for_fdelta(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() != 2) + throw usage(help_name); + + packet_writer pw(output); + + file_id f_old_id(idx(args, 0)()); + file_id f_new_id(idx(args, 1)()); + file_data f_old_data, f_new_data; + + N(app.db.file_version_exists(f_old_id), + F("no such revision '%s'") % f_old_id); + N(app.db.file_version_exists(f_new_id), + F("no such revision '%s'") % f_new_id); + app.db.get_file_version(f_old_id, f_old_data); + app.db.get_file_version(f_new_id, f_new_data); + delta del; + diff(f_old_data.inner(), f_new_data.inner(), del); + pw.consume_file_delta(f_old_id, f_new_id, file_delta(del)); +} + void automate_command(utf8 cmd, std::vector args, std::string const & root_cmd_name, @@ -1402,6 +1531,14 @@ automate_get_file(args, root_cmd_name, app, output); else if (cmd() == "keys") automate_keys(args, root_cmd_name, app, output); + else if (cmd() == "packet_for_rdata") + automate_packet_for_rdata(args, root_cmd_name, app, output); + else if (cmd() == "packets_for_certs") + automate_packets_for_certs(args, root_cmd_name, app, output); + else if (cmd() == "packet_for_fdata") + automate_packet_for_fdata(args, root_cmd_name, app, output); + else if (cmd() == "packet_for_fdelta") + automate_packet_for_fdelta(args, root_cmd_name, app, output); else throw usage(root_cmd_name); } ============================================================ --- commands.cc ffda8a186503943a14239e5193698d3c57a94c01 +++ commands.cc b8bd7c0f89059356c00616eb2fbfdeb378108b2d @@ -1880,86 +1880,6 @@ ALIAS(ls, list) -CMD(fdelta, N_("packet i/o"), N_("OLDID NEWID"), - N_("write file delta packet to stdout"), - OPT_NONE) -{ - if (args.size() != 2) - throw usage(name); - - packet_writer pw(cout); - - file_id f_old_id, f_new_id; - file_data f_old_data, f_new_data; - - complete(app, idx(args, 0)(), f_old_id); - complete(app, idx(args, 1)(), f_new_id); - - N(app.db.file_version_exists(f_old_id), F("no such file '%s'") % f_old_id); - app.db.get_file_version(f_old_id, f_old_data); - N(app.db.file_version_exists(f_new_id), F("no such file '%s'") % f_new_id); - app.db.get_file_version(f_new_id, f_new_data); - delta del; - diff(f_old_data.inner(), f_new_data.inner(), del); - pw.consume_file_delta(f_old_id, f_new_id, file_delta(del)); -} - -CMD(rdata, N_("packet i/o"), N_("ID"), N_("write revision data packet to stdout"), - OPT_NONE) -{ - if (args.size() != 1) - throw usage(name); - - packet_writer pw(cout); - - revision_id r_id; - revision_data r_data; - - complete(app, idx(args, 0)(), r_id); - - N(app.db.revision_exists(r_id), F("no such revision '%s'") % r_id); - app.db.get_revision(r_id, r_data); - pw.consume_revision_data(r_id, r_data); -} - - -CMD(fdata, N_("packet i/o"), N_("ID"), N_("write file data packet to stdout"), - OPT_NONE) -{ - if (args.size() != 1) - throw usage(name); - - packet_writer pw(cout); - - file_id f_id; - file_data f_data; - - complete(app, idx(args, 0)(), f_id); - - N(app.db.file_version_exists(f_id), F("no such file '%s'") % f_id); - app.db.get_file_version(f_id, f_data); - pw.consume_file_data(f_id, f_data); -} - - -CMD(certs, N_("packet i/o"), N_("ID"), N_("write cert packets to stdout"), - OPT_NONE) -{ - if (args.size() != 1) - throw usage(name); - - packet_writer pw(cout); - - revision_id r_id; - vector< revision > certs; - - complete(app, idx(args, 0)(), r_id); - - app.db.get_revision_certs(r_id, certs); - for (size_t i = 0; i < certs.size(); ++i) - pw.consume_revision_cert(idx(certs, i)); -} - CMD(pubkey, N_("packet i/o"), N_("ID"), N_("write public key packet to stdout"), OPT_NONE) { @@ -3922,6 +3842,10 @@ "get_file FILEID\n" "get_manifest_of [REVID]\n" "get_revision [REVID]\n" + "packet_for_rdata REVID\n" + "packets_for_certs REVID\n" + "packet_for_fdata FILEID\n" + "packet_for_fdelta OLD_FILE NEW_FILE\n" "keys\n"), N_("automation interface"), OPT_NONE) ============================================================ --- tests/t_bad_packets.at 8e2ff9cc8d268247ab5471a1ac4548565e814eb5 +++ tests/t_bad_packets.at 2ab2b87f1b55c89f0132a7942a62f2d70c92c313 @@ -1,15 +1,13 @@ AT_SETUP([bad packet args]) MONOTONE_SETUP -AT_CHECK(MONOTONE mdelta 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f 6c704fbd4ef58f2447fd1a3e76911b2ebe97dc77, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE mdata 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE fdelta 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f 6c704fbd4ef58f2447fd1a3e76911b2ebe97dc77, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE fdata 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE rdata 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate packet_for_fdelta 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f 6c704fbd4ef58f2447fd1a3e76911b2ebe97dc77, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate packet_for_fdata 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate packet_for_rdata 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) AT_CHECK(MONOTONE pubkey address@hidden, [1], [ignore], [ignore]) AT_CHECK(MONOTONE privkey address@hidden, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE certs 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate packets_for_certs 73070030f7b0d0f3d4ee02545d45ca4bbe5e189f, [1], [ignore], [ignore]) AT_CHECK(MONOTONE db check, [], [ignore], [ignore]) AT_CLEANUP