def showChangeSet(self, changeset, keep=None, confirm=False, label=None): report = Report(changeset) report.compute() class Sorter(str): ORDER = [_("Remove"), _("Downgrade"), _("Reinstall"), _("Install"), _("Upgrade")] def _index(self, s): i = 0 for os in self.ORDER: if os.startswith(s): return i i += 1 return i def __cmp__(self, other): return cmp(self._index(str(self)), self._index(str(other))) def __lt__(self, other): return cmp(self, other) < 0 packages = {} if report.install: install = {} reinstall = {} upgrade = {} downgrade = {} lst = report.install.keys() lst.sort() for pkg in lst: package = {} done = {} if pkg in report.upgrading: for upgpkg in report.upgrading[pkg]: package.setdefault(_("Upgrades"), []).append(upgpkg) done[upgpkg] = True if pkg in report.downgrading: for dwnpkg in report.downgrading[pkg]: package.setdefault(_("Downgrades"), []).append(dwnpkg) done[dwnpkg] = True if pkg in report.requires: for reqpkg in report.requires[pkg]: package.setdefault(_("Requires"), []).append(reqpkg) if pkg in report.requiredby: for reqpkg in report.requiredby[pkg]: package.setdefault(_("Required By"), []).append(reqpkg) if pkg in report.conflicts: for cnfpkg in report.conflicts[pkg]: if cnfpkg in done: continue package.setdefault(_("Conflicts"), []).append(cnfpkg) if pkg.installed: reinstall[pkg] = package elif pkg in report.upgrading: upgrade[pkg] = package elif pkg in report.downgrading: downgrade[pkg] = package else: install[pkg] = package if reinstall: packages[Sorter(_("Reinstall (%d)") % len(reinstall))] = \ reinstall if install: packages[Sorter(_("Install (%d)") % len(install))] = install if upgrade: packages[Sorter(_("Upgrade (%d)") % len(upgrade))] = upgrade if downgrade: packages[Sorter(_("Downgrade (%d)") % len(downgrade))] = \ downgrade if report.removed: remove = {} lst = report.removed.keys() lst.sort() for pkg in lst: package = {} done = {} if pkg in report.requires: for reqpkg in report.requires[pkg]: package.setdefault(_("Requires"), []).append(reqpkg) if pkg in report.requiredby: for reqpkg in report.requiredby[pkg]: package.setdefault(_("Required By"), []).append(reqpkg) if pkg in report.conflicts: for cnfpkg in report.conflicts[pkg]: if cnfpkg in done: continue package.setdefault(_("Conflicts"), []).append(cnfpkg) remove[pkg] = package if remove: packages[Sorter(_("Remove (%d)") % len(report.removed))] = \ remove if keep: packages[Sorter(_("Keep (%d)") % len(keep))] = keep dsize = report.getDownloadSize() - report.getCachedSize() size = report.getInstallSize() - report.getRemoveSize() sizestr = "" if dsize: sizestr += _("%s of package files are needed. ") % sizeToStr(dsize) if size > 0: sizestr += _("%s will be used.") % sizeToStr(size) elif size < 0: size *= -1 sizestr += _("%s will be freed.") % sizeToStr(size) if dsize or size: self._sizelabel.set_text(sizestr) self._sizelabel.show() else: self._sizelabel.hide() if confirm: self._confirmbbox.show() self._closebbox.hide() else: self._closebbox.show() self._confirmbbox.hide() if label: self._label.set_text(label) self._label.show() else: self._label.hide() self._pv.setPackages(packages, changeset) # Expand first level self._pv.setExpanded([(x,) for x in packages]) self._result = False self.show() gtk.main() self.hide() return self._result
def showChangeSet(self, changeset, keep=None, confirm=False): self.hideStatus() report = Report(changeset) report.compute() if not sysconf.get("explain-changesets", False): screenwidth = getScreenWidth() hideversion = sysconf.get("text-hide-version", len(changeset) > 40) def showPackages(pkgs, showrelations=None): if hideversion: pkgs = [x.name for x in pkgs] pkgs.sort() printColumns(pkgs, indent=2, width=screenwidth) else: def being(pkg): if (pkg in report.installing or pkg in report.upgrading or pkg in report.downgrading): return _("(installed)") elif pkg in report.upgraded: return _("(upgraded)") elif pkg in report.removed: return _("(removed)") elif pkg in report.downgraded: return _("(downgraded)") else: return "" # Shouldn't happen def showPackages(pkgs, showrelations=True): pkgs.sort() for pkg in pkgs: channels = [] for loader in pkg.loaders: channels.append(loader.getChannel().getAlias()) channels.sort() print " ", pkg, ("[%s]" % ", ".join(channels)) if showrelations: if pkg in report.upgrading: print " ", _("Upgrades:") for upgpkg in report.upgrading[pkg]: print " ", upgpkg, being(upgpkg) if pkg in report.downgrading: print " ", _("Downgrades:") for dwnpkg in report.downgrading[pkg]: print " ", dwnpkg, being(dwnpkg) if pkg in report.requires: print " ", _("Requires:") for reqpkg in report.requires[pkg]: print " ", reqpkg, being(reqpkg) if pkg in report.requiredby: print " ", _("Required By:") for reqpkg in report.requiredby[pkg]: print " ", reqpkg, being(reqpkg) if pkg in report.conflicts: print " ", _("Conflicts:") for cnfpkg in report.conflicts[pkg]: print " ", cnfpkg, being(cnfpkg) print if keep: print _("Kept packages (%d):") % len(keep) showPackages(keep, False) print pkgs = report.upgrading.keys() if pkgs: print _("Upgrading packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.downgrading.keys() if pkgs: print _("Downgrading packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.installing.keys() if pkgs: print _("Installing packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.removed.keys() if pkgs: print _("Removing packages (%d):") % len(pkgs) showPackages(pkgs) print dsize = report.getDownloadSize() - report.getCachedSize() size = report.getInstallSize() - report.getRemoveSize() if dsize: sys.stdout.write(_("%s of package files are needed. ") % sizeToStr(dsize)) if size > 0: sys.stdout.write(_("%s will be used.") % sizeToStr(size)) elif size < 0: size *= -1 sys.stdout.write(_("%s will be freed.") % sizeToStr(size)) if dsize or size: sys.stdout.write("\n\n") if confirm: return self.askYesNo(_("Confirm changes?"), True) return True
def showChangeSet(self, changeset, keep=None, confirm=False): self.hideStatus() report = Report(changeset) report.compute() if not sysconf.get("explain-changesets", False): screenwidth = getScreenWidth() hideversion = sysconf.get("text-hide-version", len(changeset) > 40) def showPackages(pkgs, showrelations=None): if hideversion: pkgs = [x.name for x in pkgs] pkgs.sort() printColumns(pkgs, indent=2, width=screenwidth) else: def being(pkg): if (pkg in report.installing or pkg in report.upgrading or pkg in report.downgrading): return _("(installed)") elif pkg in report.upgraded: return _("(upgraded)") elif pkg in report.removed: return _("(removed)") elif pkg in report.downgraded: return _("(downgraded)") else: return "" # Shouldn't happen def showPackages(pkgs, showrelations=True): pkgs.sort() for pkg in pkgs: channels = [] for loader in pkg.loaders: channels.append(loader.getChannel().getAlias()) channels.sort() print " ", pkg, ("[%s]" % ", ".join(channels)) if showrelations: if pkg in report.upgrading: print " ", _("Upgrades:") for upgpkg in report.upgrading[pkg]: print " ", upgpkg, being(upgpkg) if pkg in report.downgrading: print " ", _("Downgrades:") for dwnpkg in report.downgrading[pkg]: print " ", dwnpkg, being(dwnpkg) if pkg in report.requires: print " ", _("Requires:") for reqpkg in report.requires[pkg]: print " ", reqpkg, being(reqpkg) if pkg in report.requiredby: print " ", _("Required By:") for reqpkg in report.requiredby[pkg]: print " ", reqpkg, being(reqpkg) if pkg in report.conflicts: print " ", _("Conflicts:") for cnfpkg in report.conflicts[pkg]: print " ", cnfpkg, being(cnfpkg) print if keep: print _("Kept packages (%d):") % len(keep) showPackages(keep, False) print pkgs = report.upgrading.keys() if pkgs: print _("Upgrading packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.downgrading.keys() if pkgs: print _("Downgrading packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.installing.keys() if pkgs: print _("Installing packages (%d):") % len(pkgs) showPackages(pkgs) print pkgs = report.removed.keys() if pkgs: print _("Removing packages (%d):") % len(pkgs) showPackages(pkgs) print dsize = report.getDownloadSize() - report.getCachedSize() size = report.getInstallSize() - report.getRemoveSize() if dsize: sys.stdout.write( _("%s of package files are needed. ") % sizeToStr(dsize)) if size > 0: sys.stdout.write(_("%s will be used.") % sizeToStr(size)) elif size < 0: size *= -1 sys.stdout.write(_("%s will be freed.") % sizeToStr(size)) if dsize or size: sys.stdout.write("\n\n") if confirm: return self.askYesNo(_("Confirm changes?"), True) return True