ref: refs/heads/master
commit b007b0ff12ac6628aa189e03c55ca66c3d1ff09c
Author: Michael Andres
Date: Wed Oct 28 14:06:06 2009 +0100
Let match_repo perform a for alias/reponumber and do expensive URL analysis only if needed.
---
src/repos.cc | 63 +++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/src/repos.cc b/src/repos.cc
index cf7942f..f02aaa1 100644
--- a/src/repos.cc
+++ b/src/repos.cc
@@ -281,45 +281,58 @@ static bool build_cache(Zypper & zypper, const RepoInfo &repo, bool force_build)
bool match_repo(Zypper & zypper, string str, RepoInfo *repo)
{
RepoManager & manager = zypper.repoManager();
- bool found = false;
- unsigned int number = 1; // repo number
- for (RepoManager::RepoConstIterator known_it = manager.repoBegin();
- known_it != manager.repoEnd(); ++known_it, number++)
+ // Quick check for alias/reponumber first:
{
- unsigned int tmp = 0;
+ unsigned int number = 1; // repo number
+ unsigned int tmp = 0;
safe_lexical_cast (str, tmp); // try to make an int out of the string
+ for (RepoManager::RepoConstIterator known_it = manager.repoBegin();
+ known_it != manager.repoEnd(); ++known_it, ++number)
+ {
+ if ( known_it->alias() == str || tmp == number )
+ {
+ if (repo)
+ *repo = *known_it;
+ return true;
+ }
+ }
+ }
+
+ // Expensive URL analysis only if needed:
+ bool found = false;
+
+ for (RepoManager::RepoConstIterator known_it = manager.repoBegin();
+ known_it != manager.repoEnd(); ++known_it)
+ {
try
{
- found = known_it->alias() == str || tmp == number;
- if (!found)
+ url::ViewOption urlview = url::ViewOption::DEFAULTS + url::ViewOption::WITH_PASSWORD;
+ if (zypper.cOpts().count("loose-auth"))
{
- url::ViewOption urlview = url::ViewOption::DEFAULTS + url::ViewOption::WITH_PASSWORD;
- if (zypper.cOpts().count("loose-auth"))
- {
- urlview = urlview
+ urlview = urlview
- url::ViewOptions::WITH_PASSWORD
- url::ViewOptions::WITH_USERNAME;
- }
- if (zypper.cOpts().count("loose-query"))
- urlview = urlview - url::ViewOptions::WITH_QUERY_STR;
+ }
+ if (zypper.cOpts().count("loose-query"))
+ urlview = urlview - url::ViewOptions::WITH_QUERY_STR;
- if (!(urlview.has(url::ViewOptions::WITH_PASSWORD)
+ if (!(urlview.has(url::ViewOptions::WITH_PASSWORD)
&& urlview.has(url::ViewOptions::WITH_QUERY_STR)))
+ {
+ for_(urlit, known_it->baseUrlsBegin(), known_it->baseUrlsEnd())
+ if (urlit->asString(urlview) == Url(str).asString(urlview))
{
- for_(urlit, known_it->baseUrlsBegin(), known_it->baseUrlsEnd())
- if (urlit->asString(urlview) == Url(str).asString(urlview))
- {
- found = true;
- break;
- }
+ found = true;
+ break;
}
- else
- found =
- find(known_it->baseUrlsBegin(),known_it->baseUrlsEnd(),Url(str))
- != known_it->baseUrlsEnd();
}
+ else
+ found =
+ find(known_it->baseUrlsBegin(),known_it->baseUrlsEnd(),Url(str))
+ != known_it->baseUrlsEnd();
+
if (found)
{
if (repo)
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org