Hi,

just found out that we forgot one rpm weak dependency.
"Enhances" is a waek version of "Supplements" and is heavyly used at SUSE.

4 patches add the support for it to 

001: spacewalk-backend
002: java (taskomatic)
003: web
004: schema

Patch 005 remove all cached metadata and trigger a regeneration for all 
channels.
Feel free to skip this patch if you think that this is not needed.

-- 
Regards

        Michael Calmer

--------------------------------------------------------------------------
Michael Calmer
SUSE LINUX Products GmbH, Maxfeldstr. 5, D-90409 Nuernberg
T: +49 (0) 911 74053 0
F: +49 (0) 911 74053575  - e-mail: michael.cal...@suse.com
--------------------------------------------------------------------------
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer
HRB 16746 (AG Nürnberg)
>From 6e249cd0e501de5f6efb00c4efb4680ad16f19ec Mon Sep 17 00:00:00 2001
From: Michael Calmer <m...@suse.de>
Date: Fri, 18 Oct 2013 13:47:55 +0200
Subject: [PATCH 1/5] add support for enhances rpm weak dependencies (backend)
 (bnc#846436)

---
 backend/satellite_tools/exporter/exportLib.py    |  2 ++
 backend/satellite_tools/spacewalk-remove-channel |  1 +
 backend/satellite_tools/xmlSource.py             |  5 +++++
 backend/server/importlib/backend.py              |  1 +
 backend/server/importlib/backendOracle.py        | 10 ++++++++++
 backend/server/importlib/headerSource.py         | 16 +++++++++++++---
 backend/server/importlib/importLib.py            |  1 +
 backend/server/importlib/mpmSource.py            |  1 +
 backend/server/importlib/packageImport.py        |  6 +++---
 backend/server/repomd/domain.py                  |  1 +
 backend/server/repomd/mapper.py                  | 14 ++++++++++++++
 backend/server/repomd/view.py                    |  4 ++++
 backend/server/rhnChannel.py                     | 17 ++++++++++++++++-
 13 files changed, 72 insertions(+), 7 deletions(-)

diff --git a/backend/satellite_tools/exporter/exportLib.py b/backend/satellite_tools/exporter/exportLib.py
index 5e14af2..aeb1c08 100644
--- a/backend/satellite_tools/exporter/exportLib.py
+++ b/backend/satellite_tools/exporter/exportLib.py
@@ -839,6 +839,8 @@ class _PackageDumper(BaseRowDumper):
                 'rhn-package-suggests-entry'],
             ['rhnPackageSupplements',  'rhn-package-supplements',
                 'rhn-package-supplements-entry'],
