aboutsummaryrefslogtreecommitdiff
path: root/loader/loader.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'loader/loader.cxx')
-rw-r--r--loader/loader.cxx61
1 files changed, 33 insertions, 28 deletions
diff --git a/loader/loader.cxx b/loader/loader.cxx
index 782d3f3..ee3e5fa 100644
--- a/loader/loader.cxx
+++ b/loader/loader.cxx
@@ -382,13 +382,13 @@ load_packages (const shared_ptr<repository>& rp, database& db)
db.persist (rp); // Save the repository state.
}
-// Load the prerequsite repositories and their complements state from the
-// 'repositories' file. Update the repository persistent state to save
-// repositories_timestamp, prerequsites, and complements members.
-// Should be called once per persisted internal repository.
+// Load the repository manifest values, prerequsite repositories, and their
+// complements state from the 'repositories' file. Update the repository
+// persistent state to save changed members. Should be called once per
+// persisted internal repository.
//
static void
-load_prerequisites (const shared_ptr<repository>& rp, database& db)
+load_repositories (const shared_ptr<repository>& rp, database& db)
{
// repositories_timestamp other than timestamp_nonexistent signals that
// repository prerequisites are already loaded.
@@ -417,12 +417,28 @@ load_prerequisites (const shared_ptr<repository>& rp, database& db)
for (auto& rm: rpm)
{
- if (rm.location.empty () ||
- (!rp->internal &&
- rm.effective_role () == repository_role::prerequisite))
- continue; // Ignore entry for this repository.
+ if (rm.effective_role () == repository_role::prerequisite && !rp->internal)
+ continue; // Ignore the external repository prerequisite entry.
- assert (rm.effective_role () != repository_role::base);
+ if (rm.effective_role () == repository_role::base)
+ {
+ // Update the base repository with manifest values.
+ //
+ rp->url = move (rm.url);
+
+ if (rp->internal)
+ {
+ rp->email = move (rm.email);
+ rp->summary = move (rm.summary);
+ rp->description = move (rm.description);
+ }
+
+ continue;
+ }
+
+ // Load prerequisite or complement repository.
+ //
+ assert (!rm.location.empty ());
repository_location rl;
@@ -498,24 +514,12 @@ load_prerequisites (const shared_ptr<repository>& rp, database& db)
}
load_packages (pr, db);
- load_prerequisites (pr, db);
+ load_repositories (pr, db);
}
db.update (rp);
}
-static ostream&
-operator<< (ostream& o,
- const brep::dependency& d) // Ambiguity with bpkg::dependency.
-{
- o << d.name ();
-
- if (d.constraint)
- o << ' ' << *d.constraint;
-
- return o;
-}
-
// Check if the package is available from the specified repository,
// its prerequisite repositories, or one of their complements,
// recursively.
@@ -749,8 +753,8 @@ main (int argc, char* argv[])
throw;
}
- // Load the description of all the internal repositories from
- // the configuration file.
+ // Load the description of all the internal repositories from the
+ // configuration file.
//
internal_repositories irs (load_repositories (path (argv[1])));
@@ -776,15 +780,16 @@ main (int argc, char* argv[])
load_packages (r, db);
}
- // On the second pass over the internal repositories we
- // load their (not yet loaded) prerequisite repositories.
+ // On the second pass over the internal repositories we load their
+ // (not yet loaded) manifest values, complement, and prerequisite
+ // repositories.
//
for (const auto& ir: irs)
{
shared_ptr<repository> r (
db.load<repository> (ir.location.canonical_name ()));
- load_prerequisites (r, db);
+ load_repositories (r, db);
}
session s;