def commit(self, changeset, pkgpaths): prog = iface.getProgress(self, True) prog.start() prog.setTopic(_("Committing transaction...")) prog.set(0, len(changeset)) prog.show() # Compute upgrading/upgraded packages upgrading = {} upgraded = {} for pkg in changeset.keys(): if changeset.get(pkg) is INSTALL: upgpkgs = [ upgpkg for prv in pkg.provides for upg in prv.upgradedby for upgpkg in upg.packages if upgpkg.installed ] upgpkgs.extend([ prvpkg for upg in pkg.upgrades for prv in upg.providedby for prvpkg in prv.packages if prvpkg.installed ]) if upgpkgs: for upgpkg in upgpkgs: # If any upgraded package will stay in the system, # this is not really an upgrade for rpm. if changeset.get(upgpkg) is not REMOVE: break else: upgrading[pkg] = True for upgpkg in upgpkgs: upgraded[upgpkg] = True if upgpkg in changeset: del changeset[upgpkg] # FIXME (20050321): Solaris rpm 4.1 hack if sys.platform[:5] == "sunos": rpm.addMacro("_dbPath", sysconf.get("rpm-root", "/")) ts = rpm.TransactionSet() else: ts = rpm.ts(sysconf.get("rpm-root", "/")) if not sysconf.get("rpm-check-signatures", False): ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) # Let's help RPM, since it doesn't do a good # ordering job on erasures. try: sorter = ChangeSetSorter(changeset) sorted = sorter.getSorted() forcerpmorder = False except LoopError: lines = [_("Found unbreakable loops:")] for path in sorter.getLoopPaths(sorter.getLoops()): path = [ "%s [%s]" % (pkg, op is INSTALL and "I" or "R") for pkg, op in path ] lines.append(" " + " -> ".join(path)) lines.append(_("Will ask RPM to order it.")) iface.error("\n".join(lines)) sys.exit(1) forcerpmorder = True del sorter packages = 0 reinstall = False for pkg, op in sorted: if op is INSTALL: if pkg.installed: reinstall = True loader = [x for x in pkg.loaders if not x.getInstalled()][0] info = loader.getInfo(pkg) mode = pkg in upgrading and "u" or "i" path = pkgpaths[pkg][0] fd = os.open(path, os.O_RDONLY) try: h = ts.hdrFromFdno(fd) except rpm.error, e: os.close(fd) raise Error, "%s: %s" % (os.path.basename(path), e) os.close(fd) ts.addInstall(h, (info, path), mode) packages += 1 else: loader = [x for x in pkg.loaders if x.getInstalled()][0] offset = pkg.loaders[loader] try: ts.addErase(offset) except rpm.error, e: raise Error, "%s-%s: %s" % \ (pkg.name, pkg.version, unicode(e))
def commit(self, changeset, pkgpaths): prog = iface.getProgress(self, True) prog.start() prog.setTopic(_("Committing transaction...")) prog.set(0, len(changeset)) prog.show() if rhnoptions.hasOption("admin") and \ rhnoptions.getOption("admin"): adminfile = rhnoptions.getOption("admin") else: adminfile = sysconf.get("solaris-adminfile", "/var/sadm/install/admin/default") # Compute upgrade packages upgrade = {} for pkg in changeset.keys(): if changeset.get(pkg) is INSTALL: upgpkgs = [upgpkg for prv in pkg.provides for upg in prv.upgradedby for upgpkg in upg.packages if upgpkg.installed] upgpkgs.extend([prvpkg for upg in pkg.upgrades for prv in upg.providedby for prvpkg in prv.packages if prvpkg.installed]) if upgpkgs: upgrade[pkg] = True for upgpkg in upgpkgs: if upgpkg in changeset: del changeset[upgpkg] try: sorter = ChangeSetSorter(changeset) sorted = sorter.getSorted() except LoopError: lines = [_("Found unbreakable loops:")] for path in sorter.getLoopPaths(sorter.getLoops()): path = ["%s [%s]" % (pkg, op is INSTALL and "I" or "R") for pkg, op in path] lines.append(" "+" -> ".join(path)) iface.error("\n".join(lines)) sys.exit(-1) del sorter for pkg, op in sorted: if op is INSTALL and pkg in upgrade: # Upgrading something prog.setSubTopic(pkg, _("Upgrading %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() path = pkgpaths[pkg][0] status, output = solupgrade(adminfile, path, pkg, prog) prog.setSubDone(pkg) prog.show() if status != 0: iface.warning(_("Got status %d upgrading %s:") % (status, pkg)) iface.warning(output) else: iface.debug(_("Upgrading %s:") % pkg) iface.debug(output) elif op is INSTALL: # Normal install prog.setSubTopic(pkg, _("Installing %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() path = pkgpaths[pkg][0] status = 0 output = "" try: status, output = solinstall(adminfile, path, pkg, prog) except PatchaddException, pae: # Solaris patch cluster installs are tolerant of failed # patches, and we should be too. Just warn the user and # keep going. iface.warning( \ _("\nWARNING: Installation of patch %s failed.\n%s") \ % (pkg.name, str(pae))) prog.setSubDone(pkg) prog.show() if status != 0: iface.warning(_("Got status %d installing %s:") % (status, pkg)) iface.warning(output) else: iface.debug(_("Installing %s:") % pkg) iface.debug(output) else: # Remove prog.setSubTopic(pkg, _("Removing %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() status, output = solremove(adminfile, pkg, prog) prog.setSubDone(pkg) prog.show() if status != 0: iface.warning(_("Got status %d removing %s:") % (status, pkg)) iface.warning(output) else: iface.debug(_("Removing %s:") % pkg) iface.debug(output)
def commit(self, changeset, pkgpaths): prog = iface.getProgress(self, True) prog.start() prog.setTopic(_("Committing transaction...")) prog.set(0, len(changeset)) prog.show() # Compute upgrading/upgraded packages upgrading = {} upgraded = {} for pkg in changeset.keys(): if changeset.get(pkg) is INSTALL: upgpkgs = [upgpkg for prv in pkg.provides for upg in prv.upgradedby for upgpkg in upg.packages if upgpkg.installed] upgpkgs.extend([prvpkg for upg in pkg.upgrades for prv in upg.providedby for prvpkg in prv.packages if prvpkg.installed]) if upgpkgs: for upgpkg in upgpkgs: # If any upgraded package will stay in the system, # this is not really an upgrade for rpm. if changeset.get(upgpkg) is not REMOVE: break else: upgrading[pkg] = True for upgpkg in upgpkgs: upgraded[upgpkg] = True if upgpkg in changeset: del changeset[upgpkg] # FIXME (20050321): Solaris rpm 4.1 hack if sys.platform[:5] == "sunos": rpm.addMacro("_dbPath", sysconf.get("rpm-root", "/")) ts = rpm.TransactionSet() else: ts = rpm.ts(sysconf.get("rpm-root", "/")) if not sysconf.get("rpm-check-signatures", False): ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) # Let's help RPM, since it doesn't do a good # ordering job on erasures. try: sorter = ChangeSetSorter(changeset) sorted = sorter.getSorted() forcerpmorder = False except LoopError: lines = [_("Found unbreakable loops:")] for path in sorter.getLoopPaths(sorter.getLoops()): path = ["%s [%s]" % (pkg, op is INSTALL and "I" or "R") for pkg, op in path] lines.append(" "+" -> ".join(path)) lines.append(_("Will ask RPM to order it.")) iface.error("\n".join(lines)) sys.exit(1) forcerpmorder = True del sorter packages = 0 reinstall = False for pkg, op in sorted: if op is INSTALL: if pkg.installed: reinstall = True loader = [x for x in pkg.loaders if not x.getInstalled()][0] info = loader.getInfo(pkg) mode = pkg in upgrading and "u" or "i" path = pkgpaths[pkg][0] fd = os.open(path, os.O_RDONLY) try: h = ts.hdrFromFdno(fd) except rpm.error, e: os.close(fd) raise Error, "%s: %s" % (os.path.basename(path), e) os.close(fd) ts.addInstall(h, (info, path), mode) packages += 1 else: loader = [x for x in pkg.loaders if x.getInstalled()][0] offset = pkg.loaders[loader] try: ts.addErase(offset) except rpm.error, e: raise Error, "%s-%s: %s" % \ (pkg.name, pkg.version, unicode(e))
if rpmlogfile is not None: try: rpmlog = open(rpmlogfile, 'w') rpm.setLogFile(rpmlog) except (IOError, OSError), e: raise Error, "%s: %s" % (rpmlogfile, unicode(e)) # Let's help RPM, since it doesn't do a good # ordering job on erasures. try: sorter = ChangeSetSorter(changeset) sorted = sorter.getSorted() forcerpmorder = False except LoopError: lines = [_("Found unbreakable loops:")] for path in sorter.getLoopPaths(sorter.getLoops()): path = [ "%s [%s]" % (pkg, op is INSTALL and "I" or "R") for pkg, op in path ] lines.append(" " + " -> ".join(path)) lines.append(_("Will ask RPM to order it.")) iface.error("\n".join(lines)) sorted = [(pkg, changeset[pkg]) for pkg in changeset] forcerpmorder = True del sorter packages = 0 reinstall = False for pkg, op in sorted: if op is INSTALL:
if rpmlogfile is not None: try: rpmlog = open(rpmlogfile, 'w') rpm.setLogFile(rpmlog) except (IOError, OSError), e: raise Error, "%s: %s" % (rpmlogfile, unicode(e)) # Let's help RPM, since it doesn't do a good # ordering job on erasures. try: sorter = ChangeSetSorter(changeset) sorted = sorter.getSorted() forcerpmorder = False except LoopError: lines = [_("Found unbreakable loops:")] for path in sorter.getLoopPaths(sorter.getLoops()): path = ["%s [%s]" % (pkg, op is INSTALL and "I" or "R") for pkg, op in path] lines.append(" "+" -> ".join(path)) lines.append(_("Will ask RPM to order it.")) iface.error("\n".join(lines)) sorted = [(pkg, changeset[pkg]) for pkg in changeset] forcerpmorder = True del sorter packages = 0 reinstall = False for pkg, op in sorted: if op is INSTALL: if pkg.installed: reinstall = True