# # # delete "database_check.hh" # # patch "cmd_db.cc" # from [89bba58eaa5389a79297ed1cda4ae6fa9f8d3726] # to [d0ce88834a3610e12551f25de08ad144d3efba31] # # patch "database.hh" # from [5772316b556ecc8712b919a6689f2fbd29a91dbf] # to [e6cdf111a79b28e265dd1378ec5a215c6ce05039] # # patch "database_check.cc" # from [55fa6045f13bc9b131b285e243294f9eaa853f91] # to [27daa8b1b77f291237f4ed84eacd9f2e354ac810] # ============================================================ --- cmd_db.cc 89bba58eaa5389a79297ed1cda4ae6fa9f8d3726 +++ cmd_db.cc d0ce88834a3610e12551f25de08ad144d3efba31 @@ -13,7 +13,6 @@ #include "charset.hh" #include "cmd.hh" -#include "database_check.hh" #include "revision.hh" #include "constants.hh" #include "app_state.hh" @@ -213,7 +212,7 @@ CMD(db_check, "check", "", CMD_REF(db), N(args.size() == 0, F("no arguments needed")); - check_db(app); + check_db(app.db); } CMD(db_changesetify, "changesetify", "", CMD_REF(db), "", ============================================================ --- database.hh 5772316b556ecc8712b919a6689f2fbd29a91dbf +++ database.hh e6cdf111a79b28e265dd1378ec5a215c6ce05039 @@ -626,6 +626,9 @@ public: project_t & get_project(); }; +// not a member function, defined in database_check.cc +void check_db(database & db); + // Parent maps are used in a number of places to keep track of all the // parent rosters of a given revision. typedef std::map ============================================================ --- database_check.cc 55fa6045f13bc9b131b285e243294f9eaa853f91 +++ database_check.cc 27daa8b1b77f291237f4ed84eacd9f2e354ac810 @@ -11,9 +11,8 @@ #include #include -#include "app_state.hh" #include "constants.hh" -#include "database_check.hh" +#include "database.hh" #include "keys.hh" #include "revision.hh" #include "ui.hh" @@ -136,19 +135,19 @@ static void * check integrity of the SQLite database */ static void -check_db_integrity_check(app_state & app ) +check_db_integrity_check(database & db) { L(FL("asking sqlite to check db integrity")); - E(app.db.check_integrity(), + E(db.check_integrity(), F("file structure is corrupted; cannot check further")); } static void -check_files(app_state & app, map & checked_files) +check_files(database & db, map & checked_files) { set files; - app.db.get_file_ids(files); + db.get_file_ids(files); L(FL("checking %d files") % files.size()); ticker ticks(_("files"), "f", files.size()/70+1); @@ -158,7 +157,7 @@ check_files(app_state & app, map & checked_rosters, map & checked_revisions, set & found_manifests, @@ -177,7 +176,7 @@ check_rosters_manifest(app_state & app, { set rosters; - app.db.get_roster_ids(rosters); + db.get_roster_ids(rosters); L(FL("checking %d rosters, manifest pass") % rosters.size()); ticker ticks(_("rosters"), "r", rosters.size()/70+1); @@ -191,7 +190,7 @@ check_rosters_manifest(app_state & app, marking_map mm; try { - app.db.get_roster(*i, ros, mm); + db.get_roster(*i, ros, mm); } // When attempting to fetch a roster with no corresponding revision, // we fail with E(), not I() (when it tries to look up the manifest_id @@ -232,7 +231,7 @@ static void // that the referenced revisions exist. // This function assumes that check_revisions has been called! static void -check_rosters_marking(app_state & app, +check_rosters_marking(database & db, map & checked_rosters, map & checked_revisions) { @@ -256,7 +255,7 @@ check_rosters_marking(app_state & app, roster_t ros; marking_map mm; - app.db.get_roster(ros_id, ros, mm); + db.get_roster(ros_id, ros, mm); for (node_map::const_iterator n = ros.all_nodes().begin(); n != ros.all_nodes().end(); n++) @@ -298,7 +297,7 @@ static void } static void -check_revisions(app_state & app, +check_revisions(database & db, map & checked_revisions, map & checked_rosters, set const & found_manifests, @@ -306,7 +305,7 @@ check_revisions(app_state & app, { set revisions; - app.db.get_revision_ids(revisions); + db.get_revision_ids(revisions); L(FL("checking %d revisions") % revisions.size()); ticker ticks(_("revisions"), "r", revisions.size()/70+1); @@ -316,7 +315,7 @@ check_revisions(app_state & app, { L(FL("checking revision %s") % *i); revision_data data; - app.db.get_revision(*i, data); + db.get_revision(*i, data); checked_revisions[*i].found = true; revision_t rev; @@ -341,7 +340,7 @@ check_revisions(app_state & app, checked_revisions[*i].normalized = true; // roster checks - if (app.db.roster_version_exists(*i)) + if (db.roster_version_exists(*i)) { checked_revisions[*i].found_roster = true; I(checked_rosters[*i].found); @@ -396,12 +395,12 @@ static void } static void -check_ancestry(app_state & app, +check_ancestry(database & db, map & checked_revisions) { multimap graph; - app.db.get_revision_ancestry(graph); + db.get_revision_ancestry(graph); L(FL("checking %d ancestry edges") % graph.size()); ticker ticks(_("ancestry"), "a", graph.size()/70+1); @@ -428,12 +427,12 @@ static void } static void -check_keys(app_state & app, +check_keys(database & db, map & checked_keys) { vector pubkeys; - app.db.get_public_keys(pubkeys); + db.get_public_keys(pubkeys); L(FL("checking %d public keys") % pubkeys.size()); @@ -442,7 +441,7 @@ check_keys(app_state & app, for (vector::const_iterator i = pubkeys.begin(); i != pubkeys.end(); ++i) { - app.db.get_key(*i, checked_keys[*i].pub_encoded); + db.get_key(*i, checked_keys[*i].pub_encoded); checked_keys[*i].found = true; ++ticks; } @@ -450,14 +449,15 @@ static void } static void -check_certs(app_state & app, +check_certs(database & db, map & checked_revisions, map & checked_keys, size_t & total_certs) { + key_store & keys = db.get_key_store(); vector< revision > certs; - app.db.get_revision_certs(certs); + db.get_revision_certs(certs); total_certs = certs.size(); @@ -475,7 +475,7 @@ check_certs(app_state & app, { string signed_text; cert_signable_text(i->inner(), signed_text); - checked.good_sig = check_signature(app.keys, i->inner().key, + checked.good_sig = check_signature(keys, i->inner().key, checked_keys[i->inner().key].pub_encoded, signed_text, i->inner().sig); } @@ -490,11 +490,11 @@ static void // - check that every rev has a height // - check that no two revs have the same height static void -check_heights(app_state & app, +check_heights(database & db, map & checked_heights) { set heights; - app.db.get_revision_ids(heights); + db.get_revision_ids(heights); // add revision [], it is the (imaginary) root of all revisions, and // should have a height, too @@ -517,7 +517,7 @@ check_heights(app_state & app, rev_height h; try { - app.db.get_rev_height(*i, h); + db.get_rev_height(*i, h); } catch (std::exception & e) { @@ -541,13 +541,13 @@ static void // check that every rev's height is a sensible height to assign, given its // parents static void -check_heights_relation(app_state & app, +check_heights_relation(database & db, map & checked_heights) { set heights; multimap graph; // parent, child - app.db.get_revision_ancestry(graph); + db.get_revision_ancestry(graph); L(FL("checking heights for %d edges") % graph.size()); @@ -569,8 +569,8 @@ check_heights_relation(app_state & app, p_id % c_id); rev_height parent, child; - app.db.get_rev_height(p_id, parent); - app.db.get_rev_height(c_id, child); + db.get_rev_height(p_id, parent); + db.get_rev_height(c_id, child); if (!(child > parent)) { @@ -868,7 +868,7 @@ void } void -check_db(app_state & app) +check_db(database & db) { map checked_files; set found_manifests; @@ -905,20 +905,20 @@ check_db(app_state & app) size_t duplicate_heights = 0; size_t incorrect_heights = 0; - transaction_guard guard(app.db, false); + transaction_guard guard(db, false); - check_db_integrity_check(app); - check_files(app, checked_files); - check_rosters_manifest(app, checked_rosters, checked_revisions, + check_db_integrity_check(db); + check_files(db, checked_files); + check_rosters_manifest(db, checked_rosters, checked_revisions, found_manifests, checked_files); - check_revisions(app, checked_revisions, checked_rosters, found_manifests, + check_revisions(db, checked_revisions, checked_rosters, found_manifests, missing_rosters); - check_rosters_marking(app, checked_rosters, checked_revisions); - check_ancestry(app, checked_revisions); - check_keys(app, checked_keys); - check_certs(app, checked_revisions, checked_keys, total_certs); - check_heights(app, checked_heights); - check_heights_relation(app, checked_heights); + check_rosters_marking(db, checked_rosters, checked_revisions); + check_ancestry(db, checked_revisions); + check_keys(db, checked_keys); + check_certs(db, checked_revisions, checked_keys, total_certs); + check_heights(db, checked_heights); + check_heights_relation(db, checked_heights); report_files(checked_files, missing_files, unreferenced_files);