summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-devtools/python/python-smartpm/smart-attempt.patch134
1 files changed, 121 insertions, 13 deletions
diff --git a/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch
index 0d603d3d1b..113618255f 100644
--- a/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch
+++ b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch
@@ -1,18 +1,27 @@
1Add a mechanism to attempt the install operation, w/o failing. 1From 7ee23804a06f81476cc2b31a6db11b52d7af764e Mon Sep 17 00:00:00 2001
2From: Mark Hatle <mark.hatle@windriver.com>
3Date: Mon, 20 Jan 2014 14:30:52 +0000
4Subject: [PATCH] Add mechanism to attempt install without failing
2 5
3For complementary and 'attemptonly' packages, we need a way to instruct smart to 6In OpenEmbedded, for complementary and 'attemptonly' package processing,
4try to install, but ignore any failures. 7we need a way to instruct smart to try to install, but ignore any
8failures (usually conflicts).
5 9
6This option only works for the install operation. 10This option only works for the install operation.
7 11
8Upstream-Status: Pending 12Upstream-Status: Pending
9 13
10Signed-off-by: Mark Hatle <mark.hatle@windriver.com> 14Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
15Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
16---
17 smart/commands/install.py | 5 ++++
18 smart/transaction.py | 65 +++++++++++++++++++++++++++++++++++------------
19 2 files changed, 54 insertions(+), 16 deletions(-)
11 20
12Index: smart-1.4.1/smart/commands/install.py 21diff --git a/smart/commands/install.py b/smart/commands/install.py
13=================================================================== 22index 590222c..6ef9682 100644
14--- smart-1.4.1.orig/smart/commands/install.py 23--- a/smart/commands/install.py
15+++ smart-1.4.1/smart/commands/install.py 24+++ b/smart/commands/install.py
16@@ -50,6 +50,8 @@ def option_parser(): 25@@ -50,6 +50,8 @@ def option_parser():
17 parser = OptionParser(usage=USAGE, 26 parser = OptionParser(usage=USAGE,
18 description=DESCRIPTION, 27 description=DESCRIPTION,
@@ -32,11 +41,106 @@ Index: smart-1.4.1/smart/commands/install.py
32 if opts.explain: 41 if opts.explain:
33 sysconf.set("explain-changesets", True, soft=True) 42 sysconf.set("explain-changesets", True, soft=True)
34 43
35Index: smart-1.4.1/smart/transaction.py 44diff --git a/smart/transaction.py b/smart/transaction.py
36=================================================================== 45index 5730a42..e3e61c6 100644
37--- smart-1.4.1.orig/smart/transaction.py 46--- a/smart/transaction.py
38+++ smart-1.4.1/smart/transaction.py 47+++ b/smart/transaction.py
39@@ -1216,9 +1216,17 @@ class Transaction(object): 48@@ -555,6 +555,8 @@ class Transaction(object):
49 changeset.set(pkg, INSTALL)
50 isinst = changeset.installed
51
52+ attempt = sysconf.has("attempt-install", soft=True)
53+
54 # Remove packages conflicted by this one.
55 for cnf in pkg.conflicts:
56 for prv in cnf.providedby:
57@@ -564,11 +566,16 @@ class Transaction(object):
58 if not isinst(prvpkg):
59 locked[prvpkg] = (LOCKED_CONFLICT_BY, pkg)
60 continue
61- if prvpkg in locked:
62- raise Failed, _("Can't install %s: conflicted package "
63- "%s is locked") % (pkg, prvpkg)
64- self._remove(prvpkg, changeset, locked, pending, depth)
65- pending.append((PENDING_UPDOWN, prvpkg))
66+ if attempt:
67+ del changeset[pkg]
68+ raise Failed, _("Can't install %s: it conflicts with package "
69+ "%s") % (pkg, prvpkg)
70+ else:
71+ if prvpkg in locked:
72+ raise Failed, _("Can't install %s: conflicted package "
73+ "%s is locked") % (pkg, prvpkg)
74+ self._remove(prvpkg, changeset, locked, pending, depth)
75+ pending.append((PENDING_UPDOWN, prvpkg))
76
77 # Remove packages conflicting with this one.
78 for prv in pkg.provides:
79@@ -579,12 +586,18 @@ class Transaction(object):
80 if not isinst(cnfpkg):
81 locked[cnfpkg] = (LOCKED_CONFLICT, pkg)
82 continue
83- if cnfpkg in locked:
84+ if attempt:
85+ del changeset[pkg]
86 raise Failed, _("Can't install %s: it's conflicted by "
87- "the locked package %s") \
88- % (pkg, cnfpkg)
89- self._remove(cnfpkg, changeset, locked, pending, depth)
90- pending.append((PENDING_UPDOWN, cnfpkg))
91+ "the package %s") \
92+ % (pkg, cnfpkg)
93+ else:
94+ if cnfpkg in locked:
95+ raise Failed, _("Can't install %s: it's conflicted by "
96+ "the locked package %s") \
97+ % (pkg, cnfpkg)
98+ self._remove(cnfpkg, changeset, locked, pending, depth)
99+ pending.append((PENDING_UPDOWN, cnfpkg))
100
101 # Remove packages with the same name that can't
102 # coexist with this one.
103@@ -594,10 +607,15 @@ class Transaction(object):
104 if not isinst(namepkg):
105 locked[namepkg] = (LOCKED_NO_COEXIST, pkg)
106 continue
107- if namepkg in locked:
108+ if attempt:
109+ del changeset[pkg]
110 raise Failed, _("Can't install %s: it can't coexist "
111 "with %s") % (pkg, namepkg)
112- self._remove(namepkg, changeset, locked, pending, depth)
113+ else:
114+ if namepkg in locked:
115+ raise Failed, _("Can't install %s: it can't coexist "
116+ "with %s") % (pkg, namepkg)
117+ self._remove(namepkg, changeset, locked, pending, depth)
118
119 # Install packages required by this one.
120 for req in pkg.requires + pkg.recommends:
121@@ -1176,6 +1194,8 @@ class Transaction(object):
122
123 self._policy.runStarting()
124
125+ attempt = sysconf.has("attempt-install", soft=True)
126+
127 try:
128 changeset = self._changeset.copy()
129 isinst = changeset.installed
130@@ -1190,7 +1210,11 @@ class Transaction(object):
131 locked[pkg] = (LOCKED_KEEP, None)
132 elif op is INSTALL:
133 if not isinst(pkg) and pkg in locked:
134- raise Failed, _("Can't install %s: it's locked") % pkg
135+ if attempt:
136+ iface.warning(_("Can't install %s: it's locked") % pkg)
137+ del changeset[pkg]
138+ else:
139+ raise Failed, _("Can't install %s: it's locked") % pkg
140 changeset.set(pkg, INSTALL)
141 locked[pkg] = (LOCKED_INSTALL, None)
142 elif op is REMOVE:
143@@ -1216,9 +1240,18 @@ class Transaction(object):
40 else: 144 else:
41 op = REMOVE 145 op = REMOVE
42 if op is INSTALL or op is REINSTALL: 146 if op is INSTALL or op is REINSTALL:
@@ -48,7 +152,8 @@ Index: smart-1.4.1/smart/transaction.py
48+ if pkg in changeset: 152+ if pkg in changeset:
49+ changeset.setRequested(pkg, True) 153+ changeset.setRequested(pkg, True)
50+ except Failed, e: 154+ except Failed, e:
51+ if sysconf.has("attempt-install", soft=True): 155+ if attempt:
156+ iface.warning(_("Can't install %s: %s") % (pkg, e))
52+ if pkg in changeset: 157+ if pkg in changeset:
53+ del changeset[pkg] 158+ del changeset[pkg]
54+ continue 159+ continue
@@ -57,3 +162,6 @@ Index: smart-1.4.1/smart/transaction.py
57 elif op is REMOVE: 162 elif op is REMOVE:
58 self._remove(pkg, changeset, locked, pending) 163 self._remove(pkg, changeset, locked, pending)
59 elif op is UPGRADE: 164 elif op is UPGRADE:
165--
1661.8.4.2
167