From fd2c0dc9707714d82580dc61854efc06335e6091 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 6 Oct 2015 08:43:01 +0200 Subject: Track prerequisite packages, handle in pkg-{con,dis}figure --- bpkg/pkg-disfigure.cxx | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'bpkg/pkg-disfigure.cxx') diff --git a/bpkg/pkg-disfigure.cxx b/bpkg/pkg-disfigure.cxx index 6c357f4..a3d0336 100644 --- a/bpkg/pkg-disfigure.cxx +++ b/bpkg/pkg-disfigure.cxx @@ -21,11 +21,40 @@ namespace bpkg transaction& t, const shared_ptr& p) { + assert (p->state == state::configured || p->state == state::broken); + tracer trace ("pkg_disfigure"); database& db (t.database ()); tracer_guard tg (db, trace); + // Check that we have no dependents. + // + if (p->state == state::configured) + { + using query = query; + + auto r (db.query (query::name == p->name)); + + if (!r.empty ()) + { + diag_record dr; + dr << fail << "package " << p->name << " still has dependencies:"; + + for (const package_dependents& pd: r) + { + dr << info << "package " << pd.name; + + if (pd.constraint) + dr << " on " << p->name << " " << *pd.constraint; + } + } + } + + // Since we are no longer configured, clear the prerequisites list. + // + p->prerequisites.clear (); + // Calculate package's src_root and out_root. // assert (p->src_root); // Must be set since unpacked. @@ -43,7 +72,7 @@ namespace bpkg // string bspec; - if (p->state != state::broken) + if (p->state == state::configured) { bspec = "clean(" + out_root.string () + "/) " "disfigure(" + out_root.string () + "/)"; -- cgit v1.1