# # patch "ChangeLog" # from [f7385f3baf0dfdb837ac59c0eb9f78b60a0615af] # to [685102b77d5615b7b89fed8728112e149473a342] # # patch "rcs_import.cc" # from [aed7c1a1c6a7bb6ca04a7676f3225b80b664e8e3] # to [b90ec8325f19892896d9692fc01893c9d8816594] # --- ChangeLog +++ ChangeLog @@ -1,3 +1,8 @@ +2005-06-23 graydon hoare + + * rcs_import.cc (import_cvs_repo): Put branch imports inside + transaction blocks, add a couple tickers. + 2005-06-22 graydon hoare * rcs_file.cc: Track file:line numbers, accept files which violate --- rcs_import.cc +++ rcs_import.cc @@ -943,6 +943,7 @@ string const & branchname; cvs_branch const & branch; map live_files; + ticker & n_manifests; ticker & n_revisions; struct prepared_revision @@ -968,6 +969,7 @@ app_state & app, string const & branchname, cvs_branch const & branch, + ticker & n_manifests, ticker & n_revs); void consume_cluster(cvs_cluster const & c, @@ -1000,10 +1002,11 @@ app_state & app, string const & branchname, shared_ptr const & branch, + ticker & n_manifests, ticker & n_revs) { cluster_set clusters; - cluster_consumer cons(cvs, app, branchname, *branch, n_revs); + cluster_consumer cons(cvs, app, branchname, *branch, n_manifests, n_revs); unsigned long commits_remaining = branch->lineage.size(); // step 1: sort the lineage @@ -1145,28 +1148,44 @@ I(cvs.stk.size() == 1); - ticker n_revs("finished revisions", "r", 1); + ticker n_revs("revisions", "r", 1); + ticker n_manifests("manifests", "m", 1); - for (map >::const_iterator i = cvs.branches.begin(); - i != cvs.branches.end(); ++i) + while (cvs.branches.size() > 0) { - L(F("branch %s has %d entries\n") % i->first % i->second->lineage.size()); - import_branch(cvs, app, i->first, i->second, n_revs); + transaction_guard guard(app.db); + map >::const_iterator i = cvs.branches.begin(); + string branchname = i->first; + shared_ptr branch = i->second; + L(F("branch %s has %d entries\n") % branchname % branch->lineage.size()); + import_branch(cvs, app, branchname, branch, n_manifests, n_revs); + + // free up some memory + cvs.branches.erase(branchname); + guard.commit(); } - L(F("trunk has %d entries\n") % cvs.trunk->lineage.size()); - import_branch(cvs, app, cvs.base_branch, cvs.trunk, n_revs); + { + transaction_guard guard(app.db); + L(F("trunk has %d entries\n") % cvs.trunk->lineage.size()); + import_branch(cvs, app, cvs.base_branch, cvs.trunk, n_manifests, n_revs); + guard.commit(); + } // now we have a "last" rev for each tag { + ticker n_tags("tags", "t", 1); packet_db_writer dbw(app); + transaction_guard guard(app.db); for (map >::const_iterator i = cvs.resolved_tags.begin(); i != cvs.resolved_tags.end(); ++i) { string tag = cvs.tag_interner.lookup(i->first); ui.set_tick_trailer("marking tag " + tag); cert_revision_tag(i->second.second, tag, app, dbw); + ++n_tags; } + guard.commit(); } @@ -1178,11 +1197,13 @@ app_state & app, string const & branchname, cvs_branch const & branch, + ticker & n_mans, ticker & n_revs) : cvs(cvs), app(app), branchname(branchname), branch(branch), + n_manifests(n_mans), n_revisions(n_revs) { if (!branch.live_at_beginning.empty()) @@ -1258,6 +1279,7 @@ cluster_consumer::store_manifest_edge(bool head_p) { L(F("storing manifest '%s' (base %s)\n") % parent_mid % child_mid); + ++n_manifests; if (head_p) {