diff options
Diffstat (limited to 'meta/recipes-devtools/python/python-smartpm/smart-attempt.patch')
-rw-r--r-- | meta/recipes-devtools/python/python-smartpm/smart-attempt.patch | 164 |
1 files changed, 59 insertions, 105 deletions
diff --git a/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch index 82d2e6cf31..ec98e03c0a 100644 --- a/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch +++ b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch | |||
@@ -18,38 +18,68 @@ Upstream-Status: Pending | |||
18 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | 18 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> |
19 | Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> | 19 | Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> |
20 | --- | 20 | --- |
21 | smart.py | 5 +++- | 21 | backends/rpm/pm.py | 35 ++++++++++++++++++++++++++++++++++- |
22 | smart/commands/install.py | 5 ++++ | 22 | transaction.py | 50 +++++++++++++++++++++++++++++++++++++------------- |
23 | smart/transaction.py | 65 +++++++++++++++++++++++++++++++++++------------ | 23 | 2 files changed, 71 insertions(+), 14 deletions(-) |
24 | 3 files changed, 58 insertions(+), 17 deletions(-) | ||
25 | 24 | ||
26 | Index: smart-1.4.1/smart/commands/install.py | 25 | diff --git a/smart/backends/rpm/pm.py b/smart/backends/rpm/pm.py |
27 | =================================================================== | 26 | index 9bbd952..ba6405a 100644 |
28 | --- smart-1.4.1.orig/smart/commands/install.py | 27 | --- a/smart/backends/rpm/pm.py |
29 | +++ smart-1.4.1/smart/commands/install.py | 28 | +++ b/smart/backends/rpm/pm.py |
30 | @@ -50,6 +50,8 @@ def option_parser(): | 29 | @@ -241,15 +241,48 @@ class RPMPackageManager(PackageManager): |
31 | parser = OptionParser(usage=USAGE, | 30 | cb = RPMCallback(prog, upgradednames) |
32 | description=DESCRIPTION, | 31 | cb.grabOutput(True) |
33 | examples=EXAMPLES) | 32 | probs = None |
34 | + parser.add_option("--attempt", action="store_true", | 33 | + retry = 0 |
35 | + help=_("attempt to install packages, ignore failures")) | 34 | try: |
36 | parser.add_option("--stepped", action="store_true", | 35 | probs = ts.run(cb, None) |
37 | help=_("split operation in steps")) | 36 | finally: |
38 | parser.add_option("--urls", action="store_true", | 37 | del getTS.ts |
39 | @@ -80,6 +82,9 @@ def main(ctrl, opts): | 38 | cb.grabOutput(False) |
40 | if not opts.args: | 39 | + if probs and sysconf.has("attempt-install", soft=True): |
41 | raise Error, _("no package(s) given") | 40 | + def remove_conflict(pkgNEVR): |
42 | 41 | + for key in changeset.keys(): | |
43 | + if opts.attempt: | 42 | + if pkgNEVR == str(key): |
44 | + sysconf.set("attempt-install", True, soft=True) | 43 | + del changeset[key] |
44 | + del pkgpaths[key] | ||
45 | + iface.warning("Removing %s due to file %s conflicting with %s" % (pkgNEVR, fname, altNEVR)) | ||
46 | + break | ||
47 | + | ||
48 | + retry = 1 | ||
49 | + for prob in probs: | ||
50 | + if prob[1][0] == rpm.RPMPROB_NEW_FILE_CONFLICT: | ||
51 | + msg = prob[0].split() | ||
52 | + fname = msg[1] | ||
53 | + pkgNEVR = msg[7] | ||
54 | + altNEVR = msg[9] | ||
55 | + pkgNEVR = pkgNEVR.rsplit('.', 1)[0] + '@' + pkgNEVR.rsplit('.', 1)[1] | ||
56 | + altNEVR = altNEVR.rsplit('.', 1)[0] + '@' + altNEVR.rsplit('.', 1)[1] | ||
57 | + remove_conflict(pkgNEVR) | ||
58 | + elif prob[1][0] == rpm.RPMPROB_FILE_CONFLICT: | ||
59 | + msg = prob[0].split() | ||
60 | + fname = msg[1] | ||
61 | + pkgNEVR = msg[5] | ||
62 | + altNEVR = msg[11] | ||
63 | + pkgNEVR = pkgNEVR.rsplit('.', 1)[0] + '@' + pkgNEVR.rsplit('.', 1)[1] | ||
64 | + altNEVR = altNEVR.rsplit('.', 1)[0] + '@' + altNEVR.rsplit('.', 1)[1] | ||
65 | + remove_conflict(pkgNEVR) | ||
66 | + else: | ||
67 | + retry = 0 | ||
45 | + | 68 | + |
46 | if opts.explain: | 69 | prog.setDone() |
47 | sysconf.set("explain-changesets", True, soft=True) | 70 | - if probs: |
71 | + if probs and (not retry): | ||
72 | raise Error, "\n".join([x[0] for x in probs]) | ||
73 | prog.stop() | ||
74 | + if retry and len(changeset): | ||
75 | + self.commit(changeset, pkgpaths) | ||
48 | 76 | ||
49 | Index: smart-1.4.1/smart/transaction.py | 77 | class RPMCallback: |
50 | =================================================================== | 78 | def __init__(self, prog, upgradednames): |
51 | --- smart-1.4.1.orig/smart/transaction.py | 79 | diff --git a/smart/transaction.py b/smart/transaction.py |
52 | +++ smart-1.4.1/smart/transaction.py | 80 | index 4b90cb7..3e043e9 100644 |
81 | --- a/smart/transaction.py | ||
82 | +++ b/smart/transaction.py | ||
53 | @@ -555,6 +555,8 @@ class Transaction(object): | 83 | @@ -555,6 +555,8 @@ class Transaction(object): |
54 | changeset.set(pkg, INSTALL) | 84 | changeset.set(pkg, INSTALL) |
55 | isinst = changeset.installed | 85 | isinst = changeset.installed |
@@ -145,79 +175,3 @@ Index: smart-1.4.1/smart/transaction.py | |||
145 | changeset.set(pkg, INSTALL) | 175 | changeset.set(pkg, INSTALL) |
146 | locked[pkg] = (LOCKED_INSTALL, None) | 176 | locked[pkg] = (LOCKED_INSTALL, None) |
147 | elif op is REMOVE: | 177 | elif op is REMOVE: |
148 | @@ -1216,9 +1240,18 @@ class Transaction(object): | ||
149 | else: | ||
150 | op = REMOVE | ||
151 | if op is INSTALL or op is REINSTALL: | ||
152 | - self._install(pkg, changeset, locked, pending) | ||
153 | - if pkg in changeset: | ||
154 | - changeset.setRequested(pkg, True) | ||
155 | + try: | ||
156 | + self._install(pkg, changeset, locked, pending) | ||
157 | + if pkg in changeset: | ||
158 | + changeset.setRequested(pkg, True) | ||
159 | + except Failed, e: | ||
160 | + if attempt: | ||
161 | + iface.warning(_("Can't install %s: %s") % (pkg, e)) | ||
162 | + if pkg in changeset: | ||
163 | + del changeset[pkg] | ||
164 | + continue | ||
165 | + else: | ||
166 | + raise Failed, e | ||
167 | elif op is REMOVE: | ||
168 | self._remove(pkg, changeset, locked, pending) | ||
169 | elif op is UPGRADE: | ||
170 | Index: smart-1.4.1/smart/backends/rpm/pm.py | ||
171 | =================================================================== | ||
172 | --- smart-1.4.1.orig/smart/backends/rpm/pm.py | ||
173 | +++ smart-1.4.1/smart/backends/rpm/pm.py | ||
174 | @@ -243,15 +253,48 @@ class RPMPackageManager(PackageManager): | ||
175 | cb = RPMCallback(prog, upgradednames) | ||
176 | cb.grabOutput(True) | ||
177 | probs = None | ||
178 | + retry = 0 | ||
179 | try: | ||
180 | probs = ts.run(cb, None) | ||
181 | finally: | ||
182 | del getTS.ts | ||
183 | cb.grabOutput(False) | ||
184 | + if probs and sysconf.has("attempt-install", soft=True): | ||
185 | + def remove_conflict(pkgNEVR): | ||
186 | + for key in changeset.keys(): | ||
187 | + if pkgNEVR == str(key): | ||
188 | + del changeset[key] | ||
189 | + del pkgpaths[key] | ||
190 | + iface.warning("Removing %s due to file %s conflicting with %s" % (pkgNEVR, fname, altNEVR)) | ||
191 | + break | ||
192 | + | ||
193 | + retry = 1 | ||
194 | + for prob in probs: | ||
195 | + if prob[1][0] == rpm.RPMPROB_NEW_FILE_CONFLICT: | ||
196 | + msg = prob[0].split() | ||
197 | + fname = msg[1] | ||
198 | + pkgNEVR = msg[7] | ||
199 | + altNEVR = msg[9] | ||
200 | + pkgNEVR = pkgNEVR.rsplit('.', 1)[0] + '@' + pkgNEVR.rsplit('.', 1)[1] | ||
201 | + altNEVR = altNEVR.rsplit('.', 1)[0] + '@' + altNEVR.rsplit('.', 1)[1] | ||
202 | + remove_conflict(pkgNEVR) | ||
203 | + elif prob[1][0] == rpm.RPMPROB_FILE_CONFLICT: | ||
204 | + msg = prob[0].split() | ||
205 | + fname = msg[1] | ||
206 | + pkgNEVR = msg[5] | ||
207 | + altNEVR = msg[11] | ||
208 | + pkgNEVR = pkgNEVR.rsplit('.', 1)[0] + '@' + pkgNEVR.rsplit('.', 1)[1] | ||
209 | + altNEVR = altNEVR.rsplit('.', 1)[0] + '@' + altNEVR.rsplit('.', 1)[1] | ||
210 | + remove_conflict(pkgNEVR) | ||
211 | + else: | ||
212 | + retry = 0 | ||
213 | + | ||
214 | prog.setDone() | ||
215 | - if probs: | ||
216 | + if probs and (not retry): | ||
217 | raise Error, "\n".join([x[0] for x in probs]) | ||
218 | prog.stop() | ||
219 | + if retry and len(changeset): | ||
220 | + self.commit(changeset, pkgpaths) | ||
221 | |||
222 | class RPMCallback: | ||
223 | def __init__(self, prog, upgradednames): | ||