From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18424 invoked by alias); 28 Apr 2017 12:13:27 -0000 Mailing-List: contact cygwin-apps-help@cygwin.com; run by ezmlm Precedence: bulk Sender: cygwin-apps-owner@cygwin.com List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Mail-Followup-To: cygwin-apps@cygwin.com Received: (qmail 16919 invoked by uid 89); 28 Apr 2017 12:13:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=cheap X-HELO: rgout01.bt.lon5.cpcloud.co.uk Received: from rgout0104.bt.lon5.cpcloud.co.uk (HELO rgout01.bt.lon5.cpcloud.co.uk) (65.20.0.124) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Apr 2017 12:13:18 +0000 X-OWM-Source-IP: 31.51.207.210 (GB) X-OWM-Env-Sender: jonturney@btinternet.com X-Junkmail-Premium-Raw: score=8/50,refid=2.7.2:2017.4.26.2416:17:8.707,ip=,rules=NO_URI_FOUND, NO_CTA_URI_FOUND, NO_MESSAGE_ID, NO_URI_HTTPS, TO_MALFORMED Received: from localhost.localdomain (31.51.207.210) by rgout01.bt.lon5.cpcloud.co.uk (9.0.019.13-1) (authenticated as jonturney@btinternet.com) id 58F62BE3012F56CE; Fri, 28 Apr 2017 13:13:20 +0100 From: Jon Turney To: cygwin-apps@cygwin.com Cc: Jon Turney Subject: [PATCH setup 08/11] Don't do unneeded work when changing stability level Date: Fri, 28 Apr 2017 12:13:00 -0000 Message-Id: <20170428121205.12240-9-jon.turney@dronecode.org.uk> In-Reply-To: <20170428121205.12240-1-jon.turney@dronecode.org.uk> References: <20170428121205.12240-1-jon.turney@dronecode.org.uk> X-SW-Source: 2017-04/txt/msg00093.txt.bz2 Since 2c4487b3, we stopped recomputing all the dependencies every time something was changed in the PickView. Remove all the depsolver code which was used to do that. The only remaining use was when we changed stability level, to select all the package versions at that stability level. That work is already being done by packagedb::defaultTrust() (called by ChooserPage::changeTrust()). (Note that this changes behaviour slightly: New dependencies of currently installed packages used to be shown in the PickView, but now they won't be reported until the PrereqChecker) (This still leaves the crude depsolver we actually use in PrereqChecker, which just selects all the unmet dependencies with the current trust level) --- choose.cc | 8 --- package_db.cc | 11 ----- package_db.h | 1 - package_meta.cc | 35 +------------- package_meta.h | 11 +---- package_version.cc | 140 ----------------------------------------------------- 6 files changed, 3 insertions(+), 203 deletions(-) diff --git a/choose.cc b/choose.cc index a0dcc1b..2016caa 100644 --- a/choose.cc +++ b/choose.cc @@ -372,14 +372,6 @@ ChooserPage::changeTrust(trusts aTrust) { SetBusy (); chooser->defaultTrust (aTrust); - packagedb db; - db.markUnVisited (); - - for (packagedb::packagecollection::iterator i = db.packages.begin(); i != db.packages.end(); i++) - { - i->second->set_requirements(aTrust); - } - chooser->refresh(); PrereqChecker p; p.setTrust (aTrust); diff --git a/package_db.cc b/package_db.cc index a47fb11..c2e1b63 100644 --- a/package_db.cc +++ b/package_db.cc @@ -381,17 +381,6 @@ packagedb::connectedEnd() } void -packagedb::markUnVisited() -{ - for (packagedb::packagecollection::iterator n = packages.begin (); - n != packages.end (); ++n) - { - packagemeta & pkgm = *(n->second); - pkgm.visited(false); - } -} - -void packagedb::setExistence () { /* binary packages */ diff --git a/package_db.h b/package_db.h index 6a99398..d02dbc4 100644 --- a/package_db.h +++ b/package_db.h @@ -72,7 +72,6 @@ public: PackageDBConnectedIterator connectedEnd(); void fillMissingCategory(); void defaultTrust (trusts trust); - void markUnVisited(); void setExistence(); typedef std::map packagecollection; /* all seen binary packages */ diff --git a/package_meta.cc b/package_meta.cc index 4ea9a4f..0f97f1d 100644 --- a/package_meta.cc +++ b/package_meta.cc @@ -92,8 +92,7 @@ packagemeta::packagemeta (packagemeta const &rhs) : installed (rhs.installed), prev (rhs.prev), curr (rhs.curr), exp (rhs.exp), - desired (rhs.desired), - visited_(rhs.visited_) + desired (rhs.desired) { } @@ -457,26 +456,6 @@ packagemeta::set_action (trusts const trust) user_picked = true; } -int -packagemeta::set_requirements (trusts deftrust, size_t depth) -{ - if (visited()) - return 0; - /* Only prevent further checks once we have been required by something else */ - if (depth) - visited(true); - int changed = 0; - /* handle build-depends */ - if (depth == 0 && desired.sourcePackage ().picked()) - changed += desired.sourcePackage ().set_requirements (deftrust, depth + 1); - if (!desired || (desired != installed && !desired.picked ())) - /* uninstall || source only */ - return changed; - - return changed + desired.set_requirements (deftrust, depth); -} - - // Set a particular type of action. void packagemeta::set_action (_actions action, packageversion const &default_version) @@ -612,18 +591,6 @@ packagemeta::trustLabel(packageversion const &aVersion) const } void -packagemeta::visited(bool const &aBool) -{ - visited_ = aBool; -} - -bool -packagemeta::visited() const -{ - return visited_; -} - -void packagemeta::logSelectionStatus() const { packagemeta const & pkg = *this; diff --git a/package_meta.h b/package_meta.h index f23073e..9bf8336 100644 --- a/package_meta.h +++ b/package_meta.h @@ -35,8 +35,7 @@ public: static void ScanDownloadedFiles (bool); packagemeta (packagemeta const &); packagemeta (const std::string& pkgname) - : name (pkgname), key(pkgname), user_picked (false), - visited_(false) + : name (pkgname), key(pkgname), user_picked (false) { } @@ -44,8 +43,6 @@ public: void add_version (packageversion &); void set_installed (packageversion &); - void visited(bool const &); - bool visited() const; void addToCategoryBase(); bool hasNoCategories() const; void setDefaultCategories(); @@ -74,10 +71,7 @@ public: void set_action (trusts const t); void set_action (_actions, packageversion const & default_version); void uninstall (); - int set_requirements (trusts deftrust, size_t depth); - // explicit separation for generic programming. - int set_requirements (trusts deftrust) - { return set_requirements (deftrust, 0); } + void set_message (const std::string& message_id, const std::string& message_string) { message.set (message_id, message_string); @@ -155,7 +149,6 @@ protected: packagemeta &operator= (packagemeta const &); private: std::string trustLabel(packageversion const &) const; - bool visited_; }; #endif /* SETUP_PACKAGE_META_H */ diff --git a/package_version.cc b/package_version.cc index 1f9f2d8..7f52c27 100644 --- a/package_version.cc +++ b/package_version.cc @@ -309,146 +309,6 @@ packageversion::scan (bool mirror_mode) } } -static bool -checkForInstalled (PackageSpecification *spec) -{ - packagedb db; - packagemeta *required = db.findBinary (*spec); - if (!required) - return false; - if (spec->satisfies (required->installed) - && required->desired == required->installed ) - /* done, found a satisfactory installed version that will remain - installed */ - return true; - return false; -} - -static bool -checkForUpgradeable (PackageSpecification *spec) -{ - packagedb db; - packagemeta *required = db.findBinary (*spec); - if (!required || !required->installed) - return false; - for (set ::iterator i = required->versions.begin(); - i != required->versions.end(); ++i) - if (spec->satisfies (*i)) - return true; - return false; -} - -static bool -checkForSatisfiable (PackageSpecification *spec) -{ - packagedb db; - packagemeta *required = db.findBinary (*spec); - if (!required) - return false; - for (set ::iterator i = required->versions.begin(); - i != required->versions.end(); ++i) - if (spec->satisfies (*i)) - return true; - return false; -} - -static int -select (trusts deftrust, size_t depth, packagemeta *required, - const packageversion &aVersion) -{ - /* preserve source */ - bool sourceticked = required->desired.sourcePackage ().picked(); - /* install this version */ - required->desired = aVersion; - required->desired.pick (required->installed != required->desired, required); - required->desired.sourcePackage ().pick (sourceticked, NULL); - /* does this requirement have requirements? */ - return required->set_requirements (deftrust, depth + 1); -} - -static int -processOneDependency (trusts deftrust, size_t depth, - PackageSpecification *spec) -{ - /* TODO: add this to a set of packages to be offered to meet the - requirement. For now, simply set the install to the first - satisfactory version. The user can step through the list if - desired */ - packagedb db; - packagemeta *required = db.findBinary (*spec); - - packageversion trusted = required->trustp(false, deftrust); - if (spec->satisfies (trusted)) { - return select (deftrust, depth, required, trusted); - } - - Log (LOG_TIMESTAMP) << "Warning, the default trust level for package " - << trusted.Name() << " does not meet this specification " << *spec - << endLog; - - set ::iterator v; - for (v = required->versions.begin(); - v != required->versions.end() && !spec->satisfies (*v); ++v); - - if (v == required->versions.end()) - /* assert ?! */ - return 0; - - return select (deftrust, depth, required, *v); -} - -int -packageversion::set_requirements (trusts deftrust, size_t depth) -{ - int changed = 0; - vector *>::iterator dp = depends ()->begin(); - /* cheap test for too much recursion */ - if (depth > 30) - return changed; - /* walk through each and clause */ - while (dp != depends ()->end()) - { - /* three step: - 1) is a satisfactory or clause installed? - 2) is an unsatisfactory version of an or clause which has - a satisfactory version available installed? - 3) is a satisfactory package available? - */ - /* check each or clause for an installed match */ - vector ::iterator i = - find_if ((*dp)->begin(), (*dp)->end(), checkForInstalled); - if (i != (*dp)->end()) - { - /* we found an installed ok package */ - /* next and clause */ - ++dp; - continue; - } - /* check each or clause for an upgradeable version */ - i = find_if ((*dp)->begin(), (*dp)->end(), checkForUpgradeable); - if (i != (*dp)->end()) - { - /* we found a package that can be up/downgraded to meet the - requirement. (*i is the packagespec that can be satisfied.) - */ - ++dp; - changed += processOneDependency (deftrust, depth, *i) + 1; - continue; - } - /* check each or clause for an installable version */ - i = find_if ((*dp)->begin(), (*dp)->end(), checkForSatisfiable); - if (i != (*dp)->end()) - { - /* we found a package that can be installed to meet the requirement */ - ++dp; - changed += processOneDependency (deftrust, depth, *i) + 1; - continue; - } - ++dp; - } - return changed; -} - void packageversion::addScript(Script const &aScript) { -- 2.12.2