def _setSize(self, treeview, cell, model, iter): value = model.get_value(iter, 0) if hasattr(value, "loaders"): for loader in value.loaders: info = loader.getInfo(value) if value.installed: if not loader.getInstalled(): continue size = info.getInstalledSize() else: size = 0L for url in info.getURLs(): size += info.getSize(url) or 0 cell.set_property("text", sizeToStr(size or None)) break else: cell.set_property("text", "")
def main(ctrl, opts, reloadchannels=True): # Argument check if not opts.args: raise Error, _("No package(s) given") if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: if reloadchannels: ctrl.reloadChannels() cache = ctrl.getCache() if opts.args: pkgs = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg, addprovides=False) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): dct[obj] = True else: dct.update(dict.fromkeys(obj.packages, True)) raise Error, _("'%s' matches no packages. " "Suggestions:\n%s") % \ (arg, "\n".join([" "+str(x) for x in dct])) else: raise Error, _("'%s' matches no packages") % arg dct = {} for obj in results: if isinstance(obj, Package): dct[obj] = True else: dct.update(dict.fromkeys(obj.packages, True)) pkgs.update(dct) pkgs = pkgs.keys() else: pkgs = cache.getPackages() for pkg in pkgs: channels = {} infos = [] for loader in pkg.loaders: channel = loader.getChannel() info = loader.getInfo(pkg) infos.append(info) urls = info.getURLs() map = channels.setdefault(str(channel), {}) if urls: map.setdefault("urls", []).extend(urls) infos.sort() info = infos[0] print _("Name:"), pkg.name print _("Version:"), pkg.version print _("Priority:"), pkg.getPriority() print _("Source:"), info.getSource() print _("Group:"), info.getGroup() print _("License:"), info.getLicense() print _("Installed Size:"), sizeToStr(info.getInstalledSize()) print _("Reference URLs:"), " ".join(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = "%s" % ", ".join(flags) else: flags = "" print _("Flags:"), flags print _("Channels:"), channelnames = channels.keys() channelnames.sort() print "; ".join(channelnames) print _("Summary:"), info.getSummary() print _("Description:") for line in info.getDescription().splitlines(): line = line.strip() if not line: line = "." print "", line if opts.urls: print _("URLs:") seen = {} for loader in pkg.loaders: if loader not in seen: seen[loader] = True info = loader.getInfo(pkg) first = True for url in info.getURLs(): if first: print "", loader.getChannel() first = False size = info.getSize(url) if size: print " ", url, "(%s)" % sizeToStr(size) else: print " ", url if opts.paths or opts.changelog: for loader in pkg.loaders: if loader.getInstalled(): info = loader.getInfo(pkg) break if opts.paths: print _("Paths:") paths = info.getPathList() paths.sort() for entry in paths: print "", entry if opts.changelog: print _("Changelog:") changelog = info.getChangeLog() for i in range(len(changelog) / 2): print " ", "%s" % changelog[2 * i] changesplit = changelog[2 * i + 1].split("\n") print " ", "%s" % changesplit[0] for i in range(1, len(changesplit)): print " ", "%s" % changesplit[i] print
def showChangeSet(self, changeset, keep=None, confirm=False, label=None): report = Report(changeset) report.compute() class Sorter(unicode): 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(unicode(self)), self._index(unicode(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() 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.setText(sizestr) self._sizelabel.show() else: self._sizelabel.hide() if confirm: self._confirmbbox.show() self._closebbox.hide() self._okbutton.setDefault(True) else: self._closebbox.show() self._confirmbbox.hide() self._closebutton.setDefault(True) 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() dialogResult = self.exec_loop() self._result = (dialogResult == qt.QDialog.Accepted) return self._result
def showChangeSet(self, changeset, keep=None, confirm=False): self.hideStatus() report = Report(changeset) report.compute() screenwidth = getScreenWidth() hideversion = sysconf.get("text-hide-version", len(changeset) > 40) if hideversion: def cvt(lst): return [x.name for x in lst] else: def cvt(lst): return lst print if keep: keep = cvt(keep) keep.sort() print _("Kept packages (%d):") % len(keep) printColumns(keep, indent=2, width=screenwidth) print pkgs = report.upgrading.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Upgrading packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.downgrading.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Downgrading packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.installing.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Installed packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.removed.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Removed packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print dsize = report.getDownloadSize() 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
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._notebook.get_current_page() if num == 0: # Update general information if not pkg: self._info.status.set_text("") self._info.group.set_text("") self._info.installedsize.set_text("") self._info.priority.set_text("") self._info.channels.set_text("") return group = None installedsize = None channels = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" status = pkg.installed and _("Installed") or _("Available") self._info.status.set_text(status + flags) self._info.group.set_text(group or _("Unknown")) self._info.priority.set_text(str(pkg.getPriority())) self._info.channels.set_text("\n".join(channels)) if installedsize: self._info.installedsize.set_text(sizeToStr(installedsize)) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() elif num == 1: # Update summary/description descrbuf = self._descrtv.get_buffer() descrbuf.set_text("") if not pkg: return iter = descrbuf.get_end_iter() for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: descrbuf.insert_with_tags_by_name(iter, summary + "\n\n", "summary") description = info.getDescription() if description != summary: descrbuf.insert_with_tags_by_name( iter, description + "\n\n", "description") break else: loader = pkg.loaders.keys()[0] elif num == 2: # Update contents contbuf = self._conttv.get_buffer() contbuf.set_text("") if not pkg: return iter = contbuf.get_end_iter() for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) pathlist = info.getPathList() pathlist.sort() for path in pathlist: contbuf.insert_with_tags_by_name(iter, path + "\n", "content") elif num == 3: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 4: # Update URLs model = self._urls.get_model() model.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item model.append(item)
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._notebook.get_current_page() if num == 0: # Update general information if not pkg: self._info.status.set_text("") self._info.group.set_text("") self._info.installedsize.set_text("") self._info.priority.set_text("") self._info.channels.set_text("") self._info.reference.get_buffer().set_text("") return group = None installedsize = None channels = [] urls = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) urls.extend(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" status = pkg.installed and _("Installed") or _("Available") self._info.status.set_text(status + flags) self._info.group.set_text(group or _("Unknown")) self._info.priority.set_text(str(pkg.getPriority())) self._info.channels.set_text("\n".join(channels)) self._info.reference.get_buffer().set_text("") for url in urls: refbuf = self._info.reference.get_buffer() tag = refbuf.create_tag(None, foreground="blue", underline=pango.UNDERLINE_SINGLE) tag.set_data("url", url) refbuf.insert_with_tags(refbuf.get_end_iter(), url, tag) if installedsize: self._info.installedsize.set_text(sizeToStr(installedsize)) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() elif num == 1: # Update summary/description descrbuf = self._descrtv.get_buffer() descrbuf.set_text("") if not pkg: return iter = descrbuf.get_end_iter() for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: descrbuf.insert_with_tags_by_name(iter, summary + "\n\n", "summary") description = info.getDescription() if description != summary: descrbuf.insert_with_tags_by_name( iter, description + "\n\n", "description") break else: loader = pkg.loaders.keys()[0] elif num == 2: # Update contents if not pkg: contbuf = self._conttv.get_buffer() contbuf.set_text("") return self._setContent(pkg) elif num == 3: # Update changelog contbuf = self._change.get_buffer() contbuf.set_text("") if not pkg: return iter = contbuf.get_end_iter() for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) changelog = info.getChangeLog() for i in range(len(changelog) / 2): contbuf.insert_with_tags_by_name(iter, changelog[2 * i] + "\n", "changetime") changesplit = changelog[2 * i + 1].split("\n") changedetails = changesplit[0] + "\n" for i in range(1, len(changesplit)): changedetails += " " + changesplit[i] + "\n" contbuf.insert_with_tags_by_name(iter, changedetails, "changelog") elif num == 4: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 5: # Update URLs model = self._urls.get_model() model.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item model.append(item)
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._notebook.get_current_page() if num == 0: # Update general information if not pkg: self._info.status.set_text("") self._info.group.set_text("") self._info.installedsize.set_text("") self._info.priority.set_text("") self._info.channels.set_text("") return group = None installedsize = None channels = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" status = pkg.installed and _("Installed") or _("Available") self._info.status.set_text(status+flags) self._info.group.set_text(group or _("Unknown")) self._info.priority.set_text(str(pkg.getPriority())) self._info.channels.set_text("\n".join(channels)) if installedsize: self._info.installedsize.set_text(sizeToStr(installedsize)) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() elif num == 1: # Update summary/description descrbuf = self._descrtv.get_buffer() descrbuf.set_text("") if not pkg: return iter = descrbuf.get_end_iter() for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: descrbuf.insert_with_tags_by_name(iter, summary+"\n\n", "summary") description = info.getDescription() if description != summary: descrbuf.insert_with_tags_by_name(iter, description+"\n\n", "description") break else: loader = pkg.loaders.keys()[0] elif num == 2: # Update contents contbuf = self._conttv.get_buffer() contbuf.set_text("") if not pkg: return iter = contbuf.get_end_iter() for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) pathlist = info.getPathList() pathlist.sort() for path in pathlist: contbuf.insert_with_tags_by_name(iter, path+"\n", "content") elif num == 3: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 4: # Update URLs model = self._urls.get_model() model.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item model.append(item)
def showChangeSet(self, changeset, keep=None, confirm=False): self.hideStatus() report = Report(changeset) report.compute() screenwidth = getScreenWidth() hideversion = sysconf.get("text-hide-version", len(changeset) > 40) if hideversion: def cvt(lst): return [x.name for x in lst] else: def cvt(lst): return lst print if keep: keep = cvt(keep) keep.sort() print _("Kept packages (%d):") % len(keep) printColumns(keep, indent=2, width=screenwidth) print pkgs = report.upgrading.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Upgrading packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.downgrading.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Downgrading packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.installing.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Installed packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print pkgs = report.removed.keys() if pkgs: pkgs = cvt(pkgs) pkgs.sort() print _("Removed packages (%d):") % len(pkgs) printColumns(pkgs, indent=2, width=screenwidth) print dsize = report.getDownloadSize() 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 main(ctrl, opts, reloadchannels=True): if reloadchannels: ctrl.reloadChannels() cache = ctrl.getCache() if opts.args: pkgs = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg, addprovides=False) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): dct[obj] = True else: dct.update(dict.fromkeys(obj.packages, True)) raise Error, _("'%s' matches no packages. " "Suggestions:\n%s") % \ (arg, "\n".join([" "+str(x) for x in dct])) else: raise Error, _("'%s' matches no packages") % arg dct = {} for obj in results: if isinstance(obj, Package): dct[obj] = True else: dct.update(dict.fromkeys(obj.packages, True)) pkgs.update(dct) pkgs = pkgs.keys() else: pkgs = cache.getPackages() for pkg in pkgs: channels = {} infos = [] for loader in pkg.loaders: channel = loader.getChannel() info = loader.getInfo(pkg) infos.append(info) urls = info.getURLs() map = channels.setdefault(str(channel), {}) if urls: map.setdefault("urls", []).extend(urls) infos.sort() info = infos[0] print _("Name:"), pkg.name print _("Version:"), pkg.version print _("Priority:"), pkg.getPriority() print _("Group:"), info.getGroup() print _("Installed Size:"), sizeToStr(info.getInstalledSize()) print _("Reference URLs:"), " ".join(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = "%s" % ", ".join(flags) else: flags = "" print _("Flags:"), flags print _("Channels:"), channelnames = channels.keys() channelnames.sort() print "; ".join(channelnames) print _("Summary:"), info.getSummary() print _("Description:") for line in info.getDescription().splitlines(): line = line.strip() if not line: line = "." print "", line if opts.urls: print _("URLs:") seen = {} for loader in pkg.loaders: if loader not in seen: seen[loader] = True info = loader.getInfo(pkg) first = True for url in info.getURLs(): if first: print "", loader.getChannel() first = False size = info.getSize(url) if size: print " ", url, "(%s)" % sizeToStr(size) else: print " ", url if opts.paths: print _("Paths:") for entry in info.getPathList(): print "", entry print
def showChangeSet(self, changeset, keep=None, confirm=False, label=None): report = Report(changeset) report.compute() class Sorter(unicode): 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(unicode(self)), self._index(unicode(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() 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.setText(sizestr) self._sizelabel.show() else: self._sizelabel.hide() if confirm: self._confirmbbox.show() self._closebbox.hide() self._okbutton.setDefault(True) else: self._closebbox.show() self._confirmbbox.hide() self._closebutton.setDefault(True) 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() dialogResult = self.exec_loop() self._result = (dialogResult == qt.QDialog.Accepted) return self._result
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._tabwidget.currentPageIndex() if num == 0: # Update general information if not pkg: self._info.status.setText("") self._info.group.setText("") self._info.installedsize.setText("") self._info.priority.setText("") self._info.channels.setText("") self._info.reference.setText("") return group = None installedsize = None channels = [] urls = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) urls.extend(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" def bold(text): return "<b>"+unicode(qt.QStyleSheet.escape(text))+"</b>" def link(text, url): return "<a href=\""+url+"\">"+unicode(qt.QStyleSheet.escape(text))+"</a>" status = pkg.installed and _("Installed") or _("Available") self._info.status.setText(bold(status+flags)) self._info.group.setText(bold(group or _("Unknown"))) self._info.priority.setText(bold(str(pkg.getPriority()))) self._info.channels.setText(bold("\n".join(channels))) links = [] for url in urls: links.append(link(url, url)) self._info.reference.setText(" ".join(links)) if installedsize: self._info.installedsize.setText(bold(sizeToStr(installedsize))) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() pass self._grid.adjustSize() elif num == 1: # Update summary/description self._descr.setText("") if not pkg: return #iter = descrbuf.get_end_iter() text = "" for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: text += "<b>"+unicode(qt.QStyleSheet.escape(summary))+"</b><br><br>" description = info.getDescription() if description != summary: text += description+"\n\n" break else: loader = pkg.loaders.keys()[0] self._descr.setText(text) elif num == 2: # Update contents self._cont.setText("") if not pkg: return text = "" for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) pathlist = info.getPathList() pathlist.sort() for path in pathlist: text += path+"\n" self._cont.setText(text) self._cont.adjustSize() elif num == 3: # Update changelog self._change.setText("") if not pkg: return text = "" for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) changelog = info.getChangeLog() for i in range(len(changelog)/2): text += "<b>"+unicode(qt.QStyleSheet.escape(changelog[2*i]))+"</b><br>" changesplit = changelog[2*i+1].split("\n") text += unicode(qt.QStyleSheet.escape(changesplit[0]))+"<br>" for i in range(1, len(changesplit)): text += " " + unicode(qt.QStyleSheet.escape(changesplit[i]))+"<br>" self._change.setText(text) self._change.adjustSize() elif num == 4: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 5: # Update URLs self._urls.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item listitem = qt.QListViewItem(self._urls) listitem.setText(0, item[0]) listitem.setText(1, item[1]) listitem.setText(2, item[2])
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._tabwidget.currentIndex() if num == 0: # Update general information if not pkg: self._info.status.setText("") self._info.group.setText("") self._info.installedsize.setText("") self._info.priority.setText("") self._info.channels.setText("") self._info.reference.setText("") return group = None installedsize = None channels = [] urls = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) urls.extend(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" def bold(text): return "<b>" + unicode(QtCore.Qt.escape(text)) + "</b>" def link(text, url): return "<a href=\"" + url + "\">" + unicode( QtCore.Qt.escape(text)) + "</a>" status = pkg.installed and _("Installed") or _("Available") self._info.status.setText(bold(status + flags)) self._info.group.setText(bold(group or _("Unknown"))) self._info.priority.setText(bold(str(pkg.getPriority()))) self._info.channels.setText(bold("\n".join(channels))) links = [] for url in urls: links.append(link(url, url)) self._info.reference.setText(" ".join(links)) if installedsize: self._info.installedsize.setText(bold( sizeToStr(installedsize))) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() pass self._grid.adjustSize() elif num == 1: # Update summary/description self._descr.setText("") if not pkg: return #iter = descrbuf.get_end_iter() text = "" for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: text += "<b>" + unicode( QtCore.Qt.escape(summary)) + "</b><br><br>" description = info.getDescription() if description != summary: text += description + "\n\n" break else: loader = pkg.loaders.keys()[0] self._descr.setText(text) elif num == 2: # Update contents self._cont.setText("") if not pkg: return text = "" for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) pathlist = info.getPathList() pathlist.sort() for path in pathlist: text += path + "\n" self._cont.setText(text) self._cont.adjustSize() elif num == 3: # Update changelog self._change.setText("") if not pkg: return text = "" for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) changelog = info.getChangeLog() for i in range(len(changelog) / 2): text += "<b>" + unicode(QtCore.Qt.escape( changelog[2 * i])) + "</b><br>" changesplit = changelog[2 * i + 1].split("\n") text += unicode(QtCore.Qt.escape(changesplit[0])) + "<br>" for i in range(1, len(changesplit)): text += " " + unicode(QtCore.Qt.escape( changesplit[i])) + "<br>" self._change.setText(text) self._change.adjustSize() elif num == 4: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 5: # Update URLs self._urls.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item listitem = QtGui.QTreeWidgetItem() listitem.setText(0, item[0]) listitem.setText(1, item[1]) listitem.setText(2, item[2]) self._urls.addTopLevelItem(listitem)
def setPackage(self, pkg, _pagenum=None): self._pkg = pkg if _pagenum is not None: num = _pagenum else: num = self._notebook.get_current_page() if num == 0: # Update general information if not pkg: self._info.status.set_text("") self._info.group.set_text("") self._info.installedsize.set_text("") self._info.priority.set_text("") self._info.channels.set_text("") self._info.reference.get_buffer().set_text("") return group = None installedsize = None channels = [] urls = [] for loader in pkg.loaders: info = loader.getInfo(pkg) if group is None: group = info.getGroup() if installedsize is None: installedsize = info.getInstalledSize() channel = loader.getChannel() channels.append("%s (%s)" % (channel.getName() or channel.getAlias(), channel.getAlias())) urls.extend(info.getReferenceURLs()) flags = pkgconf.testAllFlags(pkg) if flags: flags.sort() flags = " (%s)" % ", ".join(flags) else: flags = "" status = pkg.installed and _("Installed") or _("Available") self._info.status.set_text(status+flags) self._info.group.set_text(group or _("Unknown")) self._info.priority.set_text(str(pkg.getPriority())) self._info.channels.set_text("\n".join(channels)) self._info.reference.get_buffer().set_text("") for url in urls: refbuf = self._info.reference.get_buffer() tag = refbuf.create_tag(None, foreground="blue", underline=pango.UNDERLINE_SINGLE) tag.set_data("url", url) refbuf.insert_with_tags(refbuf.get_end_iter(), url, tag) if installedsize: self._info.installedsize.set_text(sizeToStr(installedsize)) self._info.installedsize.show() self._info.installedsize_label.show() else: self._info.installedsize.hide() self._info.installedsize_label.hide() elif num == 1: # Update summary/description descrbuf = self._descrtv.get_buffer() descrbuf.set_text("") if not pkg: return iter = descrbuf.get_end_iter() for loader in pkg.loaders: info = loader.getInfo(pkg) summary = info.getSummary() if summary: descrbuf.insert_with_tags_by_name(iter, summary+"\n\n", "summary") description = info.getDescription() if description != summary: descrbuf.insert_with_tags_by_name(iter, description+"\n\n", "description") break else: loader = pkg.loaders.keys()[0] elif num == 2: # Update contents if not pkg: contbuf = self._conttv.get_buffer() contbuf.set_text("") return self._setContent(pkg) elif num == 3: # Update changelog contbuf = self._change.get_buffer() contbuf.set_text("") if not pkg: return iter = contbuf.get_end_iter() for loader in pkg.loaders: if loader.getInstalled(): break else: loader = pkg.loaders.keys()[0] info = loader.getInfo(pkg) changelog = info.getChangeLog() for i in range(len(changelog)/2): contbuf.insert_with_tags_by_name(iter, changelog[2*i]+"\n", "changetime") changesplit = changelog[2*i+1].split("\n") changedetails = changesplit[0] + "\n" for i in range(1, len(changesplit)): changedetails += " " + changesplit[i] + "\n" contbuf.insert_with_tags_by_name(iter, changedetails, "changelog") elif num == 4: # Update relations if not pkg: self._relations.setPackages([]) return self._setRelations(pkg) elif num == 5: # Update URLs model = self._urls.get_model() model.clear() if not pkg: return items = [] for loader in pkg.loaders: channel = loader.getChannel() alias = channel.getAlias() info = loader.getInfo(pkg) for url in info.getURLs(): items.append((alias, sizeToStr(info.getSize(url)), url)) items.sort() lastitem = None for item in items: if item != lastitem: lastitem = item model.append(item)
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