aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bpkg/package5
-rw-r--r--bpkg/package.cxx8
-rw-r--r--bpkg/pkg-configure.cxx4
-rw-r--r--bpkg/pkg-disfigure5
-rw-r--r--bpkg/pkg-disfigure.cxx26
5 files changed, 28 insertions, 20 deletions
diff --git a/bpkg/package b/bpkg/package
index f2c9b9a..aca883d 100644
--- a/bpkg/package
+++ b/bpkg/package
@@ -68,11 +68,10 @@ namespace bpkg
//
enum class state
{
+ broken,
fetched,
unpacked,
- configured,
- updated,
- broken
+ configured
};
string
diff --git a/bpkg/package.cxx b/bpkg/package.cxx
index 7ffb99d..66769d1 100644
--- a/bpkg/package.cxx
+++ b/bpkg/package.cxx
@@ -15,11 +15,10 @@ namespace bpkg
{
switch (s)
{
+ case state::broken: return "broken";
case state::fetched: return "fetched";
case state::unpacked: return "unpacked";
case state::configured: return "configured";
- case state::updated: return "updated";
- case state::broken: return "broken";
}
return string (); // Should never reach.
@@ -28,11 +27,10 @@ namespace bpkg
state
from_string (const string& s)
{
- if (s == "fetched") return state::fetched;
+ if (s == "broken") return state::broken;
+ else if (s == "fetched") return state::fetched;
else if (s == "unpacked") return state::unpacked;
else if (s == "configured") return state::configured;
- else if (s == "updated") return state::updated;
- else if (s == "broken") return state::broken;
else throw invalid_argument (s);
}
}
diff --git a/bpkg/pkg-configure.cxx b/bpkg/pkg-configure.cxx
index c0dc05e..65355ba 100644
--- a/bpkg/pkg-configure.cxx
+++ b/bpkg/pkg-configure.cxx
@@ -101,10 +101,10 @@ namespace bpkg
// the broken state.
//
- // Pretend we are configured.
+ // Indicate to pkg_disfigure() we are partially configured.
//
p->out_root = out_root.leaf ();
- p->state = state::configured;
+ p->state = state::broken;
pkg_disfigure (c, t, p); // Commits the transaction.
throw;
diff --git a/bpkg/pkg-disfigure b/bpkg/pkg-disfigure
index 0e16a40..2df892b 100644
--- a/bpkg/pkg-disfigure
+++ b/bpkg/pkg-disfigure
@@ -15,7 +15,10 @@ namespace bpkg
pkg_disfigure (const pkg_disfigure_options&, cli::scanner& args);
// Disfigure the package, update its state, and commit the
- // transaction.
+ // transaction. If the package state is broken, then this
+ // is taken to mean it hasn't been successfully configured
+ // and no clean prior to disfigure is necessary (or possible,
+ // for that matter).
//
void
pkg_disfigure (const dir_path& configuration,
diff --git a/bpkg/pkg-disfigure.cxx b/bpkg/pkg-disfigure.cxx
index 48e54ba..fca5dd7 100644
--- a/bpkg/pkg-disfigure.cxx
+++ b/bpkg/pkg-disfigure.cxx
@@ -41,18 +41,26 @@ namespace bpkg
// Form the buildspec.
//
- // Why do we need to specify src_root? While it shouldn't be
- // necessary for a completely configured package, we might
- // also be called to disfigure a partially configured one.
- //
string bspec;
- if (src_root == out_root)
- bspec = "disfigure(" + out_root.string () + "/)";
+ if (p->state != state::broken)
+ {
+ bspec = "clean(" + out_root.string () + "/) "
+ "disfigure(" + out_root.string () + "/)";
+ }
else
- bspec = "disfigure(" +
- src_root.string () + "/@" +
- out_root.string () + "/)";
+ {
+ // Why do we need to specify src_root? While it's unnecessary
+ // for a completely configured package, here we disfigure a
+ // partially configured one.
+ //
+ if (src_root == out_root)
+ bspec = "disfigure(" + out_root.string () + "/)";
+ else
+ bspec = "disfigure(" +
+ src_root.string () + "/@" +
+ out_root.string () + "/)";
+ }
level4 ([&]{trace << "buildspec: " << bspec;});