Patchwork [02/11] python-smartpm: Add support for excluding package from the install

login
register
mail settings
Submitter Mark Hatle
Date Aug. 14, 2013, 8:30 p.m.
Message ID <1376512209-11622-3-git-send-email-mark.hatle@windriver.com>
Download mbox | patch
Permalink /patch/55631/
State Accepted
Commit 02c96776de37e8507351f0162a76b082c0ed183c
Headers show

Comments

Mark Hatle - Aug. 14, 2013, 8:30 p.m.
Update smart to support a mechanism for excluding specific packages from the
install process.  An error will be generated if this package is required.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 .../smart-flag-exclude-packages.patch              | 70 ++++++++++++++++++++++
 .../python/python-smartpm_1.4.1.bb                 |  1 +
 2 files changed, 71 insertions(+)
 create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-flag-exclude-packages.patch

Patch

diff --git a/meta/recipes-devtools/python/python-smartpm/smart-flag-exclude-packages.patch b/meta/recipes-devtools/python/python-smartpm/smart-flag-exclude-packages.patch
new file mode 100644
index 0000000..21a2874
--- /dev/null
+++ b/meta/recipes-devtools/python/python-smartpm/smart-flag-exclude-packages.patch
@@ -0,0 +1,70 @@ 
+Add exclude-packages flag support
+
+Allow configuring specific packages to be excluded.  This will allow
+users to specify things NOT to install, and if they are attempted an
+error will be generated.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+Index: smart-1.4.1/smart/const.py
+===================================================================
+--- smart-1.4.1.orig/smart/const.py
++++ smart-1.4.1/smart/const.py
+@@ -70,6 +70,7 @@ DATADIR     = "/var/lib/smart/"
+ USERDATADIR = "~/.smart/"
+ CONFFILE    = "config"
+ 
++LOCKED_EXCLUDE     = Enum('LOCKED_EXCLUDE')
+ LOCKED_INSTALL     = Enum('LOCKED_INSTALL')
+ LOCKED_REMOVE      = Enum('LOCKED_REMOVE')
+ LOCKED_CONFLICT    = Enum('LOCKED_CONFLICT')
+Index: smart-1.4.1/smart/transaction.py
+===================================================================
+--- smart-1.4.1.orig/smart/transaction.py
++++ smart-1.4.1/smart/transaction.py
+@@ -19,7 +19,7 @@
+ # along with Smart Package Manager; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ #
+-from smart.const import INSTALL, REMOVE, UPGRADE, FIX, REINSTALL, KEEP, LOCKED_INSTALL, LOCKED_CONFLICT, LOCKED_CONFLICT_BY, LOCKED_NO_COEXIST, LOCKED_SYSCONF, LOCKED_REMOVE
++from smart.const import INSTALL, REMOVE, UPGRADE, FIX, REINSTALL, KEEP, LOCKED_EXCLUDE, LOCKED_INSTALL, LOCKED_CONFLICT, LOCKED_CONFLICT_BY, LOCKED_NO_COEXIST, LOCKED_SYSCONF, LOCKED_REMOVE
+ from smart.cache import PreRequires, Package
+ from smart import *
+ 
+@@ -29,7 +29,9 @@ def lock_reason(pkg, lockvalue):
+     except TypeError:
+         reason = None
+         lockvalue = None
+-    if reason == LOCKED_INSTALL:
++    if reason == LOCKED_EXCLUDE:
++        return _("%s is to be excluded") % pkg
++    elif reason == LOCKED_INSTALL:
+         return _("%s is to be installed") % pkg
+     elif reason == LOCKED_CONFLICT:
+         return _("%s conflicts with %s") % (pkg, otherpkg)
+@@ -210,6 +212,10 @@ class Policy(object):
+                 self._sysconflocked.append(pkg)
+                 self._locked[pkg] = (LOCKED_SYSCONF, None)
+ 
++        for pkg in pkgconf.filterByFlag("exclude-packages", cache.getPackages()):
++            if pkg not in self._locked:
++                self._locked[pkg] = (LOCKED_EXCLUDE, None)
++
+     def runFinished(self):
+         self._priorities.clear()
+         for pkg in self._sysconflocked:
+Index: smart-1.4.1/smart/commands/flag.py
+===================================================================
+--- smart-1.4.1.orig/smart/commands/flag.py
++++ smart-1.4.1/smart/commands/flag.py
+@@ -47,6 +47,8 @@ Currently known flags are:
+   multi-version - Flagged packages may have more than one version
+                   installed in the system at the same time
+                   (backend dependent).
++  exclude-packages - Flagged packages will be excluded, if they are
++                  required, an error will be generated.
+   ignore-recommends - Flagged packages will not be installed, if
+                   they are only recommended by a package to be
+                   installed rather than required.
diff --git a/meta/recipes-devtools/python/python-smartpm_1.4.1.bb b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
index 70ac8bf..b3b471a 100644
--- a/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
+++ b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
@@ -28,6 +28,7 @@  SRC_URI = "\
           file://smart-channelsdir.patch \
           file://smart-conflict-provider.patch \
           file://smart-flag-ignore-recommends.patch \
+          file://smart-flag-exclude-packages.patch \
           "
 
 SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6"