# # # add_file "tests/t_rosterify_on_rosterified_db.at" # content [9ea6c0c44d0388445a7b9c72a4d4c74fdff09d9c] # # patch "ChangeLog" # from [c888ab60894ea8784a48b30faeb535c4931c5622] # to [ea5dc3cbf80a396b2595054d8afa5a688e4b8626] # # patch "database.cc" # from [5fca8cee415dc3f9fe41146aff97f5532516511b] # to [208de752f6aa9d09044a5bd0823a4330ae0b11ed] # # patch "database.hh" # from [ad0aa7e49ff8c91790d1134a7b91664123a58085] # to [5ec6263a25ee71efa818f2ed4a8452b1374b4a56] # # patch "revision.cc" # from [18552f022f19747f0a8e6852e649de3f2e32b214] # to [87252901db3b61651d2dd8d053f068c756935620] # # patch "testsuite.at" # from [f835201459609755bb331a16c0ee690865a4b84f] # to [1c1ca7eb5ea62de3729dbc20a8cc0c35cfab9d7d] # ============================================================ --- tests/t_rosterify_on_rosterified_db.at 9ea6c0c44d0388445a7b9c72a4d4c74fdff09d9c +++ tests/t_rosterify_on_rosterified_db.at 9ea6c0c44d0388445a7b9c72a4d4c74fdff09d9c @@ -0,0 +1,63 @@ +AT_SETUP([db rosterify twice gives an error second time]) +MONOTONE_SETUP +NEED_UNGZB64 + +AT_DATA([test.db.dump.gz.b64], [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 +]) + +AT_CHECK(rm -f test.db) + +UNGZB64(test.db.dump.gz.b64, test.db.dump) +AT_CHECK(MONOTONE db load < test.db.dump, [], [ignore], [ignore]) +AT_CHECK(MONOTONE db migrate, [], [ignore], [ignore]) + +AT_CHECK(MONOTONE db rosterify, [], [ignore], [ignore]) + +AT_CHECK(MONOTONE db rosterify, [1], [ignore], [stderr]) +AT_CHECK(QGREP(already stderr)) + +AT_CLEANUP ============================================================ --- ChangeLog c888ab60894ea8784a48b30faeb535c4931c5622 +++ ChangeLog ea5dc3cbf80a396b2595054d8afa5a688e4b8626 @@ -1,3 +1,12 @@ +2006-03-27 Nathaniel Smith + + * database.cc (check_format): Use .empty() instead of comparing + .size() to zero, trivial style cleanup. + (check_is_not_rosterified): New method. + * revision.cc (build_changesets_from_manifest_ancestry) + (build_roster_style_revs_from_manifest_style_revs): Call it. + * tests/t_rosterify_on_rosterified_db.at, testsuite.at: New test. + 2006-03-22 Nathaniel Smith * key_store.cc (consume_key_pair, read_key_dir) ============================================================ --- database.cc 5fca8cee415dc3f9fe41146aff97f5532516511b +++ database.cc 208de752f6aa9d09044a5bd0823a4330ae0b11ed @@ -146,6 +146,16 @@ } void +database::check_is_not_rosterified() +{ + results res; + string rosters_query = "SELECT 1 FROM rosters LIMIT 1"; + fetch(res, one_col, any_rows, query(rosters_query)); + N(res.empty(), + F("this database already contains rosters")); +} + +void database::check_format() { results res_revisions; @@ -155,13 +165,13 @@ fetch(res_revisions, one_col, any_rows, query(revisions_query)); - if (res_revisions.size() > 0) + if (!res_revisions.empty()) { // they have revisions, so they can't be _ancient_, but they still might // not have rosters results res_rosters; fetch(res_rosters, one_col, any_rows, query(rosters_query)); - N(res_rosters.size() != 0, + N(!res_rosters.empty(), F("database %s contains revisions but no rosters\n" "if you are a project leader or doing local testing:\n" " see the file UPGRADE for instructions on upgrading.\n" @@ -180,7 +190,7 @@ // rosterified monotone.) results res_manifests; fetch(res_manifests, one_col, any_rows, query(manifests_query)); - N(res_manifests.size() == 0, + N(res_manifests.empty(), F("database %s contains manifests but no revisions\n" "this is a very old database; it needs to be upgraded\n" "please see README.changesets for details") ============================================================ --- database.hh ad0aa7e49ff8c91790d1134a7b91664123a58085 +++ database.hh 5ec6263a25ee71efa818f2ed4a8452b1374b4a56 @@ -215,6 +215,7 @@ void migrate(); void ensure_open(); void ensure_open_for_format_changes(); + void check_is_not_rosterified(); bool database_specified(); bool file_version_exists(file_id const & id); ============================================================ --- revision.cc 18552f022f19747f0a8e6852e649de3f2e32b214 +++ revision.cc 87252901db3b61651d2dd8d053f068c756935620 @@ -1368,6 +1368,7 @@ build_roster_style_revs_from_manifest_style_revs(app_state & app) { app.db.ensure_open_for_format_changes(); + app.db.check_is_not_rosterified(); global_sanity.set_relaxed(true); anc_graph graph(true, app); @@ -1423,6 +1424,7 @@ build_changesets_from_manifest_ancestry(app_state & app) { app.db.ensure_open_for_format_changes(); + app.db.check_is_not_rosterified(); anc_graph graph(false, app); ============================================================ --- testsuite.at f835201459609755bb331a16c0ee690865a4b84f +++ testsuite.at 1c1ca7eb5ea62de3729dbc20a8cc0c35cfab9d7d @@ -862,3 +862,4 @@ m4_include(tests/t_disapprove_branch.at) m4_include(tests/t_serve_ignores_mt_options.at) m4_include(tests/t_netsync_notes.at) +m4_include(tests/t_rosterify_on_rosterified_db.at)