status_t BSolverRepository::SetTo(const BRepositoryConfig& config) { Unset(); if (config.InitCheck() != B_OK) return B_BAD_VALUE; fName = config.Name(); fPriority = config.Priority(); BPackageRoster roster; BRepositoryCache cache; status_t error = roster.GetRepositoryCache(config.Name(), &cache); if (error != B_OK) { Unset(); return error; } BRepositoryCache::Iterator it = cache.GetIterator(); while (const BPackageInfo* packageInfo = it.Next()) { error = AddPackage(*packageInfo); if (error != B_OK) { Unset(); return error; } } return B_OK; }
status_t BPackageManager::_GetRepositoryCache(BPackageRoster& roster, const BRepositoryConfig& config, bool refresh, BRepositoryCache& _cache) { if (!refresh && roster.GetRepositoryCache(config.Name(), &_cache) == B_OK) return B_OK; status_t error = RefreshRepository(config); if (error != B_OK) { fUserInteractionHandler->Warn(error, "refreshing repository \"%s\" failed", config.Name().String()); } return roster.GetRepositoryCache(config.Name(), &_cache); }
void BPackageManager::_AddRemoteRepository(BPackageRoster& roster, const char* name, bool refresh) { BRepositoryConfig config; status_t error = roster.GetRepositoryConfig(name, &config); if (error != B_OK) { fUserInteractionHandler->Warn(error, "failed to get config for repository \"%s\". Skipping.", name); return; } BRepositoryCache cache; error = _GetRepositoryCache(roster, config, refresh, cache); if (error != B_OK) { fUserInteractionHandler->Warn(error, "failed to get cache for repository \"%s\". Skipping.", name); return; } RemoteRepository* repository = new RemoteRepository(config); if (!fOtherRepositories.AddItem(repository)) { delete repository; throw std::bad_alloc(); } BRepositoryBuilder(*repository, cache, config.Name()) .AddToSolver(fSolver, false); }
int ListReposCommand::Execute(int argc, const char* const* argv) { bool verbose = false; while (true) { static struct option sLongOptions[] = { { "help", no_argument, 0, 'h' }, { "verbose", no_argument, 0, 'v' }, { 0, 0, 0, 0 } }; opterr = 0; // don't print errors int c = getopt_long(argc, (char**)argv, "hv", sLongOptions, NULL); if (c == -1) break; switch (c) { case 'h': PrintUsageAndExit(false); break; case 'v': verbose = true; break; default: PrintUsageAndExit(true); break; } } // No remaining arguments. if (argc != optind) PrintUsageAndExit(true); BStringList repositoryNames(20); BPackageRoster roster; status_t result = roster.GetRepositoryNames(repositoryNames); if (result != B_OK) DIE(result, "can't collect repository names"); for (int i = 0; i < repositoryNames.CountStrings(); ++i) { const BString& repoName = repositoryNames.StringAt(i); BRepositoryConfig repoConfig; result = roster.GetRepositoryConfig(repoName, &repoConfig); if (result != B_OK) { BPath path; repoConfig.Entry().GetPath(&path); WARN(result, "skipping repository-config '%s'", path.Path()); continue; } if (verbose && i > 0) printf("\n"); printf(" %s %s\n", repoConfig.IsUserSpecific() ? "[User]" : " ", repoConfig.Name().String()); printf("\t\tbase-url: %s\n", repoConfig.BaseURL().String()); printf("\t\tpriority: %u\n", repoConfig.Priority()); if (verbose) { BRepositoryCache repoCache; result = roster.GetRepositoryCache(repoName, &repoCache); if (result == B_OK) { printf("\t\tvendor: %s\n", repoCache.Info().Vendor().String()); printf("\t\tsummary: %s\n", repoCache.Info().Summary().String()); printf("\t\tarch: %s\n", BPackageInfo::kArchitectureNames[ repoCache.Info().Architecture()]); printf("\t\tpkg-count: %" B_PRIu32 "\n", repoCache.CountPackages()); printf("\t\torig-url: %s\n", repoCache.Info().OriginalBaseURL().String()); printf("\t\torig-prio: %u\n", repoCache.Info().Priority()); } else printf("\t\t<no repository cache found>\n"); } } return 0; }