From: Jon Turney <jon.turney@dronecode.org.uk>
To: cygwin-apps@cygwin.com
Cc: Jon Turney <jon.turney@dronecode.org.uk>
Subject: [PATCH setup 14/14] Add obsoletes: support
Date: Wed, 31 May 2017 11:05:00 -0000 [thread overview]
Message-ID: <20170531110509.241220-4-jon.turney@dronecode.org.uk> (raw)
In-Reply-To: <20170531110509.241220-1-jon.turney@dronecode.org.uk>
Note that we need separate depends and obsoletes nodelists
---
IniDBBuilderPackage.cc | 23 ++++++++++++++++++-----
IniDBBuilderPackage.h | 5 ++++-
inilex.ll | 1 +
iniparse.yy | 3 +++
libsolv.cc | 2 ++
libsolv.h | 1 +
package_db.cc | 1 +
7 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc
index b929c7e..4e92961 100644
--- a/IniDBBuilderPackage.cc
+++ b/IniDBBuilderPackage.cc
@@ -88,7 +88,9 @@ IniDBBuilderPackage::buildPackage (const std::string& _name)
cbpv.archive = packagesource();
currentSpec = NULL;
- currentNodeList = PackageDepends();
+ currentNodeList = NULL;
+ dependsNodeList = PackageDepends();
+ obsoletesNodeList = PackageDepends();
#if DEBUG
Log (LOG_BABBLE) << "Created package " << name << endLog;
#endif
@@ -208,8 +210,9 @@ IniDBBuilderPackage::buildBeginDepends ()
Log (LOG_BABBLE) << "Beginning of a depends statement " << endLog;
#endif
currentSpec = NULL;
- currentNodeList = PackageDepends();
- cbpv.requires = ¤tNodeList;
+ dependsNodeList= PackageDepends();
+ currentNodeList = &dependsNodeList;
+ cbpv.requires = &dependsNodeList;
}
void
@@ -219,11 +222,20 @@ IniDBBuilderPackage::buildBeginBuildDepends ()
Log (LOG_BABBLE) << "Beginning of a Build-Depends statement" << endLog;
#endif
currentSpec = NULL;
- currentNodeList = PackageDepends();
+ currentNodeList = NULL;
/* there is currently nowhere to store Build-Depends information */
}
void
+IniDBBuilderPackage::buildBeginObsoletes ()
+{
+ currentSpec = NULL;
+ obsoletesNodeList = PackageDepends();
+ currentNodeList = &obsoletesNodeList;
+ cbpv.obsoletes = &obsoletesNodeList;
+}
+
+void
IniDBBuilderPackage::buildSourceName (const std::string& _name)
{
// When there is a Source: line, that names a real source package
@@ -247,7 +259,8 @@ IniDBBuilderPackage::buildPackageListNode (const std::string & name)
Log (LOG_BABBLE) << "New node '" << name << "' for package list" << endLog;
#endif
currentSpec = new PackageSpecification (name);
- currentNodeList.push_back (currentSpec);
+ if (currentNodeList)
+ currentNodeList->push_back (currentSpec);
}
void
diff --git a/IniDBBuilderPackage.h b/IniDBBuilderPackage.h
index 307d2b5..4e34680 100644
--- a/IniDBBuilderPackage.h
+++ b/IniDBBuilderPackage.h
@@ -57,6 +57,7 @@ public:
void buildBeginDepends ();
void buildBeginBuildDepends ();
+ void buildBeginObsoletes ();
void buildMessage (const std::string&, const std::string&);
void buildSourceName (const std::string& );
void buildSourceNameVersion (const std::string& );
@@ -83,7 +84,9 @@ private:
std::string message_id;
std::string message_string;
PackageSpecification *currentSpec;
- PackageDepends currentNodeList;
+ PackageDepends *currentNodeList;
+ PackageDepends dependsNodeList;
+ PackageDepends obsoletesNodeList;
SolverPool::addPackageData cbpv;
IniParseFeedback const &_feedback;
diff --git a/inilex.ll b/inilex.ll
index 13422b1..698775c 100644
--- a/inilex.ll
+++ b/inilex.ll
@@ -122,6 +122,7 @@ B64 [a-zA-Z0-9_-]
"category:"|"Section:" return CATEGORY;
"requires:" return REQUIRES;
[dD]"epends:" return DEPENDS;
+[oO]"bsoletes:" return OBSOLETES;
^{STR}":" ignore_line ();
diff --git a/iniparse.yy b/iniparse.yy
index 18ebe2a..3b74e36 100644
--- a/iniparse.yy
+++ b/iniparse.yy
@@ -45,6 +45,7 @@ extern int yylineno;
%token COMMA NL AT
%token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL
%token BUILDDEPENDS
+%token OBSOLETES
%token MESSAGE
%token ARCH RELEASE
@@ -103,6 +104,8 @@ singleitem /* non-empty */
| DEPENDS { iniBuilder->buildBeginDepends(); } versionedpackagelist NL
| REQUIRES { iniBuilder->buildBeginDepends(); } versionedpackagelistsp NL
| BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL
+ | OBSOLETES { iniBuilder->buildBeginObsoletes(); } versionedpackagelist NL
+
| MESSAGE STRING STRING NL { iniBuilder->buildMessage ($2, $3); }
| error NL { yyerror (std::string("unrecognized line ")
+ stringify(yylineno)
diff --git a/libsolv.cc b/libsolv.cc
index df0af3d..f509617 100644
--- a/libsolv.cc
+++ b/libsolv.cc
@@ -350,6 +350,8 @@ SolverPool::addPackage(const std::string& pkgname, const addPackageData &pkgdata
solvable->provides = repo_addid_dep(repo, solvable->provides, pool_rel2id(pool, solvable->name, solvable->evr, REL_EQ, 1), 0);
if (pkgdata.requires)
solvable->requires = makedeps(repo, pkgdata.requires);
+ if (pkgdata.obsoletes)
+ solvable->obsoletes = makedeps(repo, pkgdata.obsoletes);
/* a solvable can also store arbitrary attributes not needed for dependency
resolution, if we need them */
diff --git a/libsolv.h b/libsolv.h
index 43b37d2..be518e9 100644
--- a/libsolv.h
+++ b/libsolv.h
@@ -130,6 +130,7 @@ public:
PackageSpecification spkg;
SolvableVersion spkg_id;
PackageDepends *requires;
+ PackageDepends *obsoletes;
};
SolvableVersion addPackage(const std::string& pkgname,
diff --git a/package_db.cc b/package_db.cc
index f12afda..673e11a 100644
--- a/package_db.cc
+++ b/package_db.cc
@@ -113,6 +113,7 @@ packagedb::read ()
// we put our best guesses here...
data.vendor = "cygwin";
data.requires = NULL;
+ data.obsoletes = NULL;
data.sdesc = "";
data.ldesc = "";
data.stability = TRUST_CURR; // XXX: would be nice to get this correct as it effects upgrade decisions...
--
2.12.3
next prev parent reply other threads:[~2017-05-31 11:05 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-31 10:53 [PATCH setup 00/14] Use libsolv, solve all our problems... (WIP) Jon Turney
2017-05-31 10:53 ` [PATCH setup 04/14] Hoist pick() up to packagemeta Jon Turney
2017-05-31 10:53 ` [PATCH setup 05/14] Hoist uninstall up to Installer::uninstallOne() Jon Turney
2017-05-31 10:53 ` [PATCH setup 03/14] Hoist addScript() etc. up from packageversion to packagemeta Jon Turney
2017-05-31 10:53 ` [PATCH setup 01/14] Opaque how PackageDepends is stored Jon Turney
2017-05-31 10:53 ` [PATCH setup 02/14] Factor out reading installed.db Jon Turney
2017-05-31 10:57 ` [PATCH setup 10/14] Remove packageversion class Jon Turney
2017-05-31 10:57 ` [PATCH setup 08/14] Change to using a libsolv pool for storing package information Jon Turney
2017-05-31 10:57 ` [PATCH setup 09/14] Remove cygpackage class Jon Turney
2017-05-31 10:57 ` [PATCH setup 06/14] Hoist scan() up from packageversion to packagemeta Jon Turney
2017-05-31 10:57 ` [PATCH setup 07/14] Store package stability in class packageversion Jon Turney
2017-05-31 11:05 ` [PATCH setup 11/14] Drop in SolvableVersion as a replacement for packageversion Jon Turney
2017-05-31 11:05 ` [PATCH setup 12/14] Use solver to check for problems and produce a list of package transactions Jon Turney
2017-05-31 11:05 ` [PATCH setup 13/14] Download/checksum/install/uninstall what transaction wants Jon Turney
2017-05-31 11:05 ` Jon Turney [this message]
2017-08-29 13:37 ` [PATCH setup 00/14] Use libsolv, solve all our problems... (WIP) Ken Brown
2017-08-30 21:47 ` Ken Brown
2017-09-01 15:01 ` Ken Brown
2017-09-02 16:57 ` Ken Brown
2017-09-05 13:34 ` Jon Turney
2017-09-05 18:40 ` Achim Gratz
2017-09-06 2:52 ` Ken Brown
2017-11-23 18:10 ` Jon Turney
2017-11-23 20:32 ` Ken Brown
2017-11-23 20:54 ` Achim Gratz
2017-09-08 18:54 ` Ken Brown
2017-09-11 20:40 ` Ken Brown
2017-09-13 19:17 ` Achim Gratz
2017-09-13 21:16 ` Ken Brown
2017-09-14 17:26 ` Achim Gratz
2017-09-14 20:46 ` Ken Brown
2017-09-15 19:24 ` Jon Turney
2017-09-16 16:21 ` Ken Brown
2017-09-19 12:24 ` Ken Brown
2017-09-19 16:46 ` Jon Turney
2017-09-19 16:58 ` Ken Brown
2017-12-05 14:32 ` Jon Turney
2017-12-05 17:36 ` Ken Brown
2017-12-13 17:31 ` Ken Brown
2017-12-13 18:06 ` Achim Gratz
2017-12-13 22:31 ` Ken Brown
2017-12-14 14:12 ` Ken Brown
2017-12-24 15:00 ` Ken Brown
2018-01-09 13:25 ` Jon Turney
2018-01-09 15:37 ` Ken Brown
2018-01-09 15:49 ` Ken Brown
2018-01-13 14:14 ` Jon Turney
2018-01-13 19:56 ` Ken Brown
2018-01-13 21:29 ` Brian Inglis
2018-01-13 22:55 ` Ken Brown
2018-01-14 0:00 ` Ken Brown
2018-01-14 1:52 ` Brian Inglis
2018-01-14 2:37 ` Ken Brown
2018-01-15 19:02 ` Jon Turney
2018-01-15 21:50 ` Ken Brown
2018-01-18 19:14 ` Jon Turney
2017-09-15 15:15 ` Jon Turney
2017-09-15 16:53 ` Ken Brown
2017-09-15 20:56 ` cyg Simple
2017-09-17 16:02 ` Ken Brown
2017-09-26 14:50 ` Jon Turney
2017-09-26 16:07 ` Ken Brown
2017-09-27 19:14 ` Jon Turney
2017-09-27 20:33 ` Ken Brown
2017-09-29 17:38 ` Jon Turney
2017-09-29 20:34 ` Ken Brown
2017-10-02 14:07 ` Jon Turney
2017-10-02 15:17 ` Marco Atzeri
2017-10-04 14:43 ` Jon Turney
2017-10-10 11:18 ` Ken Brown
2017-10-10 15:49 ` Jon Turney
2017-10-17 12:45 ` Ken Brown
2017-10-17 18:47 ` Jon Turney
2017-10-18 15:28 ` Ken Brown
2017-10-18 15:57 ` Ken Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170531110509.241220-4-jon.turney@dronecode.org.uk \
--to=jon.turney@dronecode.org.uk \
--cc=cygwin-apps@cygwin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).