]> cygwin.com Git - cygwin-apps/setup.git/commitdiff
Add conflicts: support
authorJon Turney <jon.turney@dronecode.org.uk>
Wed, 7 Mar 2018 15:28:12 +0000 (15:28 +0000)
committerJon Turney <jon.turney@dronecode.org.uk>
Wed, 14 Mar 2018 16:34:37 +0000 (16:34 +0000)
IniDBBuilderPackage.cc
IniDBBuilderPackage.h
inilex.ll
iniparse.yy
libsolv.cc
libsolv.h
package_db.cc

index 29e19bf38769c38b3492d6a4000f22931cc495db..d560cb7a72ff9b4a7c75be0da6c02ed4b529ff38 100644 (file)
@@ -105,6 +105,7 @@ IniDBBuilderPackage::buildPackage (const std::string& _name)
   cbpv.requires = NULL;
   cbpv.obsoletes = NULL;
   cbpv.provides = NULL;
+  cbpv.conflicts = NULL;
   cbpv.archive = packagesource();
 
   currentSpec = NULL;
@@ -112,6 +113,7 @@ IniDBBuilderPackage::buildPackage (const std::string& _name)
   dependsNodeList = PackageDepends();
   obsoletesNodeList = PackageDepends();
   providesNodeList = PackageDepends();
+  conflictsNodeList = PackageDepends();
 #if DEBUG
   Log (LOG_BABBLE) << "Created package " << name << endLog;
 #endif
@@ -180,6 +182,7 @@ IniDBBuilderPackage::buildPackageSource (const std::string& path,
   cspv.requires = NULL;
   cspv.obsoletes = NULL;
   cspv.provides = NULL;
+  cspv.conflicts = NULL;
 
   /* set archive path, size, mirror, hash */
   cspv.archive = packagesource();
@@ -273,6 +276,18 @@ IniDBBuilderPackage::buildBeginProvides ()
   cbpv.provides = &providesNodeList;
 }
 
+void
+IniDBBuilderPackage::buildBeginConflicts ()
+{
+#if DEBUG
+  Log (LOG_BABBLE) << "Beginning of a conflicts statement" << endLog;
+#endif
+  currentSpec = NULL;
+  conflictsNodeList = PackageDepends();
+  currentNodeList = &conflictsNodeList;
+  cbpv.conflicts = &conflictsNodeList;
+}
+
 void
 IniDBBuilderPackage::buildSourceName (const std::string& _name)
 {
@@ -374,4 +389,5 @@ IniDBBuilderPackage::process ()
   cbpv.archive = packagesource();
   obsoletesNodeList = PackageDepends();
   providesNodeList = PackageDepends();
+  conflictsNodeList = PackageDepends();
 }
index f36a200fb0c564c61c08a6f0d2af50af16b76d71..79a864efe0eb8d6aeccfafe38ee3ed9cd76c6c43 100644 (file)
@@ -54,6 +54,7 @@ public:
   void buildBeginBuildDepends ();
   void buildBeginObsoletes ();
   void buildBeginProvides ();
+  void buildBeginConflicts ();
   void buildMessage (const std::string&, const std::string&);
   void buildSourceName (const std::string& );
   void buildSourceNameVersion (const std::string& );
@@ -85,6 +86,7 @@ private:
   PackageDepends dependsNodeList;
   PackageDepends obsoletesNodeList;
   PackageDepends providesNodeList;
+  PackageDepends conflictsNodeList;
   SolverPool::addPackageData cbpv;
   std::set <std::string> replace_versions;
 
index 6fcb6591cec6c77d668d9362e43a71b513b55f80..209152fcc192b0dcc748569d1ed289ecaf3fdc2f 100644 (file)
--- a/inilex.ll
+++ b/inilex.ll
@@ -128,6 +128,7 @@ B64 [a-zA-Z0-9_-]
 [dD]"epends2:"         return DEPENDS;
 [oO]"bsoletes:"        return OBSOLETES;
 [pP]"rovides:"         return PROVIDES;
+[cC]"onflicts:"        return CONFLICTS;
 
 ^{STR}":"              ignore_line ();
 
index 41771b1e768f3777ab7f433c43213d006e4facb2..f85fe13a379a5fc45a1d95b4b51ee66a33d25e55 100644 (file)
@@ -49,6 +49,7 @@ extern int yylineno;
 %token DEPENDS
 %token REQUIRES
 %token PROVIDES
+%token CONFLICTS
 %token T_PREV T_CURR T_TEST T_OTHER
 %token MD5 SHA512
 %token SOURCEPACKAGE
@@ -118,6 +119,7 @@ singleitem /* non-empty */
  | BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL
  | OBSOLETES { iniBuilder->buildBeginObsoletes(); } versionedpackagelist NL
  | PROVIDES { iniBuilder->buildBeginProvides(); } versionedpackagelist NL
+ | CONFLICTS { iniBuilder->buildBeginConflicts(); } versionedpackagelist NL
  | REPLACE_VERSIONS versionlist NL
 
  | MESSAGE STRING STRING NL    { iniBuilder->buildMessage ($2, $3); }
index 2c57145c5903af71980be86343cf54970fd90b7e..674d5767046190c8fe34e00dc17448b17773857b 100644 (file)
@@ -449,6 +449,8 @@ SolverPool::addPackage(const std::string& pkgname, const addPackageData &pkgdata
     solvable->requires = makedeps(repo, pkgdata.requires);
   if (pkgdata.obsoletes)
     solvable->obsoletes = makedeps(repo, pkgdata.obsoletes);
+  if (pkgdata.conflicts)
+    solvable->conflicts = makedeps(repo, pkgdata.conflicts);
 
   /* a solvable can also store arbitrary attributes not needed for dependency
      resolution, if we need them */
index 348bf2b94d20345dd505938ccec4449ce6042054..fc6889533706cfd46a610b4afb12796974b6977e 100644 (file)
--- a/libsolv.h
+++ b/libsolv.h
@@ -149,6 +149,7 @@ public:
     PackageDepends *requires;
     PackageDepends *obsoletes;
     PackageDepends *provides;
+    PackageDepends *conflicts;
   };
 
   SolvableVersion addPackage(const std::string& pkgname,
index 7b02f82962916927fd9fe283b40197c7a427670e..072b4193fbe47029a8cb396e0c92270ea91e2015 100644 (file)
@@ -135,6 +135,7 @@ packagedb::read ()
                   data.requires = NULL;
                   data.obsoletes = NULL;
                   data.provides = NULL;
+                  data.conflicts = NULL;
                   data.sdesc = "";
                   data.ldesc = "";
                   data.stability = TRUST_UNKNOWN;
@@ -208,6 +209,7 @@ packagedb::makeBase()
   data.ldesc = "Ficitious package that requires all Base packages";
   data.obsoletes = NULL;
   data.provides = NULL;
+  data.conflicts = NULL;
   data.stability = TRUST_CURR;
   // data.spkg = PackageSpecification();
   // data.spkg_id = packageversion();
This page took 0.111997 seconds and 5 git commands to generate.