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): upgrades = {} depchkoff = {} 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: # For each package that is to be upgraded # Check for remove operations and delete them if changeset.get(upgpkg) is not REMOVE: break else: upgrades[pkg] = True for upgpkg in upgpkgs: if upgpkg in changeset and pkg.name != upgpkg.name: # pacman doesn't remove pkgs of a different name # during an upgrade even if one provides the other depchkoff[upgpkg] = True elif upgpkg in changeset: del changeset[upgpkg] prog = iface.getProgress(self, True) prog.start() prog.setTopic(_("Committing transaction...")) prog.set(0, len(changeset)) prog.show() sorted = ChangeSetSorter(changeset).getSorted() for pkg, op in sorted: depchk = depchkoff.get(pkg) and "d" or "" if op == INSTALL and upgrades.get(pkg): prog.setSubTopic(pkg, _("Upgrading %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() status, output = commands.getstatusoutput("pacman -U%s %s" % (depchk, pkgpaths[pkg][0])) 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 == INSTALL: prog.setSubTopic(pkg, _("Installing %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() status, output = commands.getstatusoutput("pacman -U%s %s" % (depchk, pkgpaths[pkg][0])) 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) elif op == REMOVE: prog.setSubTopic(pkg, _("Removing %s") % pkg.name) prog.setSub(pkg, 0, 1, 1) prog.show() status, output = commands.getstatusoutput("pacman -R%s %s" % (depchk, pkg.name)) 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) else: iface.warning(_("Operation ( %s ) not handled on package ( %s )" % (op, pkg.name))) prog.setDone() prog.stop()
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)
class RPMPackageManager(PackageManager): 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] ts = getTS(True) flags = ts.setFlags(0) if sysconf.get("rpm-allfiles", False): flags |= rpm.RPMTRANS_FLAG_ALLFILES if sysconf.get("rpm-justdb", False): flags |= rpm.RPMTRANS_FLAG_JUSTDB if sysconf.get("rpm-noconfigs", False): flags |= rpm.RPMTRANS_FLAG_NOCONFIGS if (sysconf.get("rpm-nodocs", False) or sysconf.get("rpm-excludedocs", False)): flags |= rpm.RPMTRANS_FLAG_NODOCS if sysconf.get("rpm-nomd5", False): flags |= rpm.RPMTRANS_FLAG_NOMD5 if sysconf.get("rpm-noscripts", False): flags |= rpm.RPMTRANS_FLAG_NOSCRIPTS if sysconf.get("rpm-notriggers", False): flags |= rpm.RPMTRANS_FLAG_NOTRIGGERS if sysconf.get("rpm-repackage", False): flags |= rpm.RPMTRANS_FLAG_REPACKAGE if sysconf.get("rpm-test", False): flags |= rpm.RPMTRANS_FLAG_TEST ts.setFlags(flags) dflags = ts.setDFlags(0) if sysconf.get("rpm-noupgrade", False): dflags |= rpm.RPMDEPS_FLAG_NOUPGRADE if sysconf.get("rpm-norequires", False): dflags |= rpm.RPMDEPS_FLAG_NOREQUIRES if sysconf.get("rpm-noconflicts", False): dflags |= rpm.RPMDEPS_FLAG_NOCONFLICTS if sysconf.get("rpm-noobsoletes", False): dflags |= rpm.RPMDEPS_FLAG_NOOBSOLETES if sysconf.get("rpm-noparentdirs", False): dflags |= rpm.RPMDEPS_FLAG_NOPARENTDIRS if sysconf.get("rpm-nolinktos", False): dflags |= rpm.RPMDEPS_FLAG_NOLINKTOS if sysconf.get("rpm-nosuggest", False): dflags |= rpm.RPMDEPS_FLAG_NOSUGGEST ts.setDFlags(dflags) # Set rpm verbosity level. levelname = sysconf.get('rpm-log-level') level = { 'emerg': rpm.RPMLOG_EMERG, 'alert': rpm.RPMLOG_ALERT, 'crit': rpm.RPMLOG_CRIT, 'err': rpm.RPMLOG_ERR, 'warning': rpm.RPMLOG_WARNING, 'notice': rpm.RPMLOG_NOTICE, 'info': rpm.RPMLOG_INFO, 'debug': rpm.RPMLOG_DEBUG }.get(levelname) if level is not None: rpm.setVerbosity(level) # Set rpm output log file rpmlogfile = sysconf.get('rpm-log-file') 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 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) if sysconf.get("rpm-check-signatures", False): if get_public_key(h) == '(none)': raise rpm.error('package is not signed') 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() # 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 level is not None: rpm.setVerbosity(level) # Set rpm output log file rpmlogfile = sysconf.get('rpm-log-file') 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
if level is not None: rpm.setVerbosity(level) # Set rpm output log file rpmlogfile = sysconf.get('rpm-log-file') 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