aboutsummaryrefslogtreecommitdiff
path: root/tests/load/driver.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-08-30 23:14:51 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-08-31 18:19:37 +0300
commitd22f466823192963c22eb8f51ae930cb5af8fa9a (patch)
treef60f5dc30a76a2fff67ab20b399dafe05e80a024 /tests/load/driver.cxx
parent05eeac08b63449925cc2e12d2fdaf937d5fa1bbc (diff)
Add support for git repositories to brep-load
Diffstat (limited to 'tests/load/driver.cxx')
-rw-r--r--tests/load/driver.cxx1705
1 files changed, 916 insertions, 789 deletions
diff --git a/tests/load/driver.cxx b/tests/load/driver.cxx
index 8e7c86e..b387b9b 100644
--- a/tests/load/driver.cxx
+++ b/tests/load/driver.cxx
@@ -60,29 +60,53 @@ namespace bpkg
}
}
+static void
+test_pkg_repos (const cstrings& loader_args,
+ const dir_path& loadtab_dir,
+ odb::pgsql::database&);
+
+static void
+test_git_repos (const cstrings& loader_args,
+ const dir_path& loadtab_dir,
+ odb::pgsql::database&);
+
int
main (int argc, char* argv[])
{
auto print_usage = [argv]()
{
- cerr << "usage: " << argv[0]
- << " <loader_path> [loader_options] <loadtab_file>" << endl;
+ cerr << "usage: " << argv[0] << " (pkg|git) "
+ << "<loader-path> [loader-options] <loadtab-dir>" << endl;
};
- if (argc < 3)
+ if (argc < 4)
{
print_usage ();
return 1;
}
+ int i (1);
+ repository_type rt;
+
+ try
+ {
+ rt = to_repository_type (argv[i++]);
+ }
+ catch (const invalid_argument&)
+ {
+ print_usage ();
+ return 1;
+ }
+
+ // Parse the database options.
+ //
string user;
string password;
string name ("brep_package");
string host;
unsigned int port (0);
- int i (2);
- for (; i < argc - 1; ++i)
+ for (++i; i < argc - 1; ++i)
{
string n (argv[i]);
if (n == "--db-user" || n == "-u")
@@ -103,32 +127,24 @@ main (int argc, char* argv[])
return 1;
}
- try
- {
- path cp (argv[argc - 1]);
+ dir_path loadtab_dir (argv[i]);
- // Make configuration file path absolute to use it's directory as base for
- // internal repositories relative local paths.
- //
- if (cp.relative ())
- cp.complete ();
-
- // Update the packages.manifest file timestamp to enforce the loader to
- // update the persistent state.
- //
- path p (cp.directory () / dir_path ("1/stable") / packages);
- char const* args[] = {"touch", p.string ().c_str (), nullptr};
- assert (process (args).wait ());
-
- timestamp srt (file_mtime (p));
+ // Make configuration file directory absolute to use it as base for internal
+ // repositories relative local paths.
+ //
+ if (loadtab_dir.relative ())
+ loadtab_dir.complete ();
- // Run the loader.
- //
- char const** ld_args (const_cast<char const**> (argv + 1));
- assert (process (ld_args).wait ());
+ // Extract the loader args that are common for all tests (database options,
+ // etc). Note that they don't contain the loadtab path and the trailing
+ // NULL.
+ //
+ cstrings loader_args;
+ for (int i (2); i != argc - 1; ++i)
+ loader_args.push_back (argv[i]);
- // Check persistent objects validity.
- //
+ try
+ {
odb::pgsql::database db (
user,
password,
@@ -137,773 +153,868 @@ main (int argc, char* argv[])
port,
"options='-c default_transaction_isolation=serializable'");
+ switch (rt)
{
- session s;
- transaction t (db.begin ());
-
- assert (db.query<repository> ().size () == 7);
- assert (db.query<package> ().size () == 18);
-
- shared_ptr<repository> sr (
- db.load<repository> ("pkg:dev.cppget.org/stable"));
-
- shared_ptr<repository> mr (
- db.load<repository> ("pkg:dev.cppget.org/math"));
-
- shared_ptr<repository> cr (
- db.load<repository> ("pkg:dev.cppget.org/misc"));
-
- shared_ptr<repository> tr (
- db.load<repository> ("pkg:dev.cppget.org/testing"));
-
- shared_ptr<repository> gr (
- db.load<repository> ("pkg:dev.cppget.org/staging"));
-
- // Verify 'stable' repository.
- //
- assert (sr->location.canonical_name () == "pkg:dev.cppget.org/stable");
- assert (sr->location.string () ==
- "http://dev.cppget.org/1/stable");
- assert (sr->display_name == "stable");
- assert (sr->priority == 1);
- assert (!sr->url);
- assert (sr->email && *sr->email == "repoman@dev.cppget.org" &&
- sr->email->comment == "public mailing list");
- assert (sr->summary &&
- *sr->summary == "General C++ package stable repository");
- assert (sr->description && *sr->description ==
- "This is the awesome C++ package repository full of exciting "
- "stuff.");
-
- dir_path srp (cp.directory () / dir_path ("1/stable"));
- assert (sr->cache_location.path () == srp.normalize ());
-
- assert (sr->packages_timestamp == srt);
- assert (sr->repositories_timestamp ==
- file_mtime (sr->cache_location.path () / repositories));
-
- assert (sr->internal);
- assert (sr->complements.empty ());
- assert (sr->prerequisites.size () == 2);
- assert (sr->prerequisites[0].load () == cr);
- assert (sr->prerequisites[1].load () == mr);
-
- // Verify libfoo package versions.
- //
- // libfoo-+0-X.Y
- //
- shared_ptr<package> fpvxy (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("+0-X.Y"))));
-
- assert (fpvxy->project == package_name ("libfoo"));
- assert (fpvxy->summary == "The Foo Library");
- assert (fpvxy->tags.empty ());
- assert (!fpvxy->description);
- assert (!fpvxy->url);
- assert (!fpvxy->package_url);
- assert (!fpvxy->email);
- assert (!fpvxy->package_email);
-
- assert (fpvxy->internal_repository.load () == mr);
- assert (fpvxy->other_repositories.empty ());
-
- assert (fpvxy->priority == priority::low);
- assert (fpvxy->changes.empty ());
-
- assert (fpvxy->license_alternatives.size () == 1);
- assert (fpvxy->license_alternatives[0].size () == 1);
- assert (fpvxy->license_alternatives[0][0] == "MIT");
-
- assert (fpvxy->dependencies.empty ());
- assert (fpvxy->requirements.empty ());
-
- assert (check_location (fpvxy));
-
- assert (fpvxy->sha256sum && *fpvxy->sha256sum ==
- "c994fd49f051ab7fb25f3a4e68ca878e484c5d3c2cb132b37d41224b0621b618");
-
- // libfoo-1.0
- //
- shared_ptr<package> fpv1 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.0"))));
-
- assert (fpv1->summary == "The Foo Library");
- assert (fpv1->tags.empty ());
- assert (!fpv1->description);
- assert (!fpv1->url);
- assert (!fpv1->package_url);
- assert (!fpv1->email);
- assert (!fpv1->package_email);
-
- assert (fpv1->internal_repository.load () == sr);
- assert (fpv1->other_repositories.size () == 2);
- assert (fpv1->other_repositories[0].load () == mr);
- assert (fpv1->other_repositories[1].load () == cr);
-
- assert (fpv1->priority == priority::low);
- assert (fpv1->changes.empty ());
-
- assert (fpv1->license_alternatives.size () == 1);
- assert (fpv1->license_alternatives[0].size () == 1);
- assert (fpv1->license_alternatives[0][0] == "MIT");
-
- assert (fpv1->dependencies.empty ());
- assert (fpv1->requirements.empty ());
-
- assert (check_location (fpv1));
-
- assert (fpv1->sha256sum && *fpv1->sha256sum ==
- "0df6d45a3514c6101609bdcfefe7659b5754e505c6cf6b4107141d8217bb981d");
-
- // libfoo-1.2.2
- //
- shared_ptr<package> fpv2 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.2"))));
-
- assert (fpv2->summary == "The Foo library");
- assert (fpv2->tags == strings ({"c++", "foo"}));
- assert (!fpv2->description);
- assert (fpv2->url && *fpv2->url == "http://www.example.com/foo/");
- assert (!fpv2->package_url);
- assert (fpv2->email && *fpv2->email == "foo-users@example.com");
- assert (!fpv2->package_email);
-
- assert (fpv2->internal_repository.load () == sr);
- assert (fpv2->other_repositories.empty ());
- assert (fpv2->priority == priority::low);
- assert (fpv2->changes.empty ());
-
- assert (fpv2->license_alternatives.size () == 1);
- assert (fpv2->license_alternatives[0].size () == 1);
- assert (fpv2->license_alternatives[0][0] == "MIT");
-
- assert (fpv2->dependencies.size () == 2);
- assert (fpv2->dependencies[0].size () == 1);
- assert (fpv2->dependencies[1].size () == 1);
-
- auto dep = [&db] (
- const char* n, const optional<dependency_constraint>& c) -> dependency
+ case repository_type::pkg:
+ {
+ test_pkg_repos (loader_args, loadtab_dir, db);
+ break;
+ }
+ case repository_type::git:
{
- return {lazy_shared_ptr<package> (
- db, package_id (package_name (n), version ())), c};
- };
-
- assert (fpv2->dependencies[0][0] ==
- dep (
- "libbar",
- optional<dependency_constraint> (
- dependency_constraint (
- nullopt, true, version ("2.4.0"), false))));
-
- assert (fpv2->dependencies[1][0] ==
- dep (
- "libexp",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("+2-1.2"), false, version ("+2-1.2"), false))));
-
- assert (check_location (fpv2));
-
- assert (fpv2->sha256sum && *fpv2->sha256sum ==
- "088068ea3d69542a153f829cf836013374763148fba0a43d8047974f58b5efd7");
-
- // libfoo-1.2.2-alpha.1
- //
- shared_ptr<package> fpv2a (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.2-alpha.1"))));
-
- assert (fpv2a->summary == "The Foo library");
- assert (fpv2a->tags == strings ({"c++", "foo"}));
- assert (!fpv2a->description);
- assert (fpv2a->url && *fpv2a->url == "http://www.example.com/foo/");
- assert (!fpv2a->package_url);
- assert (fpv2a->email && *fpv2a->email == "foo-users@example.com");
- assert (!fpv2a->package_email);
-
- assert (fpv2a->internal_repository.load () == sr);
- assert (fpv2a->other_repositories.empty ());
- assert (fpv2a->priority == priority::low);
- assert (fpv2a->changes.empty ());
-
- assert (fpv2a->license_alternatives.size () == 1);
- assert (fpv2a->license_alternatives[0].size () == 1);
- assert (fpv2a->license_alternatives[0][0] == "MIT");
-
- assert (fpv2a->dependencies.size () == 3);
- assert (fpv2a->dependencies[0].size () == 2);
- assert (fpv2a->dependencies[1].size () == 1);
- assert (fpv2a->dependencies[2].size () == 2);
-
- assert (fpv2a->dependencies[0][0] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("0.1"), false, version ("2.0.0-"), true))));
-
- assert (fpv2a->dependencies[0][1] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("2.0"), false, version ("5.0"), false))));
-
- assert (fpv2a->dependencies[1][0] ==
- dep (
- "libgenx",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("0.2"), true, version ("3.0"), true))));
-
- assert (fpv2a->dependencies[2][0] ==
- dep (
- "libexpat",
- optional<dependency_constraint> (
- dependency_constraint (
- nullopt, true, version ("5.2"), true))));
-
- assert (fpv2a->dependencies[2][1] ==
- dep (
- "libexpat",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("1"), true, version ("5.1"), false))));
-
- assert (fpv2a->requirements.empty ());
-
- assert (check_location (fpv2a));
-
- assert (fpv2a->sha256sum && *fpv2a->sha256sum ==
- "34fc224087bfd9212de4acfbbf5275513ebc57678b5f029546918a62c57d15cb");
-
- // libfoo-1.2.3-4
- //
- shared_ptr<package> fpv3 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.3+4"))));
-
- assert (fpv3->summary == "The Foo library");
- assert (fpv3->tags == strings ({"c++", "foo"}));
- assert (!fpv3->description);
- assert (fpv3->url && *fpv3->url == "http://www.example.com/foo/");
- assert (!fpv3->package_url);
- assert (fpv3->email && *fpv3->email == "foo-users@example.com");
- assert (!fpv3->package_email);
-
- assert (fpv3->internal_repository.load () == sr);
- assert (fpv3->other_repositories.empty ());
- assert (fpv3->priority == priority::low);
-
- assert (fpv3->changes.empty ());
-
- assert (fpv3->license_alternatives.size () == 1);
- assert (fpv3->license_alternatives[0].size () == 1);
- assert (fpv3->license_alternatives[0][0] == "MIT");
-
- assert (fpv3->dependencies.size () == 1);
- assert (fpv3->dependencies[0].size () == 1);
- assert (fpv3->dependencies[0][0] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("2.0.0"), false, nullopt, true))));
-
- assert (check_location (fpv3));
-
- assert (fpv3->sha256sum && *fpv3->sha256sum ==
- "204fb25edf2404e9e88e1bef8b2a444281a807d9087093147a2cc80a1ffba79a");
-
- // libfoo-1.2.4
- //
- shared_ptr<package> fpv4 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.4"))));
-
- assert (fpv4->summary == "The Foo Library");
- assert (fpv4->tags == strings ({"c++", "foo"}));
- assert (*fpv4->description == "Very good foo library.");
- assert (fpv4->url && *fpv4->url == "http://www.example.com/foo/");
- assert (!fpv4->package_url);
- assert (fpv4->email && *fpv4->email == "foo-users@example.com");
- assert (!fpv4->package_email);
-
- assert (fpv4->internal_repository.load () == sr);
- assert (fpv4->other_repositories.empty ());
- assert (fpv4->priority == priority::low);
- assert (fpv4->changes == "some changes 1\n\nsome changes 2");
-
- assert (fpv4->license_alternatives.size () == 1);
- assert (fpv4->license_alternatives[0].comment ==
- "Permissive free software license.");
- assert (fpv4->license_alternatives[0].size () == 1);
- assert (fpv4->license_alternatives[0][0] == "MIT");
-
- assert (fpv4->dependencies.size () == 1);
- assert (fpv4->dependencies[0].size () == 1);
- assert (fpv4->dependencies[0][0] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("2.0.0"), false, nullopt, true))));
-
- assert (check_location (fpv4));
-
- assert (fpv4->sha256sum && *fpv4->sha256sum ==
- "aa1606323bfc59b70de642629dc5d8318cc5348e3646f90ed89406d975db1e1d");
-
- // Verify 'math' repository.
- //
- assert (mr->location.canonical_name () == "pkg:dev.cppget.org/math");
- assert (mr->location.string () ==
- "http://dev.cppget.org/1/math");
- assert (mr->display_name == "math");
- assert (mr->priority == 2);
- assert (!mr->url);
- assert (mr->email && *mr->email == "repoman@dev.cppget.org");
- assert (mr->summary && *mr->summary == "Math C++ package repository");
- assert (mr->description && *mr->description ==
- "This is the awesome C++ package repository full of remarkable "
- "algorithms and\nAPIs.");
-
- dir_path mrp (cp.directory () / dir_path ("1/math"));
- assert (mr->cache_location.path () == mrp.normalize ());
-
- assert (mr->packages_timestamp ==
- file_mtime (mr->cache_location.path () / packages));
-
- assert (mr->repositories_timestamp ==
- file_mtime (mr->cache_location.path () / repositories));
-
- assert (mr->internal);
-
- assert (mr->complements.empty ());
- assert (mr->prerequisites.size () == 1);
- assert (mr->prerequisites[0].load () == cr);
-
- // Verify libstudxml package version.
- //
- shared_ptr<package> xpv (
- db.load<package> (
- package_id (package_name ("libstudxml"), version ("1.0.0+1"))));
-
- assert (xpv->summary == "Modern C++ XML API");
- assert (xpv->tags == strings ({"c++", "xml", "parser", "serializer",
- "pull", "streaming", "modern"}));
- assert (!xpv->description);
- assert (xpv->url &&
- *xpv->url == "http://www.codesynthesis.com/projects/libstudxml/");
- assert (!xpv->package_url);
- assert (xpv->email && *xpv->email ==
- email ("studxml-users@codesynthesis.com",
- "Public mailing list, posts by non-members "
- "are allowed but moderated."));
- assert (xpv->package_email &&
- *xpv->package_email == email ("boris@codesynthesis.com",
- "Direct email to the author."));
-
- assert (xpv->internal_repository.load () == mr);
- assert (xpv->other_repositories.empty ());
- assert (xpv->priority == priority::low);
- assert (xpv->changes.empty ());
-
- assert (xpv->license_alternatives.size () == 1);
- assert (xpv->license_alternatives[0].size () == 1);
- assert (xpv->license_alternatives[0][0] == "MIT");
-
- assert (xpv->dependencies.size () == 2);
- assert (xpv->dependencies[0].size () == 1);
- assert (xpv->dependencies[0][0] ==
- dep (
- "libexpat",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("2.0.0"), false, nullopt, true))));
-
- assert (xpv->dependencies[1].size () == 1);
- assert (xpv->dependencies[1][0] == dep ("libgenx", nullopt));
-
- assert (xpv->requirements.empty ());
-
- assert (check_location (xpv));
-
- assert (xpv->sha256sum && *xpv->sha256sum ==
- "cfa4b1f89f8e903d48eff1e1d14628c32aa4d126d09b0b056d2cd80f8dc78580");
-
- // Verify libfoo package versions.
- //
- // libfoo-1.2.4-1
- //
- shared_ptr<package> fpv5 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.4+1"))));
-
- assert (fpv5->summary == "The Foo Math Library");
- assert (fpv5->tags == strings ({"c++", "foo", "math"}));
- assert (*fpv5->description ==
- "A modern C++ library with easy to use linear algebra and lot "
- "of optimization\ntools.\n\nThere are over 100 functions in "
- "total with an extensive test suite. The API is\nsimilar to "
- "MATLAB.\n\nUseful for conversion of research code into "
- "production environments.");
-
- assert (fpv5->url && *fpv5->url == "http://www.example.com/foo/");
-
- assert (fpv5->doc_url && *fpv5->doc_url ==
- "http://www.example.org/projects/libfoo/man.xhtml" &&
- fpv5->doc_url->comment == "Documentation page.");
-
- assert (fpv5->src_url && *fpv5->src_url ==
- "http://scm.example.com/?p=odb/libodb.git;a=tree" &&
- fpv5->src_url->comment == "Source tree url.");
-
- assert (fpv5->package_url &&
- *fpv5->package_url == "http://www.example.com/foo/pack");
- assert (fpv5->email && *fpv5->email == "foo-users@example.com");
- assert (fpv5->package_email &&
- *fpv5->package_email == "pack@example.com");
-
- assert (fpv5->internal_repository.load () == mr);
- assert (fpv5->other_repositories.size () == 1);
- assert (fpv5->other_repositories[0].load () == cr);
-
- assert (fpv5->priority == priority::high);
- assert (fpv5->priority.comment ==
- "Critical bug fixes, performance improvement.");
-
- const char ch[] = R"DLM(1.2.4+1
+ test_git_repos (loader_args, loadtab_dir, db);
+ break;
+ }
+ default:
+ {
+ print_usage ();
+ return 1;
+ }
+ }
+ }
+ // Fully qualified to avoid ambiguity with odb exception.
+ //
+ catch (const std::exception& e)
+ {
+ cerr << e << endl;
+ return 1;
+ }
+
+ return 0;
+}
+
+static inline dependency
+dep (const char* n, optional<dependency_constraint> c)
+{
+ return dependency {package_name (n), move (c), nullptr};
+}
+
+static void
+test_git_repos (const cstrings& loader_args,
+ const dir_path& loadtab_dir,
+ odb::pgsql::database& db)
+{
+ path loadtab (loadtab_dir / "git-loadtab");
+
+ cstrings args (loader_args);
+ args.push_back ("--force");
+ args.push_back ("--shallow");
+ args.push_back (loadtab.string ().c_str ());
+ args.push_back (nullptr);
+
+ {
+ // Run the loader.
+ //
+ assert (process (args.data ()).wait ());
+
+ // Check persistent objects.
+ //
+ session s;
+ transaction t (db.begin ());
+
+ assert (db.query<repository> ().size () == 1);
+ assert (db.query<package> ().size () == 1);
+
+ // Verify 'foo' repository.
+ //
+ shared_ptr<repository> r (
+ db.load<repository> ("git:example.com/foo#master"));
+
+ assert (r->location.string () == "https://git.example.com/foo.git#master");
+ assert (r->summary && *r->summary == "foo project repository");
+
+ // Verify libfoo package version.
+ //
+ // libfoo-1.0
+ //
+ shared_ptr<package> p (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.0"))));
+
+ assert (p->fragment &&
+ *p->fragment == "0f50af28d1cfb0c22f5b88e2bf674ab732e058d9");
+
+ assert (p->dependencies.size () == 1);
+ assert (p->dependencies[0].size () == 1);
+
+ assert (p->dependencies[0][0] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("1.0"), false, version ("1.0"), false)));
+
+ t.commit ();
+ }
+}
+
+static void
+test_pkg_repos (const cstrings& loader_args,
+ const dir_path& loadtab_dir,
+ odb::pgsql::database& db)
+{
+ path p (loadtab_dir / dir_path ("1/stable") / packages);
+ timestamp srt (file_mtime (p));
+
+ path loadtab (loadtab_dir / "loadtab");
+
+ // Load the repositories and check persistent objects validity.
+ //
+ {
+ cstrings args (loader_args);
+ args.push_back ("--force");
+ args.push_back (loadtab.string ().c_str ());
+ args.push_back (nullptr);
+
+ // Run the loader.
+ //
+ assert (process (args.data ()).wait ());
+
+ // Check persistent objects.
+ //
+ session s;
+ transaction t (db.begin ());
+
+ assert (db.query<repository> ().size () == 7);
+ assert (db.query<package> ().size () == 18);
+
+ shared_ptr<repository> sr (
+ db.load<repository> ("pkg:dev.cppget.org/stable"));
+
+ shared_ptr<repository> mr (
+ db.load<repository> ("pkg:dev.cppget.org/math"));
+
+ shared_ptr<repository> cr (
+ db.load<repository> ("pkg:dev.cppget.org/misc"));
+
+ shared_ptr<repository> tr (
+ db.load<repository> ("pkg:dev.cppget.org/testing"));
+
+ shared_ptr<repository> gr (
+ db.load<repository> ("pkg:dev.cppget.org/staging"));
+
+ // Verify 'stable' repository.
+ //
+ assert (sr->location.canonical_name () == "pkg:dev.cppget.org/stable");
+ assert (sr->location.string () ==
+ "http://dev.cppget.org/1/stable");
+ assert (sr->display_name == "stable");
+ assert (sr->priority == 1);
+ assert (!sr->interface_url);
+ assert (sr->email && *sr->email == "repoman@dev.cppget.org" &&
+ sr->email->comment == "public mailing list");
+ assert (sr->summary &&
+ *sr->summary == "General C++ package stable repository");
+ assert (sr->description && *sr->description ==
+ "This is the awesome C++ package repository full of exciting "
+ "stuff.");
+
+ dir_path srp (loadtab.directory () / dir_path ("1/stable"));
+ assert (sr->cache_location.path () == srp.normalize ());
+
+ assert (sr->packages_timestamp == srt);
+ assert (sr->repositories_timestamp ==
+ file_mtime (sr->cache_location.path () / repositories));
+
+ assert (sr->internal);
+ assert (sr->complements.empty ());
+ assert (sr->prerequisites.size () == 2);
+ assert (sr->prerequisites[0].load () == cr);
+ assert (sr->prerequisites[1].load () == mr);
+
+ // Verify libfoo package versions.
+ //
+ // libfoo-+0-X.Y
+ //
+ shared_ptr<package> fpvxy (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("+0-X.Y"))));
+
+ assert (fpvxy->project == package_name ("libfoo"));
+ assert (fpvxy->summary == "The Foo Library");
+ assert (fpvxy->tags.empty ());
+ assert (!fpvxy->description);
+ assert (!fpvxy->url);
+ assert (!fpvxy->package_url);
+ assert (!fpvxy->email);
+ assert (!fpvxy->package_email);
+
+ assert (fpvxy->internal_repository.load () == mr);
+ assert (fpvxy->other_repositories.empty ());
+
+ assert (fpvxy->priority == priority::low);
+ assert (fpvxy->changes.empty ());
+
+ assert (fpvxy->license_alternatives.size () == 1);
+ assert (fpvxy->license_alternatives[0].size () == 1);
+ assert (fpvxy->license_alternatives[0][0] == "MIT");
+
+ assert (fpvxy->dependencies.empty ());
+ assert (fpvxy->requirements.empty ());
+
+ assert (check_location (fpvxy));
+
+ assert (fpvxy->sha256sum && *fpvxy->sha256sum ==
+ "c994fd49f051ab7fb25f3a4e68ca878e484c5d3c2cb132b37d41224b0621b618");
+
+ // libfoo-1.0
+ //
+ shared_ptr<package> fpv1 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.0"))));
+
+ assert (fpv1->summary == "The Foo Library");
+ assert (fpv1->tags.empty ());
+ assert (!fpv1->description);
+ assert (!fpv1->url);
+ assert (!fpv1->package_url);
+ assert (!fpv1->email);
+ assert (!fpv1->package_email);
+
+ assert (fpv1->internal_repository.load () == sr);
+ assert (fpv1->other_repositories.size () == 2);
+ assert (fpv1->other_repositories[0].load () == mr);
+ assert (fpv1->other_repositories[1].load () == cr);
+
+ assert (fpv1->priority == priority::low);
+ assert (fpv1->changes.empty ());
+
+ assert (fpv1->license_alternatives.size () == 1);
+ assert (fpv1->license_alternatives[0].size () == 1);
+ assert (fpv1->license_alternatives[0][0] == "MIT");
+
+ assert (fpv1->dependencies.empty ());
+ assert (fpv1->requirements.empty ());
+
+ assert (check_location (fpv1));
+
+ assert (fpv1->sha256sum && *fpv1->sha256sum ==
+ "0df6d45a3514c6101609bdcfefe7659b5754e505c6cf6b4107141d8217bb981d");
+
+ // libfoo-1.2.2
+ //
+ shared_ptr<package> fpv2 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.2"))));
+
+ assert (fpv2->summary == "The Foo library");
+ assert (fpv2->tags == strings ({"c++", "foo"}));
+ assert (!fpv2->description);
+ assert (fpv2->url && *fpv2->url == "http://www.example.com/foo/");
+ assert (!fpv2->package_url);
+ assert (fpv2->email && *fpv2->email == "foo-users@example.com");
+ assert (!fpv2->package_email);
+
+ assert (fpv2->internal_repository.load () == sr);
+ assert (fpv2->other_repositories.empty ());
+ assert (fpv2->priority == priority::low);
+ assert (fpv2->changes.empty ());
+
+ assert (fpv2->license_alternatives.size () == 1);
+ assert (fpv2->license_alternatives[0].size () == 1);
+ assert (fpv2->license_alternatives[0][0] == "MIT");
+
+ assert (fpv2->dependencies.size () == 2);
+ assert (fpv2->dependencies[0].size () == 1);
+ assert (fpv2->dependencies[1].size () == 1);
+
+ assert (fpv2->dependencies[0][0] ==
+ dep ("libbar",
+ dependency_constraint (
+ nullopt, true, version ("2.4.0"), false)));
+
+ assert (fpv2->dependencies[1][0] ==
+ dep ("libexp",
+ dependency_constraint (
+ version ("+2-1.2"), false, version ("+2-1.2"), false)));
+
+ assert (check_location (fpv2));
+
+ assert (fpv2->sha256sum && *fpv2->sha256sum ==
+ "088068ea3d69542a153f829cf836013374763148fba0a43d8047974f58b5efd7");
+
+ // libfoo-1.2.2-alpha.1
+ //
+ shared_ptr<package> fpv2a (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.2-alpha.1"))));
+
+ assert (fpv2a->summary == "The Foo library");
+ assert (fpv2a->tags == strings ({"c++", "foo"}));
+ assert (!fpv2a->description);
+ assert (fpv2a->url && *fpv2a->url == "http://www.example.com/foo/");
+ assert (!fpv2a->package_url);
+ assert (fpv2a->email && *fpv2a->email == "foo-users@example.com");
+ assert (!fpv2a->package_email);
+
+ assert (fpv2a->internal_repository.load () == sr);
+ assert (fpv2a->other_repositories.empty ());
+ assert (fpv2a->priority == priority::low);
+ assert (fpv2a->changes.empty ());
+
+ assert (fpv2a->license_alternatives.size () == 1);
+ assert (fpv2a->license_alternatives[0].size () == 1);
+ assert (fpv2a->license_alternatives[0][0] == "MIT");
+
+ assert (fpv2a->dependencies.size () == 3);
+ assert (fpv2a->dependencies[0].size () == 2);
+ assert (fpv2a->dependencies[1].size () == 1);
+ assert (fpv2a->dependencies[2].size () == 2);
+
+ assert (fpv2a->dependencies[0][0] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("0.1"), false, version ("2.0.0-"), true)));
+
+ assert (fpv2a->dependencies[0][1] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("2.0"), false, version ("5.0"), false)));
+
+ assert (fpv2a->dependencies[1][0] ==
+ dep ("libgenx",
+ dependency_constraint (
+ version ("0.2"), true, version ("3.0"), true)));
+
+ assert (fpv2a->dependencies[2][0] ==
+ dep ("libexpat",
+ dependency_constraint (
+ nullopt, true, version ("5.2"), true)));
+
+ assert (fpv2a->dependencies[2][1] ==
+ dep ("libexpat",
+ dependency_constraint (
+ version ("1"), true, version ("5.1"), false)));
+
+ assert (fpv2a->requirements.empty ());
+
+ assert (check_location (fpv2a));
+
+ assert (fpv2a->sha256sum && *fpv2a->sha256sum ==
+ "34fc224087bfd9212de4acfbbf5275513ebc57678b5f029546918a62c57d15cb");
+
+ // libfoo-1.2.3-4
+ //
+ shared_ptr<package> fpv3 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.3+4"))));
+
+ assert (fpv3->summary == "The Foo library");
+ assert (fpv3->tags == strings ({"c++", "foo"}));
+ assert (!fpv3->description);
+ assert (fpv3->url && *fpv3->url == "http://www.example.com/foo/");
+ assert (!fpv3->package_url);
+ assert (fpv3->email && *fpv3->email == "foo-users@example.com");
+ assert (!fpv3->package_email);
+
+ assert (fpv3->internal_repository.load () == sr);
+ assert (fpv3->other_repositories.empty ());
+ assert (fpv3->priority == priority::low);
+
+ assert (fpv3->changes.empty ());
+
+ assert (fpv3->license_alternatives.size () == 1);
+ assert (fpv3->license_alternatives[0].size () == 1);
+ assert (fpv3->license_alternatives[0][0] == "MIT");
+
+ assert (fpv3->dependencies.size () == 1);
+ assert (fpv3->dependencies[0].size () == 1);
+ assert (fpv3->dependencies[0][0] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("2.0.0"), false, nullopt, true)));
+
+ assert (check_location (fpv3));
+
+ assert (fpv3->sha256sum && *fpv3->sha256sum ==
+ "204fb25edf2404e9e88e1bef8b2a444281a807d9087093147a2cc80a1ffba79a");
+
+ // libfoo-1.2.4
+ //
+ shared_ptr<package> fpv4 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.4"))));
+
+ assert (fpv4->summary == "The Foo Library");
+ assert (fpv4->tags == strings ({"c++", "foo"}));
+ assert (*fpv4->description == "Very good foo library.");
+ assert (fpv4->url && *fpv4->url == "http://www.example.com/foo/");
+ assert (!fpv4->package_url);
+ assert (fpv4->email && *fpv4->email == "foo-users@example.com");
+ assert (!fpv4->package_email);
+
+ assert (fpv4->internal_repository.load () == sr);
+ assert (fpv4->other_repositories.empty ());
+ assert (fpv4->priority == priority::low);
+ assert (fpv4->changes == "some changes 1\n\nsome changes 2");
+
+ assert (fpv4->license_alternatives.size () == 1);
+ assert (fpv4->license_alternatives[0].comment ==
+ "Permissive free software license.");
+ assert (fpv4->license_alternatives[0].size () == 1);
+ assert (fpv4->license_alternatives[0][0] == "MIT");
+
+ assert (fpv4->dependencies.size () == 1);
+ assert (fpv4->dependencies[0].size () == 1);
+ assert (fpv4->dependencies[0][0] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("2.0.0"), false, nullopt, true)));
+
+ assert (check_location (fpv4));
+
+ assert (fpv4->sha256sum && *fpv4->sha256sum ==
+ "aa1606323bfc59b70de642629dc5d8318cc5348e3646f90ed89406d975db1e1d");
+
+ // Verify 'math' repository.
+ //
+ assert (mr->location.canonical_name () == "pkg:dev.cppget.org/math");
+ assert (mr->location.string () ==
+ "http://dev.cppget.org/1/math");
+ assert (mr->display_name == "math");
+ assert (mr->priority == 2);
+ assert (!mr->interface_url);
+ assert (mr->email && *mr->email == "repoman@dev.cppget.org");
+ assert (mr->summary && *mr->summary == "Math C++ package repository");
+ assert (mr->description && *mr->description ==
+ "This is the awesome C++ package repository full of remarkable "
+ "algorithms and\nAPIs.");
+
+ dir_path mrp (loadtab.directory () / dir_path ("1/math"));
+ assert (mr->cache_location.path () == mrp.normalize ());
+
+ assert (mr->packages_timestamp ==
+ file_mtime (mr->cache_location.path () / packages));
+
+ assert (mr->repositories_timestamp ==
+ file_mtime (mr->cache_location.path () / repositories));
+
+ assert (mr->internal);
+
+ assert (mr->complements.empty ());
+ assert (mr->prerequisites.size () == 1);
+ assert (mr->prerequisites[0].load () == cr);
+
+ // Verify libstudxml package version.
+ //
+ shared_ptr<package> xpv (
+ db.load<package> (
+ package_id (package_name ("libstudxml"), version ("1.0.0+1"))));
+
+ assert (xpv->summary == "Modern C++ XML API");
+ assert (xpv->tags == strings ({"c++", "xml", "parser", "serializer",
+ "pull", "streaming", "modern"}));
+ assert (!xpv->description);
+ assert (xpv->url &&
+ *xpv->url == "http://www.codesynthesis.com/projects/libstudxml/");
+ assert (!xpv->package_url);
+ assert (xpv->email && *xpv->email ==
+ email ("studxml-users@codesynthesis.com",
+ "Public mailing list, posts by non-members "
+ "are allowed but moderated."));
+ assert (xpv->package_email &&
+ *xpv->package_email == email ("boris@codesynthesis.com",
+ "Direct email to the author."));
+
+ assert (xpv->internal_repository.load () == mr);
+ assert (xpv->other_repositories.empty ());
+ assert (xpv->priority == priority::low);
+ assert (xpv->changes.empty ());
+
+ assert (xpv->license_alternatives.size () == 1);
+ assert (xpv->license_alternatives[0].size () == 1);
+ assert (xpv->license_alternatives[0][0] == "MIT");
+
+ assert (xpv->dependencies.size () == 2);
+ assert (xpv->dependencies[0].size () == 1);
+ assert (xpv->dependencies[0][0] ==
+ dep ("libexpat",
+ dependency_constraint (
+ version ("2.0.0"), false, nullopt, true)));
+
+ assert (xpv->dependencies[1].size () == 1);
+ assert (xpv->dependencies[1][0] == dep ("libgenx", nullopt));
+
+ assert (xpv->requirements.empty ());
+
+ assert (check_location (xpv));
+
+ assert (xpv->sha256sum && *xpv->sha256sum ==
+ "cfa4b1f89f8e903d48eff1e1d14628c32aa4d126d09b0b056d2cd80f8dc78580");
+
+ // Verify libfoo package versions.
+ //
+ // libfoo-1.2.4-1
+ //
+ shared_ptr<package> fpv5 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.4+1"))));
+
+ assert (fpv5->summary == "The Foo Math Library");
+ assert (fpv5->tags == strings ({"c++", "foo", "math"}));
+ assert (*fpv5->description ==
+ "A modern C++ library with easy to use linear algebra and lot "
+ "of optimization\ntools.\n\nThere are over 100 functions in "
+ "total with an extensive test suite. The API is\nsimilar to "
+ "MATLAB.\n\nUseful for conversion of research code into "
+ "production environments.");
+
+ assert (fpv5->url && *fpv5->url == "http://www.example.com/foo/");
+
+ assert (fpv5->doc_url && *fpv5->doc_url ==
+ "http://www.example.org/projects/libfoo/man.xhtml" &&
+ fpv5->doc_url->comment == "Documentation page.");
+
+ assert (fpv5->src_url && *fpv5->src_url ==
+ "http://scm.example.com/?p=odb/libodb.git;a=tree" &&
+ fpv5->src_url->comment == "Source tree url.");
+
+ assert (fpv5->package_url &&
+ *fpv5->package_url == "http://www.example.com/foo/pack");
+ assert (fpv5->email && *fpv5->email == "foo-users@example.com");
+ assert (fpv5->package_email &&
+ *fpv5->package_email == "pack@example.com");
+
+ assert (fpv5->internal_repository.load () == mr);
+ assert (fpv5->other_repositories.size () == 1);
+ assert (fpv5->other_repositories[0].load () == cr);
+
+ assert (fpv5->priority == priority::high);
+ assert (fpv5->priority.comment ==
+ "Critical bug fixes, performance improvement.");
+
+ const char ch[] = R"DLM(1.2.4+1
* applied patch for critical bug-219
* regenerated documentation
1.2.4
* test suite extended significantly)DLM";
- assert (fpv5->changes == ch);
-
- assert (fpv5->license_alternatives.size () == 2);
- assert (fpv5->license_alternatives[0].comment ==
- "If using with GNU TLS.");
- assert (fpv5->license_alternatives[0].size () == 2);
- assert (fpv5->license_alternatives[0][0] == "LGPLv2");
- assert (fpv5->license_alternatives[0][1] == "MIT");
- assert (fpv5->license_alternatives[1].comment ==
- "If using with OpenSSL.");
- assert (fpv5->license_alternatives[1].size () == 1);
- assert (fpv5->license_alternatives[1][0] == "BSD");
-
- assert (fpv5->dependencies.size () == 3);
- assert (fpv5->dependencies[0].size () == 2);
- assert (fpv5->dependencies[0].comment ==
- "Crashes with 1.1.0-2.3.0.");
-
- assert (fpv5->dependencies[0][0] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- nullopt, true, version ("1.1"), true))));
-
- assert (fpv5->dependencies[0][1] ==
- dep (
- "libmisc",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("2.3.0"), true, nullopt, true))));
-
- assert (fpv5->dependencies[1].size () == 1);
- assert (fpv5->dependencies[1].comment.empty ());
-
- assert (fpv5->dependencies[1][0] ==
- dep ("libexp",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("1.0"), false, nullopt, true))));
-
- assert (fpv5->dependencies[2].size () == 2);
- assert (fpv5->dependencies[2].comment == "The newer the better.");
-
- assert (fpv5->dependencies[2][0] == dep ("libstudxml", nullopt));
- assert (fpv5->dependencies[2][1] == dep ("libexpat", nullopt));
-
- requirements& fpvr5 (fpv5->requirements);
- assert (fpvr5.size () == 4);
-
- assert (fpvr5[0] == strings ({"linux", "windows", "macosx"}));
- assert (!fpvr5[0].conditional);
- assert (fpvr5[0].comment == "Symbian support is coming.");
-
- assert (fpvr5[1] == strings ({"c++11"}));
- assert (!fpvr5[1].conditional);
- assert (fpvr5[1].comment.empty ());
-
- assert (fpvr5[2].empty ());
- assert (fpvr5[2].conditional);
- assert (fpvr5[2].comment ==
- "libc++ standard library if using Clang on Mac OS X.");
-
- assert (fpvr5[3] == strings ({"vc++ >= 12.0"}));
- assert (fpvr5[3].conditional);
- assert (fpvr5[3].comment == "Only if using VC++ on Windows.");
-
- assert (check_location (fpv5));
-
- assert (fpv5->sha256sum && *fpv5->sha256sum ==
- "c5e593d8efdc34a258f8c0b8cc352dc7193ea4a1d666bcf8d48708c7dd82d0d6");
-
- // Verify libexp package version.
- //
- // libexp-+2-1.2
- //
- shared_ptr<package> epv (
- db.load<package> (
- package_id (package_name ("libexp"), version ("+2-1.2+1"))));
-
- assert (epv->project == "mathLab");
- assert (epv->summary == "The exponent");
- assert (epv->tags == strings ({"mathlab", "c++", "exponent"}));
- assert (epv->description && *epv->description ==
- "The exponent math function.");
- assert (epv->url && *epv->url == "http://www.exp.com");
- assert (!epv->package_url);
- assert (epv->email && *epv->email == email ("users@exp.com"));
- assert (!epv->package_email);
- assert (epv->build_email && *epv->build_email == "builds@exp.com");
-
- assert (epv->internal_repository.load () == mr);
- assert (epv->other_repositories.empty ());
- assert (epv->priority == priority (priority::low));
- assert (epv->changes.empty ());
-
- assert (epv->license_alternatives.size () == 1);
- assert (epv->license_alternatives[0].size () == 1);
- assert (epv->license_alternatives[0][0] == "MIT");
-
- assert (epv->dependencies.size () == 2);
- assert (epv->dependencies[0].size () == 1);
- assert (epv->dependencies[0][0] == dep ("libmisc", nullopt));
-
- assert (epv->dependencies[1].size () == 1);
- assert (epv->dependencies[1][0] ==
- dep ("libpq",
- optional<dependency_constraint> (
- dependency_constraint (
- version ("9.0.0"), false, nullopt, true))));
-
- assert (epv->requirements.empty ());
-
- db.load (*epv, epv->build_section);
-
- assert (
- epv->build_constraints ==
- build_constraints ({
+ assert (fpv5->changes == ch);
+
+ assert (fpv5->license_alternatives.size () == 2);
+ assert (fpv5->license_alternatives[0].comment ==
+ "If using with GNU TLS.");
+ assert (fpv5->license_alternatives[0].size () == 2);
+ assert (fpv5->license_alternatives[0][0] == "LGPLv2");
+ assert (fpv5->license_alternatives[0][1] == "MIT");
+ assert (fpv5->license_alternatives[1].comment ==
+ "If using with OpenSSL.");
+ assert (fpv5->license_alternatives[1].size () == 1);
+ assert (fpv5->license_alternatives[1][0] == "BSD");
+
+ assert (fpv5->dependencies.size () == 3);
+ assert (fpv5->dependencies[0].size () == 2);
+ assert (fpv5->dependencies[0].comment ==
+ "Crashes with 1.1.0-2.3.0.");
+
+ assert (fpv5->dependencies[0][0] ==
+ dep ("libmisc",
+ dependency_constraint (
+ nullopt, true, version ("1.1"), true)));
+
+ assert (fpv5->dependencies[0][1] ==
+ dep ("libmisc",
+ dependency_constraint (
+ version ("2.3.0"), true, nullopt, true)));
+
+ assert (fpv5->dependencies[1].size () == 1);
+ assert (fpv5->dependencies[1].comment.empty ());
+
+ assert (fpv5->dependencies[1][0] ==
+ dep ("libexp",
+ dependency_constraint (
+ version ("1.0"), false, nullopt, true)));
+
+ assert (fpv5->dependencies[2].size () == 2);
+ assert (fpv5->dependencies[2].comment == "The newer the better.");
+
+ assert (fpv5->dependencies[2][0] == dep ("libstudxml", nullopt));
+ assert (fpv5->dependencies[2][1] == dep ("libexpat", nullopt));
+
+ requirements& fpvr5 (fpv5->requirements);
+ assert (fpvr5.size () == 4);
+
+ assert (fpvr5[0] == strings ({"linux", "windows", "macosx"}));
+ assert (!fpvr5[0].conditional);
+ assert (fpvr5[0].comment == "Symbian support is coming.");
+
+ assert (fpvr5[1] == strings ({"c++11"}));
+ assert (!fpvr5[1].conditional);
+ assert (fpvr5[1].comment.empty ());
+
+ assert (fpvr5[2].empty ());
+ assert (fpvr5[2].conditional);
+ assert (fpvr5[2].comment ==
+ "libc++ standard library if using Clang on Mac OS X.");
+
+ assert (fpvr5[3] == strings ({"vc++ >= 12.0"}));
+ assert (fpvr5[3].conditional);
+ assert (fpvr5[3].comment == "Only if using VC++ on Windows.");
+
+ assert (check_location (fpv5));
+
+ assert (fpv5->sha256sum && *fpv5->sha256sum ==
+ "c5e593d8efdc34a258f8c0b8cc352dc7193ea4a1d666bcf8d48708c7dd82d0d6");
+
+ // Verify libexp package version.
+ //
+ // libexp-+2-1.2
+ //
+ shared_ptr<package> epv (
+ db.load<package> (
+ package_id (package_name ("libexp"), version ("+2-1.2+1"))));
+
+ assert (epv->project == "mathLab");
+ assert (epv->summary == "The exponent");
+ assert (epv->tags == strings ({"mathlab", "c++", "exponent"}));
+ assert (epv->description && *epv->description ==
+ "The exponent math function.");
+ assert (epv->url && *epv->url == "http://www.exp.com");
+ assert (!epv->package_url);
+ assert (epv->email && *epv->email == email ("users@exp.com"));
+ assert (!epv->package_email);
+ assert (epv->build_email && *epv->build_email == "builds@exp.com");
+
+ assert (epv->internal_repository.load () == mr);
+ assert (epv->other_repositories.empty ());
+ assert (epv->priority == priority (priority::low));
+ assert (epv->changes.empty ());
+
+ assert (epv->license_alternatives.size () == 1);
+ assert (epv->license_alternatives[0].size () == 1);
+ assert (epv->license_alternatives[0][0] == "MIT");
+
+ assert (epv->dependencies.size () == 2);
+ assert (epv->dependencies[0].size () == 1);
+ assert (epv->dependencies[0][0] == dep ("libmisc", nullopt));
+
+ assert (epv->dependencies[1].size () == 1);
+ assert (epv->dependencies[1][0] ==
+ dep ("libpq",
+ dependency_constraint (
+ version ("9.0.0"), false, nullopt, true)));
+
+ assert (epv->requirements.empty ());
+
+ db.load (*epv, epv->build_section);
+
+ assert (
+ epv->build_constraints ==
+ build_constraints ({
build_constraint (true, "*", nullopt, "Only supported on Linux."),
- build_constraint (false, "linux*", nullopt, "")}));
-
- assert (check_location (epv));
- assert (epv->sha256sum && *epv->sha256sum ==
- "bc68940a1b3b7e345cbceac35d308b4e04b304f49ff2087340949f2879709967");
-
- // Verify libpq package version.
- //
- // libpq-0
- //
- shared_ptr<package> qpv (
- db.load<package> (package_id (package_name ("libpq"), version ("0"))));
-
- assert (qpv->summary == "PostgreSQL C API client library");
-
- // Verify 'misc' repository.
- //
- assert (cr->location.canonical_name () == "pkg:dev.cppget.org/misc");
- assert (cr->location.string () ==
- "http://dev.cppget.org/1/misc");
- assert (cr->display_name.empty ());
- assert (cr->priority == 0);
- assert (cr->url && *cr->url == "http://misc.cppget.org/");
- assert (!cr->email);
- assert (!cr->summary);
- assert (!cr->description);
-
- dir_path crp (cp.directory () / dir_path ("1/misc"));
- assert (cr->cache_location.path () == crp.normalize ());
-
- assert (cr->packages_timestamp ==
- file_mtime (cr->cache_location.path () / packages));
-
- assert (cr->repositories_timestamp ==
- file_mtime (cr->cache_location.path () / repositories));
-
- assert (!cr->internal);
- assert (cr->prerequisites.empty ());
- assert (cr->complements.size () == 1);
- assert (cr->complements[0].load () == tr);
-
- // Verify libbar package version.
- //
- // libbar-2.4.0+3
- //
- shared_ptr<package> bpv (
- db.load<package> (
- package_id (package_name ("libbar"), version ("2.4.0+3"))));
-
- assert (check_external (*bpv));
- assert (bpv->other_repositories.size () == 1);
- assert (bpv->other_repositories[0].load () == cr);
- assert (check_location (bpv));
-
- // Verify libfoo package versions.
- //
- // libfoo-0.1
- //
- shared_ptr<package> fpv0 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("0.1"))));
-
- assert (check_external (*fpv0));
- assert (fpv0->other_repositories.size () == 1);
- assert (fpv0->other_repositories[0].load () == cr);
- assert (check_location (fpv0));
-
- // libfoo-1.2.4-2
- //
- shared_ptr<package> fpv6 (
- db.load<package> (
- package_id (package_name ("libfoo"), version ("1.2.4+2"))));
-
- assert (check_external (*fpv6));
- assert (fpv6->other_repositories.size () == 1);
- assert (fpv6->other_repositories[0].load () == cr);
- assert (check_location (fpv6));
-
- // Verify 'testing' repository.
- //
- assert (tr->location.canonical_name () == "pkg:dev.cppget.org/testing");
- assert (tr->location.string () ==
- "http://dev.cppget.org/1/testing");
- assert (tr->display_name.empty ());
- assert (tr->priority == 0);
- assert (tr->url && *tr->url == "http://test.cppget.org/hello/");
- assert (!tr->email);
- assert (!tr->summary);
- assert (!tr->description);
-
- dir_path trp (cp.directory () / dir_path ("1/testing"));
- assert (tr->cache_location.path () == trp.normalize ());
-
- assert (tr->packages_timestamp ==
- file_mtime (tr->cache_location.path () / packages));
-
- assert (tr->repositories_timestamp ==
- file_mtime (tr->cache_location.path () / repositories));
-
- assert (!tr->internal);
- assert (tr->prerequisites.empty ());
- assert (tr->complements.size () == 1);
- assert (tr->complements[0].load () == gr);
-
- // Verify libmisc package version.
- //
- // libmisc-2.4.0
- //
- shared_ptr<package> mpv0 (
- db.load<package> (
- package_id (package_name ("libmisc"), version ("2.4.0"))));
-
- assert (check_external (*mpv0));
- assert (mpv0->other_repositories.size () == 1);
- assert (mpv0->other_repositories[0].load () == tr);
- assert (check_location (mpv0));
-
- // libmisc-2.3.0+1
- //
- shared_ptr<package> mpv1 (
- db.load<package> (
- package_id (package_name ("libmisc"), version ("2.3.0+1"))));
-
- assert (check_external (*mpv1));
- assert (mpv1->other_repositories.size () == 1);
- assert (mpv1->other_repositories[0].load () == tr);
- assert (check_location (mpv1));
-
- // Verify 'staging' repository.
- //
- assert (gr->location.canonical_name () == "pkg:dev.cppget.org/staging");
- assert (gr->location.string () ==
- "http://dev.cppget.org/1/staging");
- assert (gr->display_name.empty ());
- assert (gr->priority == 0);
- assert (gr->url && *gr->url == "http://dev.cppget.org/");
- assert (!gr->email);
- assert (!gr->summary);
- assert (!gr->description);
-
- dir_path grp (cp.directory () / dir_path ("1/staging"));
- assert (gr->cache_location.path () == grp.normalize ());
-
- assert (gr->packages_timestamp ==
- file_mtime (gr->cache_location.path () / packages));
-
- assert (gr->repositories_timestamp ==
- file_mtime (gr->cache_location.path () / repositories));
-
- assert (!gr->internal);
- assert (gr->prerequisites.empty ());
- assert (gr->complements.empty ());
-
- // Verify libexpat package version.
- //
- // libexpat-5.1
- //
- shared_ptr<package> tpv (
- db.load<package> (
- package_id (package_name ("libexpat"), version ("5.1"))));
-
- assert (check_external (*tpv));
- assert (tpv->other_repositories.size () == 1);
- assert (tpv->other_repositories[0].load () == gr);
- assert (check_location (tpv));
-
- // Verify libgenx package version.
- //
- // libgenx-1.0
- //
- shared_ptr<package> gpv (
- db.load<package> (
- package_id (package_name ("libgenx"), version ("1.0"))));
-
- assert (check_external (*gpv));
- assert (gpv->other_repositories.size () == 1);
- assert (gpv->other_repositories[0].load () == gr);
- assert (check_location (gpv));
-
- // Verify libmisc package version.
- //
- // libmisc-1.0
- //
- shared_ptr<package> mpv2 (
- db.load<package> (
- package_id (package_name ("libmisc"), version ("1.0"))));
-
- assert (check_external (*mpv2));
- assert (mpv2->other_repositories.size () == 1);
- assert (mpv2->other_repositories[0].load () == gr);
- assert (check_location (mpv2));
-
- // Change package summary, update the object persistent state, rerun
- // loader and ensure the model were not rebuilt.
- //
- bpv->summary = "test";
- db.update (bpv);
-
- t.commit ();
- }
+ build_constraint (false, "linux*", nullopt, "")}));
+
+ assert (check_location (epv));
+ assert (epv->sha256sum && *epv->sha256sum ==
+ "bc68940a1b3b7e345cbceac35d308b4e04b304f49ff2087340949f2879709967");
+
+ // Verify libpq package version.
+ //
+ // libpq-0
+ //
+ shared_ptr<package> qpv (
+ db.load<package> (package_id (package_name ("libpq"), version ("0"))));
+
+ assert (qpv->summary == "PostgreSQL C API client library");
+
+ // Verify 'misc' repository.
+ //
+ assert (cr->location.canonical_name () == "pkg:dev.cppget.org/misc");
+ assert (cr->location.string () ==
+ "http://dev.cppget.org/1/misc");
+ assert (cr->display_name.empty ());
+ assert (cr->priority == 0);
+ assert (cr->interface_url &&
+ *cr->interface_url == "http://misc.cppget.org/");
+ assert (!cr->email);
+ assert (!cr->summary);
+ assert (!cr->description);
+
+ dir_path crp (loadtab.directory () / dir_path ("1/misc"));
+ assert (cr->cache_location.path () == crp.normalize ());
+
+ assert (cr->packages_timestamp ==
+ file_mtime (cr->cache_location.path () / packages));
+
+ assert (cr->repositories_timestamp ==
+ file_mtime (cr->cache_location.path () / repositories));
+
+ assert (!cr->internal);
+ assert (cr->prerequisites.empty ());
+ assert (cr->complements.size () == 1);
+ assert (cr->complements[0].load () == tr);
+
+ // Verify libbar package version.
+ //
+ // libbar-2.4.0+3
+ //
+ shared_ptr<package> bpv (
+ db.load<package> (
+ package_id (package_name ("libbar"), version ("2.4.0+3"))));
+
+ assert (check_external (*bpv));
+ assert (bpv->other_repositories.size () == 1);
+ assert (bpv->other_repositories[0].load () == cr);
+ assert (check_location (bpv));
+
+ // Verify libfoo package versions.
+ //
+ // libfoo-0.1
+ //
+ shared_ptr<package> fpv0 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("0.1"))));
+
+ assert (check_external (*fpv0));
+ assert (fpv0->other_repositories.size () == 1);
+ assert (fpv0->other_repositories[0].load () == cr);
+ assert (check_location (fpv0));
+
+ // libfoo-1.2.4-2
+ //
+ shared_ptr<package> fpv6 (
+ db.load<package> (
+ package_id (package_name ("libfoo"), version ("1.2.4+2"))));
+
+ assert (check_external (*fpv6));
+ assert (fpv6->other_repositories.size () == 1);
+ assert (fpv6->other_repositories[0].load () == cr);
+ assert (check_location (fpv6));
+
+ // Verify 'testing' repository.
+ //
+ assert (tr->location.canonical_name () == "pkg:dev.cppget.org/testing");
+ assert (tr->location.string () ==
+ "http://dev.cppget.org/1/testing");
+ assert (tr->display_name.empty ());
+ assert (tr->priority == 0);
+ assert (tr->interface_url &&
+ *tr->interface_url == "http://test.cppget.org/hello/");
+ assert (!tr->email);
+ assert (!tr->summary);
+ assert (!tr->description);
+
+ dir_path trp (loadtab.directory () / dir_path ("1/testing"));
+ assert (tr->cache_location.path () == trp.normalize ());
+
+ assert (tr->packages_timestamp ==
+ file_mtime (tr->cache_location.path () / packages));
+
+ assert (tr->repositories_timestamp ==
+ file_mtime (tr->cache_location.path () / repositories));
+
+ assert (!tr->internal);
+ assert (tr->prerequisites.empty ());
+ assert (tr->complements.size () == 1);
+ assert (tr->complements[0].load () == gr);
+
+ // Verify libmisc package version.
+ //
+ // libmisc-2.4.0
+ //
+ shared_ptr<package> mpv0 (
+ db.load<package> (
+ package_id (package_name ("libmisc"), version ("2.4.0"))));
+
+ assert (check_external (*mpv0));
+ assert (mpv0->other_repositories.size () == 1);
+ assert (mpv0->other_repositories[0].load () == tr);
+ assert (check_location (mpv0));
+
+ // libmisc-2.3.0+1
+ //
+ shared_ptr<package> mpv1 (
+ db.load<package> (
+ package_id (package_name ("libmisc"), version ("2.3.0+1"))));
+
+ assert (check_external (*mpv1));
+ assert (mpv1->other_repositories.size () == 1);
+ assert (mpv1->other_repositories[0].load () == tr);
+ assert (check_location (mpv1));
+
+ // Verify 'staging' repository.
+ //
+ assert (gr->location.canonical_name () == "pkg:dev.cppget.org/staging");
+ assert (gr->location.string () ==
+ "http://dev.cppget.org/1/staging");
+ assert (gr->display_name.empty ());
+ assert (gr->priority == 0);
+ assert (gr->interface_url &&
+ *gr->interface_url == "http://dev.cppget.org/");
+ assert (!gr->email);
+ assert (!gr->summary);
+ assert (!gr->description);
+
+ dir_path grp (loadtab.directory () / dir_path ("1/staging"));
+ assert (gr->cache_location.path () == grp.normalize ());
+
+ assert (gr->packages_timestamp ==
+ file_mtime (gr->cache_location.path () / packages));
+
+ assert (gr->repositories_timestamp ==
+ file_mtime (gr->cache_location.path () / repositories));
+
+ assert (!gr->internal);
+ assert (gr->prerequisites.empty ());
+ assert (gr->complements.empty ());
+
+ // Verify libexpat package version.
+ //
+ // libexpat-5.1
+ //
+ shared_ptr<package> tpv (
+ db.load<package> (
+ package_id (package_name ("libexpat"), version ("5.1"))));
+
+ assert (check_external (*tpv));
+ assert (tpv->other_repositories.size () == 1);
+ assert (tpv->other_repositories[0].load () == gr);
+ assert (check_location (tpv));
+
+ // Verify libgenx package version.
+ //
+ // libgenx-1.0
+ //
+ shared_ptr<package> gpv (
+ db.load<package> (
+ package_id (package_name ("libgenx"), version ("1.0"))));
+
+ assert (check_external (*gpv));
+ assert (gpv->other_repositories.size () == 1);
+ assert (gpv->other_repositories[0].load () == gr);
+ assert (check_location (gpv));
+
+ // Verify libmisc package version.
+ //
+ // libmisc-1.0
+ //
+ shared_ptr<package> mpv2 (
+ db.load<package> (
+ package_id (package_name ("libmisc"), version ("1.0"))));
+
+ assert (check_external (*mpv2));
+ assert (mpv2->other_repositories.size () == 1);
+ assert (mpv2->other_repositories[0].load () == gr);
+ assert (check_location (mpv2));
+
+ // Change package summary, update the object persistent state, rerun
+ // the loader and make sure the model were not rebuilt.
+ //
+ bpv->summary = "test";
+ db.update (bpv);
+
+ t.commit ();
+ }
+
+ // Rerun the loader without --force and make sure the model were not
+ // rebuilt.
+ //
+ {
+ cstrings args (loader_args);
+ args.push_back (loadtab.string ().c_str ());
+ args.push_back (nullptr);
+
+ assert (process (args.data ()).wait ());
- assert (process (ld_args).wait ());
transaction t (db.begin ());
shared_ptr<package> bpv (
@@ -914,11 +1025,27 @@ main (int argc, char* argv[])
t.commit ();
}
- // Fully qualified to avoid ambiguity with odb exception.
+
+ // Restore the original setup.
//
- catch (const std::exception& e)
{
- cerr << e << endl;
- return 1;
+ cstrings args (loader_args);
+ args.push_back ("--force");
+ args.push_back (loadtab.string ().c_str ());
+ args.push_back (nullptr);
+
+ assert (process (args.data ()).wait ());
+
+ transaction t (db.begin ());
+
+ shared_ptr<package> bpv (
+ db.find<package> (
+ package_id (package_name ("libbar"), version ("2.4.0+3"))));
+
+ // External package summary is not saved.
+ //
+ assert (bpv->summary.empty ());
+
+ t.commit ();
}
}