From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 83577 invoked by alias); 17 Mar 2018 15:00:43 -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 83227 invoked by uid 89); 17 Mar 2018 15:00:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=H*m:edu, relationship, site X-HELO: limerock01.mail.cornell.edu Received: from limerock01.mail.cornell.edu (HELO limerock01.mail.cornell.edu) (128.84.13.241) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 17 Mar 2018 15:00:23 +0000 X-CornellRouted: This message has been Routed already. Received: from authusersmtp.mail.cornell.edu (granite4.serverfarm.cornell.edu [10.16.197.9]) by limerock01.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id w2HF06sK010985; Sat, 17 Mar 2018 11:00:06 -0400 Received: from nothing.nyroc.rr.com (mta-68-175-129-7.twcny.rr.com [68.175.129.7] (may be forged)) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id w2HExvA8024392 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Sat, 17 Mar 2018 11:00:06 -0400 From: Ken Brown To: cygwin-apps@cygwin.com Subject: [PATCH setup 3/3] Keep track of all known sites for a given version of a package Date: Sat, 17 Mar 2018 15:00:00 -0000 Message-Id: <20180317145955.4944-4-kbrown@cornell.edu> In-Reply-To: <20180317145955.4944-1-kbrown@cornell.edu> References: <20180317145955.4944-1-kbrown@cornell.edu> X-PMX-Cornell-Gauge: Gauge=XXXXX X-PMX-CORNELL-AUTH-RESULTS: dkim-out=none; X-IsSubscribed: yes X-SW-Source: 2018-03/txt/msg00032.txt.bz2 When adding a packageversion for an entry in setup.ini, make its packagesource::sites vector include the sites from previously processed ini files. Also remove from the libsolv pool the previous packageversions, so that libsolv will always find the one that lists all the sites. --- IniDBBuilderPackage.cc | 11 ++++++++++- package_meta.cc | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc index 324f1bf..0b84def 100644 --- a/IniDBBuilderPackage.cc +++ b/IniDBBuilderPackage.cc @@ -148,6 +148,11 @@ IniDBBuilderPackage::buildPackageInstall (const std::string& path, // set archive path, size, mirror, hash cbpv.archive.set_canonical(path.c_str()); cbpv.archive.size = atoi(size.c_str()); + // do we already have some sites from previously read ini files? + packagedb db; + packageversion pv = db.findBinaryVersion(PackageSpecification(name, cbpv.version)); + if (pv) + cbpv.archive.sites = pv.source()->sites; cbpv.archive.sites.push_back(site(parse_mirror)); switch (type) { @@ -190,6 +195,11 @@ IniDBBuilderPackage::buildPackageSource (const std::string& path, cspv.archive = packagesource(); cspv.archive.set_canonical(path.c_str()); cspv.archive.size = atoi(size.c_str()); + // do we already have some sites from previously read ini files? + packagedb db; + packageversion pv = db.findBinaryVersion(PackageSpecification(name, cbpv.version)); + if (pv) + cspv.archive.sites = pv.sourcePackage().source()->sites; cspv.archive.sites.push_back(site(parse_mirror)); switch (type) { @@ -210,7 +220,6 @@ IniDBBuilderPackage::buildPackageSource (const std::string& path, break; } - packagedb db; packageversion spkg_id = db.addSource (name + "-src", cspv); /* create relationship between binary and source packageversions */ diff --git a/package_meta.cc b/package_meta.cc index 7f8110d..89b67bc 100644 --- a/package_meta.cc +++ b/package_meta.cc @@ -140,6 +140,14 @@ packagemeta::add_version (packageversion & thepkg, const SolverPool::addPackageD set ::iterator i = versions.find(thepkg); if (i != versions.end()) { + if (pkgdata.reponame != "_installed") + { + if (curr == *i) + curr = thepkg; + if (exp == *i) + exp = thepkg; + i->remove(); + } versions.erase(i); } -- 2.16.2