aboutsummaryrefslogtreecommitdiff
path: root/bpkg/system-package-manager.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bpkg/system-package-manager.cxx')
-rw-r--r--bpkg/system-package-manager.cxx41
1 files changed, 33 insertions, 8 deletions
diff --git a/bpkg/system-package-manager.cxx b/bpkg/system-package-manager.cxx
index 5e556f9..e31f0ac 100644
--- a/bpkg/system-package-manager.cxx
+++ b/bpkg/system-package-manager.cxx
@@ -155,10 +155,22 @@ namespace bpkg
}
catch (const invalid_argument& e)
{
- fail << "invalid distribution version '" << string (dn, p + 1)
- << "' in value " << value_name << " for package " << ap->id.name
- << ' ' << ap->version << af.database () << " in repository "
- << af.load ()->location << ": " << e;
+ // Note: the repository fragment may have no database associated when
+ // used in tests.
+ //
+ shared_ptr<repository_fragment> f (af.get_eager ());
+ database* db (f == nullptr || af.loaded () ? &af.database () : nullptr);
+
+ diag_record dr (fail);
+ dr << "invalid distribution version '" << string (dn, p + 1)
+ << "' in value " << value_name << " for package " << ap->id.name
+ << ' ' << ap->version;
+
+ if (db != nullptr)
+ dr << *db;
+
+ dr << " in repository " << (f != nullptr ? f : af.load ())->location
+ << ": " << e;
}
return make_pair (move (dn), move (dv));
@@ -297,12 +309,25 @@ namespace bpkg
{
auto bad_value = [&nv, &ap, &a] (const string& d)
{
+ // Note: the repository fragment may have no database
+ // associated when used in tests.
+ //
const lazy_shared_ptr<repository_fragment>& af (a.second);
+ shared_ptr<repository_fragment> f (af.get_eager ());
+ database* db (f == nullptr || af.loaded ()
+ ? &af.database ()
+ : nullptr);
+
+ diag_record dr (fail);
+ dr << "invalid distribution value '" << nv.name << ": "
+ << nv.value << "' for package " << ap->id.name << ' '
+ << ap->version;
+
+ if (db != nullptr)
+ dr << *db;
- fail << "invalid distribution value '" << nv.name << ": "
- << nv.value << "' for package " << ap->id.name << ' '
- << ap->version << af.database () << " in repository "
- << af.load ()->location << ": " << d;
+ dr << " in repository "
+ << (f != nullptr ? f : af.load ())->location << ": " << d;
};
// Parse the distribution value into the regex pattern and the