// file : bpkg/system-package-manager.test.cxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #include #include #include #include #undef NDEBUG #include #include using namespace std; namespace bpkg { // Usage: args[0] ... // // Where is one of: // // system-package-names [...] -- [--non-native] ... // // Where is a package name, is a package manifest file. // // system-package-version [...] -- // // Where is a package name, is a package manifest file. // // downstream-package-version [...] -- ... // // Where is a system version to translate, is a package // name, and is a package manifest file. // int main (int argc, char* argv[]) try { assert (argc >= 2); // int argi (1); string cmd (argv[argi++]); os_release osr; if (cmd == "system-package-names" || cmd == "system-package-version" || cmd == "downstream-package-version") { assert (argc >= 4); // osr.name_id = argv[argi++]; osr.version_id = argv[argi++]; for (; argi != argc; ++argi) { string a (argv[argi]); if (a == "--") break; osr.like_ids.push_back (move (a)); } } if (cmd == "system-package-names") { assert (argi != argc); // -- string a (argv[argi++]); assert (a == "--"); assert (argi != argc); bool native (true); if ((a = argv[argi]) == "--non-native") { native = false; argi++; } assert (argi != argc); // string pn (argv[argi++]); assert (argi != argc); // available_packages aps; for (; argi != argc; ++argi) aps.push_back (make_available_from_manifest (pn, argv[argi])); sort_available (aps); strings ns ( system_package_manager::system_package_names ( aps, osr.name_id, osr.version_id, osr.like_ids, native)); for (const string& n: ns) cout << n << '\n'; } else if (cmd == "system-package-version") { assert (argi != argc); // -- string a (argv[argi++]); assert (a == "--"); assert (argi != argc); // string pn (argv[argi++]); assert (argi != argc); // pair, lazy_shared_ptr> apf ( make_available_from_manifest (pn, argv[argi++])); assert (argi == argc); // No trailing junk. if (optional v = system_package_manager::system_package_version ( apf.first, apf.second, osr.name_id, osr.version_id, osr.like_ids)) { cout << *v << '\n'; } } else if (cmd == "downstream-package-version") { assert (argi != argc); // -- string a (argv[argi++]); assert (a == "--"); assert (argi != argc); // string sv (argv[argi++]); assert (argi != argc); // string pn (argv[argi++]); assert (argi != argc); // available_packages aps; for (; argi != argc; ++argi) aps.push_back (make_available_from_manifest (pn, argv[argi])); sort_available (aps); optional v ( system_package_manager::downstream_package_version ( sv, aps, osr.name_id, osr.version_id, osr.like_ids)); if (v) cout << *v << '\n'; } else fail << "unknown command '" << cmd << "'"; return 0; } catch (const failed&) { return 1; } } int main (int argc, char* argv[]) { return bpkg::main (argc, argv); }