+            ['rhnPackageEnhances',  'rhn-package-enhances',
+                'rhn-package-enhances-entry'],
        ]
         for table_name, container_name, entry_name in mappings:
             h = rhnSQL.prepare("""
diff --git a/backend/satellite_tools/spacewalk-remove-channel b/backend/satellite_tools/spacewalk-remove-channel
index 53fd3d9..f3b5d2e 100755
--- a/backend/satellite_tools/spacewalk-remove-channel
+++ b/backend/satellite_tools/spacewalk-remove-channel
@@ -488,6 +488,7 @@ def _delete_rpm_group(packageIds):
         'rhnPackageRecommends',
         'rhnPackageSuggests',
         'rhnPackageSupplements',
+        'rhnPackageEnhances',
         'rhnServerNeededCache',
     ]
     deleteStatement = "delete from %s where package_id = :package_id"
diff --git a/backend/satellite_tools/xmlSource.py b/backend/satellite_tools/xmlSource.py
index 81fd3a5..6ce2c3d 100644
--- a/backend/satellite_tools/xmlSource.py
+++ b/backend/satellite_tools/xmlSource.py
@@ -603,6 +603,7 @@ class PackageItem(IncompletePackageItem):
         'rhn-package-recommends'    : 'recommends',
         'rhn-package-suggests'      : 'suggests',
         'rhn-package-supplements'   : 'supplements',
+        'rhn-package-enhances'      : 'enhances',
         'rhn-package-changelog'     : 'changelog',
     }
     tagMap.update(IncompletePackageItem.tagMap)
@@ -686,6 +687,10 @@ class SupplementsItem(DependencyItem):
     item_name = 'rhn-package-supplements-entry'
 addItem(SupplementsItem)
 
+class EnhancesItem(DependencyItem):
+    item_name = 'rhn-package-enhances-entry'
+addItem(EnhancesItem)
+
 class FileItem(BaseChecksummedItem):
     item_name = 'rhn-package-file'
     item_class = importLib.File
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py
index f907794..797079b 100644
--- a/backend/server/importlib/backend.py
+++ b/backend/server/importlib/backend.py
@@ -732,6 +732,7 @@ class Backend:
             'rhnPackageRecommends': 'package_id',
             'rhnPackageSuggests':   'package_id',
             'rhnPackageSupplements':'package_id',
+            'rhnPackageEnhances'   :'package_id',
             'rhnPackageFile':       'package_id',
             'rhnPackageChangeLogRec':  'package_id',
         }
diff --git a/backend/server/importlib/backendOracle.py b/backend/server/importlib/backendOracle.py
index acca10f..604192c 100644
--- a/backend/server/importlib/backendOracle.py
+++ b/backend/server/importlib/backendOracle.py
@@ -100,6 +100,16 @@ class OracleBackend(Backend):
             attribute   = 'supplements',
             map         = { 'sense' : 'flags', },
         ),
+        Table('rhnPackageEnhances',
+            fields      = {
+                'package_id'    : DBint(),
+                'capability_id' : DBint(),
+                'sense'         : DBint(),
+            },
+            pk          = ['package_id', 'capability_id', 'sense'],
+            attribute   = 'enhances',
+            map         = { 'sense' : 'flags', },
+        ),
         Table('rhnPackageChangeLogRec',
             fields      = {
                 'id'            : DBint(),
diff --git a/backend/server/importlib/headerSource.py b/backend/server/importlib/headerSource.py
index 7933d29..fc33691 100644
--- a/backend/server/importlib/headerSource.py
+++ b/backend/server/importlib/headerSource.py
@@ -118,6 +118,7 @@ class rpmBinaryPackage(Package, rpmPackage):
         'obsoletes'     : None,
         'suggests'      : None,
         'supplements'   : None,
+        'enhances'      : None,
         'recommends'    : None,
         'files'         : None,
         'changelog'     : None,
@@ -162,6 +163,7 @@ class rpmBinaryPackage(Package, rpmPackage):
             'conflicts' : rpmConflicts,
             'obsoletes' : rpmObsoletes,
             'supplements' : rpmSupplements,
+            'enhances'  : rpmEnhances,
             'suggests'  : rpmSuggests,
             'recommends'  : rpmRecommends,
         }
@@ -213,15 +215,15 @@ class rpmBinaryPackage(Package, rpmPackage):
                     hash[k] = v[i]
 
             # RPMSENSE_STRONG(1<<27) indicate recommends; if not set it is suggests only
-            if tag == 'recommends' and not(hash['flags'] & (1 << 27)):
+            if tag in ['recommends', 'supplements'] and not(hash['flags'] & (1 << 27)):
                 continue
-            if tag == 'suggests' and (hash['flags'] & (1 << 27)):
+            if tag in ['suggests', 'enhances'] and (hash['flags'] & (1 << 27)):
                 continue
             # Create a file
             obj = Class()
             # Fedora 10+ rpms have duplicate provides deps,
             # Lets clean em up before db inserts.
-            if tag in ['requires', 'provides', 'obsoletes', 'conflicts', 'recommends', 'suggests', 'supplements']:
+            if tag in ['requires', 'provides', 'obsoletes', 'conflicts', 'recommends', 'suggests', 'supplements', 'enhances']:
                 if not len(hash['name']):
                     continue
                 dep_nv = (hash['name'], hash['version'], hash['flags'])
@@ -352,6 +354,14 @@ class rpmSupplements(Dependency):
         'flags'     : 1161, #'enhancesflags',
     }
 
+class rpmEnhances(Dependency):
+    # More mappings
+    tagMap = {
+        'name'      : 1159, #'enhancesname',
+        'version'   : 1160, #'enhancesversion',
+        'flags'     : 1161, #'enhancesflags',
+    }
+
 class rpmConflicts(Dependency):
     # More mappings
     tagMap = {
diff --git a/backend/server/importlib/importLib.py b/backend/server/importlib/importLib.py
index 0eb497a..1a8e2eb 100644
--- a/backend/server/importlib/importLib.py
+++ b/backend/server/importlib/importLib.py
@@ -374,6 +374,7 @@ class Package(IncompletePackage):
         'obsoletes'         : [Dependency],
         'recommends'        : [Dependency],
         'supplements'       : [Dependency],
+        'enhances'          : [Dependency],
         'suggests'          : [Dependency],
         'changelog'         : [ChangeLog],
         'channels'          : [StringType],
diff --git a/backend/server/importlib/mpmSource.py b/backend/server/importlib/mpmSource.py
index 8717f0c..17f57d6 100644
--- a/backend/server/importlib/mpmSource.py
+++ b/backend/server/importlib/mpmSource.py
@@ -127,6 +127,7 @@ class mpmBinaryPackage(headerSource.rpmBinaryPackage):
             'obsoletes' : headerSource.rpmObsoletes,
             'recommends': headerSource.rpmRecommends,
             'supplements': headerSource.rpmSupplements,
+            'enhances'  : headerSource.rpmEnhances,
             'suggests'  : headerSource.rpmSuggests,
         }
 
diff --git a/backend/server/importlib/packageImport.py b/backend/server/importlib/packageImport.py
index df4e995..34cb33a 100644
--- a/backend/server/importlib/packageImport.py
+++ b/backend/server/importlib/packageImport.py
@@ -226,14 +226,14 @@ class PackageImport(ChannelPackageSubscription):
         # XXX
         package['copyright'] = self._fix_encoding(package['license'])
 
-        for tag in ('recommends', 'suggests', 'supplements'):
+        for tag in ('recommends', 'suggests', 'supplements', 'enhances'):
             if not package.has_key(tag) or type(package[tag]) != type([]):
                 # older spacewalk server do not export weak deps.
                 # lets create an empty list
                 package[tag] = []
 
         # Creates all the data structures needed to insert capabilities
-        for tag in ('provides', 'requires', 'conflicts', 'obsoletes', 'recommends', 'suggests', 'supplements'):
+        for tag in ('provides', 'requires', 'conflicts', 'obsoletes', 'recommends', 'suggests', 'supplements', 'enhances'):
             depList = package[tag]
             if type(depList) != type([]):
                 sys.stderr.write("!!! packageImport.PackageImport._processPackage: "
@@ -369,7 +369,7 @@ class PackageImport(ChannelPackageSubscription):
         package['checksum_id'] = self.checksums[(package['checksum_type'], package['checksum'])]
 
         # Postprocess the dependency information
-        for tag in ('provides', 'requires', 'conflicts', 'obsoletes', 'files', 'recommends', 'suggests', 'supplements'):
+        for tag in ('provides', 'requires', 'conflicts', 'obsoletes', 'files', 'recommends', 'suggests', 'supplements', 'enhances'):
             for entry in package[tag]:
                 nv = entry['capability']
                 entry['capability_id'] = self.capabilities[nv]
diff --git a/backend/server/repomd/domain.py b/backend/server/repomd/domain.py
index 7c5813b..c22f230 100644
--- a/backend/server/repomd/domain.py
+++ b/backend/server/repomd/domain.py
@@ -71,6 +71,7 @@ class Package:
         self.conflicts = []
         self.obsoletes = []
         self.supplements = []
+        self.enhances = []
         self.suggests = []
         self.recommends = []
 
diff --git a/backend/server/repomd/mapper.py b/backend/server/repomd/mapper.py
index b79386d..951b482 100644
--- a/backend/server/repomd/mapper.py
+++ b/backend/server/repomd/mapper.py
@@ -297,6 +297,18 @@ class SqlPackageMapper:
            and supp.capability_id = pc.id
         union all
         select
+           'enhances',
+           enh.sense,
+           pc.name,
+           pc.version
+        from
+           rhnPackageCapability pc,
+           rhnPackageEnhances enh
+        where
+           enh.package_id = :package_id
+           and enh.capability_id = pc.id
+        union all
+        select
            'suggests',
            sugg.sense,
            pc.name,
@@ -447,6 +459,8 @@ class SqlPackageMapper:
                 package.recommends.append(dep)
             elif item[0] == "supplements":
                 package.supplements.append(dep)
+            elif item[0] == "enhances":
+                package.enhances.append(dep)
             elif item[0] == "suggests":
                 package.suggests.append(dep)
             else:
diff --git a/backend/server/repomd/view.py b/backend/server/repomd/view.py
index 18c5b85..68ba1de 100644
--- a/backend/server/repomd/view.py
+++ b/backend/server/repomd/view.py
@@ -159,6 +159,10 @@ class PrimaryView(object):
         output.extend(self._get_deps(package.supplements))
         output.append("      </rpm:supplements>")
 
+        output.append("      <rpm:enhances>")
+        output.extend(self._get_deps(package.enhances))
+        output.append("      </rpm:enhances>")
+
         output.append("      <rpm:conflicts>")
         output.extend(self._get_deps(package.conflicts))
         output.append("      </rpm:conflicts>")
diff --git a/backend/server/rhnChannel.py b/backend/server/rhnChannel.py
index 2f2dfa8..f4678a4 100644
--- a/backend/server/rhnChannel.py
+++ b/backend/server/rhnChannel.py
@@ -1201,6 +1201,20 @@ def list_all_packages_complete_sql(channel_id):
        and supp.capability_id = pc.id
     union all
     select
+       supp.package_id,
+       'enhances' as capability_type,
+       enh.capability_id,
+       enh.sense,
+       pc.name,
+       pc.version
+    from
+       rhnPackageEnhances enh,
+       rhnPackageCapability pc
+    where
+       enh.package_id = :package_id
+       and enh.capability_id = pc.id
+    union all
+    select
        pcon.package_id,
        'conflicts' as capability_type,
        pcon.capability_id,
@@ -1245,6 +1259,7 @@ def list_all_packages_complete_sql(channel_id):
         pkgi['recommends'] = []
         pkgi['suggests'] = []
         pkgi['supplements'] = []
+        pkgi['enhances'] = []
         g.execute(package_id = pkgi["id"])
         deps = g.fetchall_dict() or []
         for item in deps:
@@ -1262,7 +1277,7 @@ def list_all_packages_complete_sql(channel_id):
     # process the results
     ret = map(lambda a: (a["name"], a["version"], a["release"], a["epoch"],
                          a["arch"], a["package_size"], a['provides'],
-                         a['requires'], a['conflicts'], a['obsoletes'], a['recommends'], a['suggests'], a['supplements']),
+                         a['requires'], a['conflicts'], a['obsoletes'], a['recommends'], a['suggests'], a['supplements'], a['enhances']),
               __stringify(ret))
     return ret
 
-- 
1.8.1.4

>From 11610906b1308dc788d2c2a89ba3f95a5da79a62 Mon Sep 17 00:00:00 2001
From: Michael Calmer <m...@suse.de>
Date: Fri, 18 Oct 2013 13:49:02 +0200
Subject: [PATCH 2/5] add support for enhances rpm weak dependency (java)
 (bnc#846436)

---
 .../com/redhat/rhn/common/db/datasource/xml/Task_queries.xml   | 10 ++++++++++
 .../code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java |  3 +++
 .../redhat/rhn/taskomatic/task/repomd/PrimaryXmlWriter.java    |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
index c73ad00..a55bd09 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
@@ -682,6 +682,16 @@ where rhnChannelErrata.errata_id = rhnErrataPackage.errata_id
    </query>
 </mode>
 
+<mode name="repomdgenerator_capability_enhances"
+    class="com.redhat.rhn.frontend.dto.PackageCapabilityDto">
+   <query params="package_id">
+  SELECT pkgcap.id, pkgcap.name, pkgcap.version, pkgp.sense
+    FROM rhnPackageEnhances pkgp, rhnPackageCapability pkgcap
+   WHERE pkgp.capability_id = pkgcap.id
+     AND pkgp.package_id = :package_id
+   </query>
+</mode>
+
 <mode name="repomdgenerator_package_changelog"
     class="com.redhat.rhn.frontend.dto.PackageChangelogDto">
    <query params="package_id">
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java b/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
index ba47c52..fada40a 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
@@ -157,6 +157,9 @@ public class TaskConstants {
     public static final String TASK_QUERY_REPOMD_GENERATOR_CAPABILITY_SUPPLEMENTS =
         "repomdgenerator_capability_supplements";
 
+    public static final String TASK_QUERY_REPOMD_GENERATOR_CAPABILITY_ENHANCES =
+        "repomdgenerator_capability_enhances";
+
     public static final String TASK_QUERY_REPOMD_GENERATOR_PACKAGE_CHANGELOG =
         "repomdgenerator_package_changelog";
 
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/PrimaryXmlWriter.java b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/PrimaryXmlWriter.java
index 20f7f73..74a9134 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/PrimaryXmlWriter.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/PrimaryXmlWriter.java
@@ -263,6 +263,9 @@ public class PrimaryXmlWriter extends RepomdWriter {
         addPackageDepData(
                 TaskConstants.TASK_QUERY_REPOMD_GENERATOR_CAPABILITY_SUPPLEMENTS,
                 pkgDto.getId(), "supplements", localHandler);
+        addPackageDepData(
+                TaskConstants.TASK_QUERY_REPOMD_GENERATOR_CAPABILITY_ENHANCES,
+                pkgDto.getId(), "enhances", localHandler);
     }
 
     /**
-- 
1.8.1.4

>From 2979518a44e9a4f3bc7930e3f237530b478334ff Mon Sep 17 00:00:00 2001
From: Michael Calmer <m...@suse.de>
Date: Fri, 18 Oct 2013 13:49:55 +0200
Subject: [PATCH 3/5] add support for enhances rpm weak dependency (web)
 (bnc#846436)

---
 .../network/software/packages/dependencies.pxt     |  3 +++
 web/modules/rhn/RHN/DB/Package.pm                  | 27 ++++++++++++++++++++++
 web/modules/sniglets/Sniglets/Packages.pm          |  2 +-
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/web/html/network/software/packages/dependencies.pxt b/web/html/network/software/packages/dependencies.pxt
index 0a7464b..b3e440b 100644
--- a/web/html/network/software/packages/dependencies.pxt
+++ b/web/html/network/software/packages/dependencies.pxt
@@ -35,6 +35,9 @@
     <h2>Supplements</h2>
     <p>{package_supplements}</p>
 
+    <h2>Enhances</h2>
+    <p>{package_enhances}</p>
+
 </rhn-package-dependencies>
 
   </grail-canvas-template>
diff --git a/web/modules/rhn/RHN/DB/Package.pm b/web/modules/rhn/RHN/DB/Package.pm
index dc58556..2726d9b 100644
--- a/web/modules/rhn/RHN/DB/Package.pm
+++ b/web/modules/rhn/RHN/DB/Package.pm
@@ -423,6 +423,33 @@ EOQ
   return @ret;
 }
 
+sub enhances {
+  my $self = shift;
+
+  my @ret;
+  my $dbh = RHN::DB->connect;
+  my $query;
+  my $sth;
+
+  $query = <<EOQ;
+SELECT  DISTINCT C.name, C.version, P.sense, UPPER(C.name) AS name_upper
+  FROM  rhnPackageCapability C, rhnPackageEnhances P
+ WHERE  P.package_id = ?
+   AND  P.capability_id = C.id
+ORDER BY name_upper, C.version
+EOQ
+
+  $sth = $dbh->prepare($query);
+  $sth->execute($self->id);
+
+  my @columns;
+  while(@columns = $sth->fetchrow) {
+    push @ret, [ @columns ];
+  }
+
+  return @ret;
+}
+
 # don't know what tables these next 2 will need to talk to...
 sub obsoletes {
   my $self = shift;
diff --git a/web/modules/sniglets/Sniglets/Packages.pm b/web/modules/sniglets/Sniglets/Packages.pm
index 2f5c408..105a63c 100644
--- a/web/modules/sniglets/Sniglets/Packages.pm
+++ b/web/modules/sniglets/Sniglets/Packages.pm
@@ -94,7 +94,7 @@ sub package_dependencies {
   $package = RHN::Package->lookup(-id => $pid);
   $pxt->pnotes(package_name => $package->nvre);
 
-  foreach my $dependency (qw/requires provides obsoletes conflicts recommends suggests supplements/) {
+  foreach my $dependency (qw/requires provides obsoletes conflicts recommends suggests supplements enhances/) {
     my @list = $package->$dependency();
     my $dep_list;
     foreach my $dep (@list) {
-- 
1.8.1.4

>From dc9599f8f0daf191564514d37140c16521f2bb1b Mon Sep 17 00:00:00 2001
From: Michael Calmer <m...@suse.de>
Date: Fri, 18 Oct 2013 13:52:14 +0200
Subject: [PATCH 4/5] add support for enhances rpm weak dependency (schema)
 (bnc#846436)

---
 .../spacewalk/common/tables/rhnPackageEnhances.sql | 39 ++++++++++++++++++++++
 schema/spacewalk/common/tables/tables.deps         |  1 +
 .../oracle/triggers/rhnPackageEnhances.sql         | 22 ++++++++++++
 .../postgres/triggers/rhnPackageEnhances.sql       | 27 +++++++++++++++
 .../030-rhnPackageEnhances.sql                     | 39 ++++++++++++++++++++++
 .../031-rhnPackageEnhances.sql.oracle              | 22 ++++++++++++
 .../031-rhnPackageEnhances.sql.postgresql          | 27 +++++++++++++++
 .../032-fix-supplements-enhances.sql.oracle        |  9 +++++
 .../032-fix-supplements-enhances.sql.postgresql    | 10 ++++++
 9 files changed, 196 insertions(+)
 create mode 100644 schema/spacewalk/common/tables/rhnPackageEnhances.sql
 create mode 100644 schema/spacewalk/oracle/triggers/rhnPackageEnhances.sql
 create mode 100644 schema/spacewalk/postgres/triggers/rhnPackageEnhances.sql
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/030-rhnPackageEnhances.sql
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.oracle
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.postgresql
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.oracle
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.postgresql

diff --git a/schema/spacewalk/common/tables/rhnPackageEnhances.sql b/schema/spacewalk/common/tables/rhnPackageEnhances.sql
new file mode 100644
index 0000000..d6787f7
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnPackageEnhances.sql
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2013 Novell
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+CREATE TABLE rhnPackageEnhances
+(
+    package_id     NUMBER NOT NULL
+                       CONSTRAINT rhn_pkg_enh_package_fk
+                           REFERENCES rhnPackage (id)
+                           ON DELETE CASCADE,
+    capability_id  NUMBER NOT NULL
+                       CONSTRAINT rhn_pkg_enh_capability_fk
+                           REFERENCES rhnPackageCapability (id),
+    sense          NUMBER
+                       DEFAULT (0) NOT NULL,
+    created        timestamp with local time zone
+                       DEFAULT (current_timestamp) NOT NULL,
+    modified       timestamp with local time zone
+                       DEFAULT (current_timestamp) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE UNIQUE INDEX rhn_pkg_enh_pid_cid_s_uq
+    ON rhnPackageEnhances (package_id, capability_id, sense)
+    TABLESPACE [[4m_tbs]];
+
+CREATE INDEX rhn_pkg_enh_cid_idx
+    ON rhnPackageEnhances (capability_id)
+    NOLOGGING
+    TABLESPACE [[4m_tbs]];
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 3594eca..1a71319 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -125,6 +125,7 @@ rhnPackageProvides             :: rhnPackage rhnPackageCapability
 rhnPackageRequires             :: rhnPackage rhnPackageCapability
 rhnPackageSuggests             :: rhnPackage rhnPackageCapability
 rhnPackageSupplements          :: rhnPackage rhnPackageCapability
+rhnPackageEnhances             :: rhnPackage rhnPackageCapability
 rhnPackageRecommends           :: rhnPackage rhnPackageCapability
 rhnPackageSource               :: web_customer rhnSourceRPM rhnFile rhnPackageGroup \
                                   rhnChecksum
diff --git a/schema/spacewalk/oracle/triggers/rhnPackageEnhances.sql b/schema/spacewalk/oracle/triggers/rhnPackageEnhances.sql
new file mode 100644
index 0000000..765861c
--- /dev/null
+++ b/schema/spacewalk/oracle/triggers/rhnPackageEnhances.sql
@@ -0,0 +1,22 @@
+
+--
+-- Copyright (c) 2013 Novell, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+create or replace trigger
+rhn_pkg_enh_mod_trig
+before insert or update on rhnPackageEnhances
+for each row
+begin
+        :new.modified := current_timestamp;
+end;
+/
+show errors
diff --git a/schema/spacewalk/postgres/triggers/rhnPackageEnhances.sql b/schema/spacewalk/postgres/triggers/rhnPackageEnhances.sql
new file mode 100644
index 0000000..4890e5f
--- /dev/null
+++ b/schema/spacewalk/postgres/triggers/rhnPackageEnhances.sql
@@ -0,0 +1,27 @@
+-- oracle equivalent source sha1 b31ae5f05f77f3e6fb83c8a7005e49e0a65424e6
+--
+-- Copyright (c) 2013 Novell, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+create or replace function rhn_pkg_enh_mod_trig_fun() returns trigger as
+$$
+begin
+	new.modified := current_timestamp;
+
+	return new;
+end;
+$$ language plpgsql;
+
+create trigger
+rhn_pkg_enh_mod_trig
+before insert or update on rhnPackageEnhances
+for each row
+execute procedure rhn_pkg_enh_mod_trig_fun();
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/030-rhnPackageEnhances.sql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/030-rhnPackageEnhances.sql
new file mode 100644
index 0000000..d6787f7
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/030-rhnPackageEnhances.sql
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2013 Novell
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+CREATE TABLE rhnPackageEnhances
+(
+    package_id     NUMBER NOT NULL
+                       CONSTRAINT rhn_pkg_enh_package_fk
+                           REFERENCES rhnPackage (id)
+                           ON DELETE CASCADE,
+    capability_id  NUMBER NOT NULL
+                       CONSTRAINT rhn_pkg_enh_capability_fk
+                           REFERENCES rhnPackageCapability (id),
+    sense          NUMBER
+                       DEFAULT (0) NOT NULL,
+    created        timestamp with local time zone
+                       DEFAULT (current_timestamp) NOT NULL,
+    modified       timestamp with local time zone
+                       DEFAULT (current_timestamp) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE UNIQUE INDEX rhn_pkg_enh_pid_cid_s_uq
+    ON rhnPackageEnhances (package_id, capability_id, sense)
+    TABLESPACE [[4m_tbs]];
+
+CREATE INDEX rhn_pkg_enh_cid_idx
+    ON rhnPackageEnhances (capability_id)
+    NOLOGGING
+    TABLESPACE [[4m_tbs]];
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.oracle
new file mode 100644
index 0000000..765861c
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.oracle
@@ -0,0 +1,22 @@
+
+--
+-- Copyright (c) 2013 Novell, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+create or replace trigger
+rhn_pkg_enh_mod_trig
+before insert or update on rhnPackageEnhances
+for each row
+begin
+        :new.modified := current_timestamp;
+end;
+/
+show errors
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.postgresql
new file mode 100644
index 0000000..4890e5f
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/031-rhnPackageEnhances.sql.postgresql
@@ -0,0 +1,27 @@
+-- oracle equivalent source sha1 b31ae5f05f77f3e6fb83c8a7005e49e0a65424e6
+--
+-- Copyright (c) 2013 Novell, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+--
+
+create or replace function rhn_pkg_enh_mod_trig_fun() returns trigger as
+$$
+begin
+	new.modified := current_timestamp;
+
+	return new;
+end;
+$$ language plpgsql;
+
+create trigger
+rhn_pkg_enh_mod_trig
+before insert or update on rhnPackageEnhances
+for each row
+execute procedure rhn_pkg_enh_mod_trig_fun();
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.oracle
new file mode 100644
index 0000000..6609897
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.oracle
@@ -0,0 +1,9 @@
+
+insert into rhnPackageEnhances (package_id, capability_id, sense)
+  select s.package_id, s.capability_id, s.sense
+    from rhnPackageSupplements s
+   where BITAND(s.sense, 134217728) != 134217728;
+-- 134217728 == (1 << 27) STRONG FLAG in RPM
+
+delete from rhnPackageSupplements
+ where BITAND(sense, 134217728) != 134217728;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.postgresql
new file mode 100644
index 0000000..d563b23
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/032-fix-supplements-enhances.sql.postgresql
@@ -0,0 +1,10 @@
+-- oracle equivalent source sha1 9f3cf822ce526d1396838ceaf5fb952d37704611
+
+insert into rhnPackageEnhances (package_id, capability_id, sense)
+  select s.package_id, s.capability_id, s.sense
+    from rhnPackageSupplements s
+   where (s.sense & 134217728) != 134217728;
+-- 134217728 == (1 << 27) STRONG FLAG in RPM
+
+delete from rhnPackageSupplements
+ where (sense & 134217728) != 134217728;
-- 
1.8.1.4

>From f79046ea94a1447543f9e4158d0be50bb57dac79 Mon Sep 17 00:00:00 2001
From: Michael Calmer <m...@suse.de>
Date: Fri, 18 Oct 2013 13:56:24 +0200
Subject: [PATCH 5/5] Regenerate the metadata for rpm enhances dependency
 (bnc#846436)

---
 .../033-delete-cached-repodata.sql                                | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/033-delete-cached-repodata.sql

diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/033-delete-cached-repodata.sql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/033-delete-cached-repodata.sql
new file mode 100644
index 0000000..5f290f5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/033-delete-cached-repodata.sql
@@ -0,0 +1,8 @@
+delete from rhnPackageRepodata;
+
+insert into rhnRepoRegenQueue (id, CHANNEL_LABEL, REASON, FORCE)
+(select sequence_nextval('rhn_repo_regen_queue_id_seq'),
+        C.label,
+        'package summary modification',
+        'Y'
+   from rhnChannel C);
-- 
1.8.1.4

_______________________________________________
Spacewalk-devel mailing list
Spacewalk-devel@redhat.com
https://www.redhat.com/mailman/listinfo/spacewalk-devel

Reply via email to