diff options
| -rw-r--r-- | meta/classes/package_rpm.bbclass | 7 | ||||
| -rw-r--r-- | meta/recipes-devtools/python/python-smartpm/smart-attempt.patch | 59 | ||||
| -rw-r--r-- | meta/recipes-devtools/python/python-smartpm_1.4.1.bb | 1 |
3 files changed, 62 insertions, 5 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 8ab42c441e..699d0f200a 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
| @@ -472,11 +472,8 @@ EOF | |||
| 472 | echo "Attempting $pkgs_to_install" | 472 | echo "Attempting $pkgs_to_install" |
| 473 | echo "Note: see `dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" | 473 | echo "Note: see `dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" |
| 474 | translate_oe_to_smart ${sdk_mode} --attemptonly $package_attemptonly | 474 | translate_oe_to_smart ${sdk_mode} --attemptonly $package_attemptonly |
| 475 | for each_pkg in $pkgs_to_install ; do | 475 | echo "Attempting $pkgs_to_install" >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" |
| 476 | # We need to try each package individually as a single dependency failure | 476 | smart --data-dir=${target_rootfs}/var/lib/smart install --attempt -y ${pkgs_to_install} >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 |
| 477 | # will break the whole set otherwise. | ||
| 478 | smart --data-dir=${target_rootfs}/var/lib/smart install -y $each_pkg >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 || true | ||
| 479 | done | ||
| 480 | fi | 477 | fi |
| 481 | } | 478 | } |
| 482 | 479 | ||
diff --git a/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch new file mode 100644 index 0000000000..0d603d3d1b --- /dev/null +++ b/meta/recipes-devtools/python/python-smartpm/smart-attempt.patch | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | Add a mechanism to attempt the install operation, w/o failing. | ||
| 2 | |||
| 3 | For complementary and 'attemptonly' packages, we need a way to instruct smart to | ||
| 4 | try to install, but ignore any failures. | ||
| 5 | |||
| 6 | This option only works for the install operation. | ||
| 7 | |||
| 8 | Upstream-Status: Pending | ||
| 9 | |||
| 10 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
| 11 | |||
| 12 | Index: smart-1.4.1/smart/commands/install.py | ||
| 13 | =================================================================== | ||
| 14 | --- smart-1.4.1.orig/smart/commands/install.py | ||
| 15 | +++ smart-1.4.1/smart/commands/install.py | ||
| 16 | @@ -50,6 +50,8 @@ def option_parser(): | ||
| 17 | parser = OptionParser(usage=USAGE, | ||
| 18 | description=DESCRIPTION, | ||
| 19 | examples=EXAMPLES) | ||
| 20 | + parser.add_option("--attempt", action="store_true", | ||
| 21 | + help=_("attempt to install packages, ignore failures")) | ||
| 22 | parser.add_option("--stepped", action="store_true", | ||
| 23 | help=_("split operation in steps")) | ||
| 24 | parser.add_option("--urls", action="store_true", | ||
| 25 | @@ -80,6 +82,9 @@ def main(ctrl, opts): | ||
| 26 | if not opts.args: | ||
| 27 | raise Error, _("no package(s) given") | ||
| 28 | |||
| 29 | + if opts.attempt: | ||
| 30 | + sysconf.set("attempt-install", True, soft=True) | ||
| 31 | + | ||
| 32 | if opts.explain: | ||
| 33 | sysconf.set("explain-changesets", True, soft=True) | ||
| 34 | |||
| 35 | Index: smart-1.4.1/smart/transaction.py | ||
| 36 | =================================================================== | ||
| 37 | --- smart-1.4.1.orig/smart/transaction.py | ||
| 38 | +++ smart-1.4.1/smart/transaction.py | ||
| 39 | @@ -1216,9 +1216,17 @@ class Transaction(object): | ||
| 40 | else: | ||
| 41 | op = REMOVE | ||
| 42 | if op is INSTALL or op is REINSTALL: | ||
| 43 | - self._install(pkg, changeset, locked, pending) | ||
| 44 | - if pkg in changeset: | ||
| 45 | - changeset.setRequested(pkg, True) | ||
| 46 | + try: | ||
| 47 | + self._install(pkg, changeset, locked, pending) | ||
| 48 | + if pkg in changeset: | ||
| 49 | + changeset.setRequested(pkg, True) | ||
| 50 | + except Failed, e: | ||
| 51 | + if sysconf.has("attempt-install", soft=True): | ||
| 52 | + if pkg in changeset: | ||
| 53 | + del changeset[pkg] | ||
| 54 | + continue | ||
| 55 | + else: | ||
| 56 | + raise Failed, e | ||
| 57 | elif op is REMOVE: | ||
| 58 | self._remove(pkg, changeset, locked, pending) | ||
| 59 | elif op is UPGRADE: | ||
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 5d673b9902..f406d692e3 100644 --- a/meta/recipes-devtools/python/python-smartpm_1.4.1.bb +++ b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb | |||
| @@ -30,6 +30,7 @@ SRC_URI = "\ | |||
| 30 | file://smart-flag-ignore-recommends.patch \ | 30 | file://smart-flag-ignore-recommends.patch \ |
| 31 | file://smart-flag-exclude-packages.patch \ | 31 | file://smart-flag-exclude-packages.patch \ |
| 32 | file://smart-config-ignore-all-recommends.patch \ | 32 | file://smart-config-ignore-all-recommends.patch \ |
| 33 | file://smart-attempt.patch \ | ||
| 33 | " | 34 | " |
| 34 | 35 | ||
| 35 | SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6" | 36 | SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6" |
