def main(ctrl, opts): # Argument check if not opts.args: raise Error, _("no package(s) given") if opts.attempt: sysconf.set("attempt-install", True, soft=True) if opts.explain: sysconf.set("explain-changesets", True, soft=True) urls = [] for arg in opts.args[:]: if (os.path.isfile(arg) and '/' in arg or ctrl.checkPackageFile(arg)): ctrl.addFileChannel(arg) opts.args.remove(arg) elif ":/" in arg: urls.append(arg) if urls: succ, fail = ctrl.downloadURLs(urls, _("packages"), targetdir=os.getcwd()) if fail: raise Error, _("Failed to download packages:\n") + \ "\n".join([" %s: %s" % (url, fail[url]) for url in fail]) for url, file in succ.items(): ctrl.addFileChannel(file) opts.args.remove(url) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyInstall) for channel in ctrl.getFileChannels(): for loader in channel.getLoaders(): for pkg in loader.getPackages(): if pkg.installed: raise Error, _("%s is already installed") % pkg trans.enqueue(pkg, INSTALL) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: installed = False names = {} for obj in results: for pkg in obj.packages: if pkg.installed: iface.info( _("%s (for %s) is already installed") % (pkg, arg)) installed = True break else: pkgs.append(pkg) names[pkg.name] = True else: continue break if installed: continue if len(names) == 2 and sysconf.get("rpm-strict-multilib"): from smart.backends.rpm.rpmver import splitarch # two packages with the same version but different arch, pick best if splitarch(pkgs[0].version)[0] == splitarch( pkgs[1].version)[0]: pkg = max(pkgs[0], pkgs[1]) names.pop(pkg.name) pkgs.remove(pkg) if len(names) > 1: raise Error, _("There are multiple matches for '%s':\n%s") % \ (arg, "\n".join([" "+str(x) for x in pkgs])) if len(pkgs) > 1: sortUpgrades(pkgs) names = {} for pkg in pkgs: names.setdefault(pkg.name, []).append(pkg) for name in names: pkg = names[name][0] if pkg.installed: iface.info(_("%s is already installed") % pkg) else: trans.enqueue(pkg, INSTALL) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, install=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): # Argument check if not opts.args: raise Error, _("no package(s) given") if opts.explain: sysconf.set("explain-changesets", True, soft=True) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyRemove) policy = trans.getPolicy() if opts.auto: rmcs = ctrl.markAndSweep() confirm = not opts.yes ctrl.commitChangeSet(rmcs, confirm=confirm) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed: dct[obj] = True else: for pkg in obj.packages: if pkg.installed: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: for obj in results: for pkg in obj.packages: pkgs.append(pkg) found = False for pkg in pkgs: if pkg.installed: found = True trans.enqueue(pkg, REMOVE) else: policy.setLocked(pkg, True) if not found: iface.warning(_("'%s' matches no installed packages") % arg) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, remove=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): if opts.explain: sysconf.set("explain-changesets", True, soft=True) if opts.update: from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyUpgrade) if opts.args: for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed: dct[obj] = True else: for pkg in obj.packages: if pkg.installed: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 foundany = False foundinstalled = False for obj in results: if isinstance(obj, Package): if obj.installed: trans.enqueue(obj, UPGRADE) foundinstalled = True foundany = True if not foundany: for obj in results: if not isinstance(obj, Package): for pkg in obj.packages: if pkg.installed: foundinstalled = True trans.enqueue(pkg, UPGRADE) foundany = True if not foundinstalled: iface.warning(_("'%s' matches no installed packages") % arg) else: for pkg in cache.getPackages(): if pkg.installed: trans.enqueue(pkg, UPGRADE) iface.showStatus(_("Computing transaction...")) trans.run() if trans and opts.check or opts.check_update: checkfile = os.path.expanduser("~/.smart/upgradecheck") if os.path.isfile(checkfile): file = open(checkfile) checkstate = cPickle.load(file) file.close() else: checkstate = None changeset = trans.getChangeSet() state = changeset.getPersistentState() if opts.check_update: dirname = os.path.dirname(checkfile) if not os.path.isdir(dirname): os.makedirs(dirname) file = open(checkfile, "w") cPickle.dump(state, file, 2) file.close() if not state: iface.showStatus(_("No interesting upgrades available.")) return 2 elif checkstate: for entry in state: if checkstate.get(entry) != state[entry]: break else: iface.showStatus(_("There are pending upgrades!")) return 1 iface.showStatus(_("There are new upgrades available!")) elif not trans: iface.showStatus(_("No interesting upgrades available.")) else: iface.hideStatus() confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, install=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts, reloadchannels=True): # Argument check opts.check_args_of_option("channels", 1) 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.all: relateset = dict.fromkeys(cache.getPackages(), True) else: relateset = {} if opts.available: for pkg in cache.getPackages(): if not pkg.installed: relateset[pkg] = True else: for loader in pkg.loaders: if not loader.getInstalled(): relateset[pkg] = True break if opts.channels: aliases = opts.channels.split(",") notfound = [] disabled = [] channels = sysconf.get("channels", ()) for alias in aliases: if alias not in channels: notfound.append(alias) elif channels[alias].get("disabled"): disabled.append(alias) if notfound: raise Error, _("Channels not found: %s") % ", ".join(notfound) elif disabled: iface.warning(_("Channels are disabled: %s") % \ ", ".join(disabled)) for pkg in cache.getPackages(): for loader in pkg.loaders: if loader.getChannel().getAlias() in opts.channels: relateset[pkg] = True break if opts.installed or not opts.channels and not opts.available: for pkg in cache.getPackages(): if pkg.installed: relateset[pkg] = True if opts.args: checkset = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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)) checkset.update(dct) else: checkset = relateset return not checkPackages(cache, checkset, relateset, report=True)
def main(ctrl, opts, reloadchannels=True): 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 not opts.args: packages = cache.getPackages()[:] else: packages = {} 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(dct.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 else: for obj in results: if isinstance(obj, Package): packages[obj] = True else: packages.update(dict.fromkeys(obj.packages, True)) packages = packages.keys() if opts.installed or opts.dupes or opts.leaves or opts.orphans: packages = [pkg for pkg in packages if pkg.installed] if opts.dupes: dupes = [] for pkg in packages: dupe = False for prv in cache.getProvides(pkg.name): for prvpkg in prv.packages: if prvpkg == pkg: continue if prvpkg.installed: dupe = True if dupe: dupes.append(pkg) packages = dupes if opts.leaves: leaves = [] for pkg in packages: leaf = True for prv in pkg.provides: for req in prv.requiredby: for reqpkg in req.packages: if reqpkg.installed: leaf = False if leaf: leaves.append(pkg) packages = leaves if opts.orphans: orphans = [] for pkg in packages: orphan = True for loader in pkg.loaders: if not loader.getInstalled(): orphan = False if orphan: orphans.append(pkg) packages = orphans if opts.newest: newest = {} for pkg in packages: if pkg.name in newest: if pkg > newest[pkg.name]: newest[pkg.name] = pkg else: newest[pkg.name] = pkg packages = [pkg for pkg in packages if pkg == newest[pkg.name]] whoprovides = [] for name in opts.provides: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for prv in cache.getProvides(): if p.match(prv.name): whoprovides.append(Provides(prv.name, version)) else: whoprovides.append(Provides(name, version)) whorequires = [] for name in opts.requires: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for req in cache.getRequires(): if p.match(req.name): whorequires.append(Provides(req.name, version)) else: whorequires.append(Provides(name, version)) whoupgrades = [] for name in opts.upgrades: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for upg in cache.getUpgrades(): if p.match(upg.name): whoupgrades.append(Provides(upg.name, version)) else: whoupgrades.append(Provides(name, version)) whoconflicts = [] for name in opts.conflicts: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for cnf in cache.getConflicts(): if p.match(cnf.name): whoconflicts.append(Provides(cnf.name, version)) else: whoconflicts.append(Provides(name, version)) if whoprovides or whorequires or whoupgrades or whoconflicts: newpackages = {} for whoprv in whoprovides: for prv in cache.getProvides(whoprv.name): if not whoprv.version or prv.name == prv.version: for pkg in prv.packages: if pkg in packages: newpackages[pkg] = True for whoreq in whorequires: for req in cache.getRequires(whoreq.name): if req.matches(whoreq): for pkg in req.packages: if pkg in packages: newpackages[pkg] = True for whoupg in whoupgrades: for upg in cache.getUpgrades(whoupg.name): if upg.matches(whoupg): for pkg in upg.packages: if pkg in packages: newpackages[pkg] = True for whocnf in whoconflicts: for cnf in cache.getConflicts(whocnf.name): if cnf.matches(whocnf): for pkg in cnf.packages: if pkg in packages: newpackages[pkg] = True packages = newpackages.keys() def sh2re(pattern, stripeol=True, joinspace=True): """ Convert the shell-style pattern to a regular expression. """ pattern = fnmatch.translate(pattern) if stripeol: if pattern.endswith("$"): pattern = pattern[:-1] elif pattern.endswith('\Z(?ms)'): pattern = pattern[:-7] pattern = pattern.replace(r"\ ", " ") if joinspace: pattern = r"\s+".join(pattern.split()) return re.compile(pattern, re.I) hasname = [] for token in opts.name: hasname.append(sh2re(token)) hasgroup = [] for token in opts.group: hasgroup.append(sh2re(token)) haschannel = [] for token in opts.channel: haschannel.append(token) hasflag = [] for token in opts.flag: hasflag.append(token) hassummary = [] for token in opts.summary: hassummary.append(sh2re(token)) hasdescription = [] for token in opts.description: hasdescription.append(sh2re(token)) haspath = [] for token in opts.path: haspath.append(sh2re(token, stripeol=False, joinspace=False)) hasurl = [] for token in opts.url: haspath.append(sh2re(token, joinspace=False)) if hasname or hasgroup or hassummary or hasdescription or haspath or hasurl: newpackages = {} needsinfo = hasgroup or hassummary or hasdescription or haspath or hasurl for pkg in cache.getPackages(): if hasname: for pattern in hasname: if pattern.search(pkg.name): newpackages[pkg] = True if needsinfo: info = pkg.loaders.keys()[0].getInfo(pkg) if hasgroup: for pattern in hasgroup: if pattern.search(info.getGroup()): newpackages[pkg] = True if hassummary: for pattern in hassummary: if pattern.search(info.getSummary()): newpackages[pkg] = True if hasdescription: for pattern in hasdescription: if pattern.search(info.getDescription()): newpackages[pkg] = True if haspath: for pattern in haspath: for path in info.getPathList(): if pattern.match(path): newpackages[pkg] = True if hasurl: for pattern in hasurl: for url in info.getReferenceURLs(): if pattern.match(url): newpackages[pkg] = True if hasflag and not (hasname or needsinfo): for flag in hasflag: if pkgconf.testFlag(flag, pkg): newpackages[pkg] = True elif hasflag and pkg in newpackages: for flag in hasflag: if not pkgconf.testFlag(flag, pkg): del newpackages[pkg] break packages = newpackages.keys() if haschannel: newpackages = {} for pkg in packages: for loader in pkg.loaders: alias = loader.getChannel().getAlias() if alias in haschannel: newpackages[pkg] = True packages = newpackages.keys() if hasflag: newpackages = {} for pkg in packages: for flag in hasflag: if pkgconf.testFlag(flag, pkg): newpackages[pkg] = True packages = newpackages.keys() format = opts.format.lower()+"output" for attr, value in globals().items(): if attr.lower() == format: output = value(opts) break else: raise Error, "Output format unknown" output.setPackageCount(len(packages)) output.startGrabOutput() output.start() packages.sort() for pkg in packages: output.showPackage(pkg) if pkg.provides and (opts.show_provides or whoprovides): pkg.provides.sort() first = True for prv in pkg.provides: if whoprovides: for whoprv in whoprovides: if (prv.name == whoprv.name and (not whoprv.version or prv.version == whoprv.version)): break else: continue output.showProvides(pkg, prv) if opts.show_requiredby and prv.requiredby: for req in prv.requiredby: req.packages.sort() for reqpkg in req.packages: if opts.installed and not reqpkg.installed: continue output.showRequiredBy(pkg, prv, req, reqpkg) if opts.show_upgradedby and prv.upgradedby: for upg in prv.upgradedby: upg.packages.sort() for upgpkg in upg.packages: if opts.installed and not upgpkg.installed: continue output.showUpgradedBy(pkg, prv, upg, upgpkg) if opts.show_conflictedby and prv.conflictedby: for cnf in prv.conflictedby: cnf.packages.sort() for cnfpkg in cnf.packages: if cnfpkg is pkg: continue if opts.installed and not cnfpkg.installed: continue output.showConflictedBy(pkg, prv, cnf, cnfpkg) if pkg.requires and (opts.show_requires or opts.show_prerequires or whorequires): pkg.requires.sort() first = True for req in pkg.requires: if opts.show_prerequires and not isinstance(req, PreRequires): continue if whorequires: matchnames = req.getMatchNames() for whoreq in whorequires: if whoreq.name in matchnames and req.matches(whoreq): break else: continue output.showRequires(pkg, req) if opts.show_providedby and req.providedby: for prv in req.providedby: prv.packages.sort() for prvpkg in prv.packages: if opts.installed and not prvpkg.installed: continue output.showRequiresProvidedBy(pkg, req, prv, prvpkg) if pkg.recommends and (opts.show_recommends): pkg.recommends.sort() first = True for req in pkg.recommends: output.showRecommends(pkg, req) if opts.show_providedby and req.providedby: for prv in req.providedby: prv.packages.sort() for prvpkg in prv.packages: if opts.installed and not prvpkg.installed: continue output.showRecommendsProvidedBy(pkg, req, prv, prvpkg) if pkg.upgrades and (opts.show_upgrades or whoupgrades): pkg.upgrades.sort() first = True for upg in pkg.upgrades: if whoupgrades: matchnames = upg.getMatchNames() for whoupg in whoupgrades: if whoupg.name in matchnames and upg.matches(whoupg): break else: continue output.showUpgrades(pkg, upg) if opts.show_providedby and upg.providedby: for prv in upg.providedby: prv.packages.sort() for prvpkg in prv.packages: if opts.installed and not prvpkg.installed: continue output.showUpgradesProvidedBy(pkg, upg, prv, prvpkg) if pkg.conflicts and (opts.show_conflicts or whoconflicts): pkg.conflicts.sort() first = True for cnf in pkg.conflicts: if whoconflicts: matchnames = cnf.getMatchNames() for whocnf in whoconflicts: if whocnf.name in matchnames and cnf.matches(whocnf): break else: continue output.showConflicts(pkg, cnf) if opts.show_providedby and cnf.providedby: for prv in cnf.providedby: prv.packages.sort() for prvpkg in prv.packages: if prvpkg is pkg: continue if opts.installed and not prvpkg.installed: continue output.showConflictsProvidedBy(pkg, upg, prv, prvpkg) output.end() output.stopGrabOutput()
def main(ctrl, opts): if opts.explain: sysconf.set("explain-changesets", True, soft=True) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyInstall) if opts.args: pkgs = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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: trans.enqueue(pkg, FIX) iface.showStatus(_("Computing transaction...")) trans.run() if not trans: iface.showStatus(_("No problems to resolve!")) else: iface.hideStatus() confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): # Argument check opts.check_args_of_option("target", 1) opts.check_args_of_option("output", 1) opts.check_args_of_option("from_urls", -1) opts.check_args_of_option("from_metalink", -1) if not opts.args and not opts.from_metalink and not opts.from_urls: raise Error, _("no package(s) given") packages = [] if opts.args: if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() packages = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: installed = False names = {} for obj in results: for pkg in obj.packages: if pkg.installed: iface.warning( _("%s (for %s) is already installed") % (pkg, arg)) installed = True break else: pkgs.append(pkg) names[pkg.name] = True else: continue break if installed: continue if len(names) > 1: raise Error, _("There are multiple matches for '%s':\n%s") % \ (arg, "\n".join([" "+str(x) for x in pkgs])) if len(pkgs) > 1: sortUpgrades(pkgs) names = {} for pkg in pkgs: names.setdefault(pkg.name, []).append(pkg) for name in names: packages[names[name][0]] = True packages = packages.keys() if opts.urls: ctrl.dumpURLs(packages) elif opts.metalink: ctrl.dumpMetalink(packages) else: ctrl.downloadPackages(packages, targetdir=opts.target) if opts.pack: ctrl.packPackages(packages, targetdir=opts.target, \ outputname=opts.output) elif opts.from_urls: urls = [] for arg in opts.from_urls: if ":/" in arg: urls.append(arg) elif os.path.isfile(arg): line = open(arg).readline() if line.startswith('<?xml'): # assume XML is metalink ctrl.downloadMetalink(arg, _("Metalink"), targetdir=opts.target) continue urls.extend([x.strip() for x in open(arg)]) else: raise Error, _("Argument is not a file nor url: %s") % arg if urls: ctrl.downloadURLs(urls, _("URLs"), targetdir=opts.target) elif opts.from_metalink: for arg in opts.from_metalink: ctrl.downloadMetalink(arg, _("Metalink"), targetdir=opts.target)
def main(ctrl, opts): # Argument check opts.check_args_of_option("target", 1) opts.check_args_of_option("output", 1) opts.check_args_of_option("from_urls", -1) opts.check_args_of_option("from_metalink", -1) if not opts.args and not opts.from_metalink and not opts.from_urls: raise Error, _("no package(s) given") packages = [] if opts.args: if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() packages = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: installed = False names = {} for obj in results: for pkg in obj.packages: if pkg.installed: iface.warning(_("%s (for %s) is already installed") % (pkg, arg)) installed = True break else: pkgs.append(pkg) names[pkg.name] = True else: continue break if installed: continue if len(names) > 1: raise Error, _("There are multiple matches for '%s':\n%s") % \ (arg, "\n".join([" "+str(x) for x in pkgs])) if len(pkgs) > 1: sortUpgrades(pkgs) names = {} for pkg in pkgs: names.setdefault(pkg.name, []).append(pkg) for name in names: packages[names[name][0]] = True packages = packages.keys() if opts.urls: ctrl.dumpURLs(packages) elif opts.metalink: ctrl.dumpMetalink(packages) else: ctrl.downloadPackages(packages, targetdir=opts.target) if opts.pack: ctrl.packPackages(packages, targetdir=opts.target, \ outputname=opts.output) elif opts.from_urls: urls = [] for arg in opts.from_urls: if ":/" in arg: urls.append(arg) elif os.path.isfile(arg): line = open(arg).readline() if line.startswith('<?xml'): # assume XML is metalink ctrl.downloadMetalink(arg, _("Metalink"), targetdir=opts.target) continue urls.extend([x.strip() for x in open(arg)]) else: raise Error, _("Argument is not a file nor url: %s") % arg if urls: ctrl.downloadURLs(urls, _("URLs"), targetdir=opts.target) elif opts.from_metalink: for arg in opts.from_metalink: ctrl.downloadMetalink(arg, _("Metalink"), targetdir=opts.target)
def main(ctrl, opts): # Argument check opts.check_args_of_option("flag", 1) if opts.explain: sysconf.set("explain-changesets", True, soft=True) if opts.update or sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyUpgrade) if opts.args: for arg in opts.args: op = UPGRADE if arg.startswith('+'): arg = arg[1:] op = INSTALL if arg.startswith('-'): arg = arg[1:] op = REMOVE ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed or op == INSTALL: dct[obj] = True else: for pkg in obj.packages: if pkg.installed or op == INSTALL: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 foundany = False foundinstalled = False for obj in results: if isinstance(obj, Package): if (obj.installed or op == INSTALL) and (not opts.flag or pkgconf.testFlag(opts.flag, obj)): trans.enqueue(obj, op) foundinstalled = obj.installed foundany = True if not foundany: for obj in results: if not isinstance(obj, Package): for pkg in obj.packages: if (pkg.installed or op == INSTALL) and (not opts.flag or pkgconf.testFlag(opts.flag, pkg)): foundinstalled = pkg.installed trans.enqueue(pkg, op) foundany = True if not foundinstalled and op != INSTALL: iface.warning(_("'%s' matches no installed packages") % arg) else: for pkg in cache.getPackages(): if pkg.installed and (not opts.flag or pkgconf.testFlag(opts.flag, pkg)): trans.enqueue(pkg, UPGRADE) iface.showStatus(_("Computing transaction...")) trans.run() if trans and opts.check or opts.check_update: checkfile = os.path.expanduser("~/.smart/upgradecheck") if os.path.isfile(checkfile): file = open(checkfile) checkstate = cPickle.load(file) file.close() else: checkstate = None changeset = trans.getChangeSet() state = changeset.getPersistentState() if opts.check_update: dirname = os.path.dirname(checkfile) if not os.path.isdir(dirname): os.makedirs(dirname) file = open(checkfile, "w") cPickle.dump(state, file, 2) file.close() if not state: iface.showStatus(_("No interesting upgrades available.")) return 2 elif checkstate: for entry in state: if checkstate.get(entry) != state[entry]: break else: iface.showStatus(_("There are pending upgrades!")) return 1 iface.showStatus(_("There are new upgrades available!")) elif not trans: iface.showStatus(_("No interesting upgrades available.")) else: iface.hideStatus() confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, install=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): # Argument check if not opts.args: raise Error, _("no package(s) given") if opts.explain: sysconf.set("explain-changesets", True, soft=True) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyInstall) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed: dct[obj] = True else: for pkg in obj.packages: if pkg.installed: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: for obj in results: for pkg in obj.packages: pkgs.append(pkg) found = False for pkg in pkgs: if pkg.installed: found = True trans.enqueue(pkg, REINSTALL) for loader in pkg.loaders: if not loader.getInstalled(): break else: raise Error, _("'%s' is not available for " "reinstallation") % pkg if not found: iface.warning(_("'%s' matches no installed packages") % arg) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts, reloadchannels=True): 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 not opts.args: packages = cache.getPackages()[:] else: packages = {} 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(dct.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 else: for obj in results: if isinstance(obj, Package): packages[obj] = True else: packages.update(dict.fromkeys(obj.packages, True)) packages = packages.keys() if opts.installed or opts.dupes or opts.leaves or opts.orphans: packages = [pkg for pkg in packages if pkg.installed] if opts.dupes: dupes = [] for pkg in packages: dupe = False for prv in cache.getProvides(pkg.name): for prvpkg in prv.packages: if prvpkg == pkg: continue if prvpkg.installed: dupe = True if dupe: dupes.append(pkg) packages = dupes if opts.leaves: leaves = [] for pkg in packages: leaf = True for prv in pkg.provides: for req in prv.requiredby: for reqpkg in req.packages: if reqpkg.installed: leaf = False if leaf: leaves.append(pkg) packages = leaves if opts.orphans: orphans = [] for pkg in packages: orphan = True for loader in pkg.loaders: if not loader.getInstalled(): orphan = False if orphan: orphans.append(pkg) packages = orphans if opts.newest: newest = {} for pkg in packages: if pkg.name in newest: if pkg > newest[pkg.name]: newest[pkg.name] = pkg else: newest[pkg.name] = pkg packages = [pkg for pkg in packages if pkg == newest[pkg.name]] whoprovides = [] for name in opts.provides: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for prv in cache.getProvides(): if p.match(prv.name): whoprovides.append(Provides(prv.name, version)) else: whoprovides.append(Provides(name, version)) whorequires = [] for name in opts.requires: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for req in cache.getRequires(): if p.match(req.name): whorequires.append(Provides(req.name, version)) else: whorequires.append(Provides(name, version)) whoupgrades = [] for name in opts.upgrades: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for upg in cache.getUpgrades(): if p.match(upg.name): whoupgrades.append(Provides(upg.name, version)) else: whoupgrades.append(Provides(name, version)) whoconflicts = [] for name in opts.conflicts: if '=' in name: name, version = name.split('=') else: version = None if isGlob(name): p = re.compile(fnmatch.translate(name), re.I) for cnf in cache.getConflicts(): if p.match(cnf.name): whoconflicts.append(Provides(cnf.name, version)) else: whoconflicts.append(Provides(name, version)) if whoprovides or whorequires or whoupgrades or whoconflicts: newpackages = {} for whoprv in whoprovides: for prv in cache.getProvides(whoprv.name): if not whoprv.version or prv.name == prv.version: for pkg in prv.packages: if pkg in packages: newpackages[pkg] = True for whoreq in whorequires: for req in cache.getRequires(whoreq.name): if req.matches(whoreq): for pkg in req.packages: if pkg in packages: newpackages[pkg] = True for whoupg in whoupgrades: for upg in cache.getUpgrades(whoupg.name): if upg.matches(whoupg): for pkg in upg.packages: if pkg in packages: newpackages[pkg] = True for whocnf in whoconflicts: for cnf in cache.getConflicts(whocnf.name): if cnf.matches(whocnf): for pkg in cnf.packages: if pkg in packages: newpackages[pkg] = True packages = newpackages.keys() def sh2re(pattern, stripeol=True, joinspace=True): """ Convert the shell-style pattern to a regular expression. """ pattern = fnmatch.translate(pattern) if stripeol: if pattern.endswith("$"): pattern = pattern[:-1] elif pattern.endswith('\Z(?ms)'): pattern = pattern[:-7] pattern = pattern.replace(r"\ ", " ") if joinspace: pattern = r"\s+".join(pattern.split()) return re.compile(pattern, re.I) hasname = [] for token in opts.name: hasname.append(sh2re(token)) hasgroup = [] for token in opts.group: hasgroup.append(sh2re(token)) haschannel = [] for token in opts.channel: haschannel.append(token) hasflag = [] for token in opts.flag: hasflag.append(token) hassummary = [] for token in opts.summary: hassummary.append(sh2re(token)) hasdescription = [] for token in opts.description: hasdescription.append(sh2re(token)) haspath = [] for token in opts.path: haspath.append(sh2re(token, stripeol=False, joinspace=False)) hasurl = [] for token in opts.url: haspath.append(sh2re(token, joinspace=False)) if hasname or hasgroup or hassummary or hasdescription or haspath or hasurl: newpackages = {} needsinfo = hasgroup or hassummary or hasdescription or haspath or hasurl for pkg in cache.getPackages(): if hasname: for pattern in hasname: if pattern.search(pkg.name): newpackages[pkg] = True if needsinfo: info = pkg.loaders.keys()[0].getInfo(pkg) if hasgroup: for pattern in hasgroup: if pattern.search(info.getGroup()): newpackages[pkg] = True if hassummary: for pattern in hassummary: if pattern.search(info.getSummary()): newpackages[pkg] = True if hasdescription: for pattern in hasdescription: if pattern.search(info.getDescription()): newpackages[pkg] = True if haspath: for pattern in haspath: for path in info.getPathList(): if pattern.match(path): newpackages[pkg] = True if hasurl: for pattern in hasurl: for url in info.getReferenceURLs(): if pattern.match(url): newpackages[pkg] = True if hasflag and not (hasname or needsinfo): for flag in hasflag: if pkgconf.testFlag(flag, pkg): newpackages[pkg] = True elif hasflag and pkg in newpackages: for flag in hasflag: if not pkgconf.testFlag(flag, pkg): del newpackages[pkg] break packages = newpackages.keys() if haschannel: newpackages = {} for pkg in packages: for loader in pkg.loaders: alias = loader.getChannel().getAlias() if alias in haschannel: newpackages[pkg] = True packages = newpackages.keys() if hasflag: newpackages = {} for pkg in packages: for flag in hasflag: if pkgconf.testFlag(flag, pkg): newpackages[pkg] = True packages = newpackages.keys() format = opts.format.lower() + "output" for attr, value in globals().items(): if attr.lower() == format: output = value(opts) break else: raise Error, "Output format unknown" output.setPackageCount(len(packages)) output.startGrabOutput() output.start() packages.sort() for pkg in packages: output.showPackage(pkg) if pkg.provides and (opts.show_provides or whoprovides): pkg.provides.sort() first = True for prv in pkg.provides: if whoprovides: for whoprv in whoprovides: if (prv.name == whoprv.name and (not whoprv.version or prv.version == whoprv.version)): break else: continue output.showProvides(pkg, prv) if opts.show_requiredby and prv.requiredby: for req in prv.requiredby: req.packages.sort() for reqpkg in req.packages: if opts.installed and not reqpkg.installed: continue output.showRequiredBy(pkg, prv, req, reqpkg) if opts.show_upgradedby and prv.upgradedby: for upg in prv.upgradedby: upg.packages.sort() for upgpkg in upg.packages: if opts.installed and not upgpkg.installed: continue output.showUpgradedBy(pkg, prv, upg, upgpkg) if opts.show_conflictedby and prv.conflictedby: for cnf in prv.conflictedby: cnf.packages.sort() for cnfpkg in cnf.packages: if cnfpkg is pkg: continue if opts.installed and not cnfpkg.installed: continue output.showConflictedBy(pkg, prv, cnf, cnfpkg) if pkg.requires and (opts.show_requires or opts.show_prerequires or whorequires): pkg.requires.sort() first = True for req in pkg.requires: if opts.show_prerequires and not isinstance(req, PreRequires): continue if whorequires: matchnames = req.getMatchNames() for whoreq in whorequires: if whoreq.name in matchnames and req.matches(whoreq): break else: continue output.showRequires(pkg, req) if opts.show_providedby and req.providedby: for prv in req.providedby: prv.packages.sort() for prvpkg in prv.packages: if opts.installed and not prvpkg.installed: continue output.showRequiresProvidedBy( pkg, req, prv, prvpkg) if pkg.upgrades and (opts.show_upgrades or whoupgrades): pkg.upgrades.sort() first = True for upg in pkg.upgrades: if whoupgrades: matchnames = upg.getMatchNames() for whoupg in whoupgrades: if whoupg.name in matchnames and upg.matches(whoupg): break else: continue output.showUpgrades(pkg, upg) if opts.show_providedby and upg.providedby: for prv in upg.providedby: prv.packages.sort() for prvpkg in prv.packages: if opts.installed and not prvpkg.installed: continue output.showUpgradesProvidedBy( pkg, upg, prv, prvpkg) if pkg.conflicts and (opts.show_conflicts or whoconflicts): pkg.conflicts.sort() first = True for cnf in pkg.conflicts: if whoconflicts: matchnames = cnf.getMatchNames() for whocnf in whoconflicts: if whocnf.name in matchnames and cnf.matches(whocnf): break else: continue output.showConflicts(pkg, cnf) if opts.show_providedby and cnf.providedby: for prv in cnf.providedby: prv.packages.sort() for prvpkg in prv.packages: if prvpkg is pkg: continue if opts.installed and not prvpkg.installed: continue output.showConflictsProvidedBy( pkg, upg, prv, prvpkg) output.end() output.stopGrabOutput()
def main(ctrl, opts): if opts.explain: sysconf.set("explain-changesets", True, soft=True) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyRemove) policy = trans.getPolicy() if opts.auto: rmcs = ctrl.markAndSweep() confirm = not opts.yes ctrl.commitChangeSet(rmcs, confirm=confirm) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed: dct[obj] = True else: for pkg in obj.packages: if pkg.installed: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: for obj in results: for pkg in obj.packages: pkgs.append(pkg) found = False for pkg in pkgs: if pkg.installed: found = True trans.enqueue(pkg, REMOVE) else: policy.setLocked(pkg, True) if not found: iface.warning(_("'%s' matches no installed packages") % arg) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, remove=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): if opts.explain: sysconf.set("explain-changesets", True, soft=True) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyInstall) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) if not results: if suggestions: dct = {} for r, obj in suggestions: if isinstance(obj, Package): if obj.installed: dct[obj] = True else: for pkg in obj.packages: if pkg.installed: dct[pkg] = True if not dct: del suggestions[:] if suggestions: 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: for obj in results: for pkg in obj.packages: pkgs.append(pkg) found = False for pkg in pkgs: if pkg.installed: found = True trans.enqueue(pkg, REINSTALL) for loader in pkg.loaders: if not loader.getInstalled(): break else: raise Error, _("'%s' is not available for " "reinstallation") % pkg if not found: iface.warning(_("'%s' matches no installed packages") % arg) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts): # Argument check if not opts.args: raise Error, _("no package(s) given") if opts.attempt: sysconf.set("attempt-install", True, soft=True) if opts.explain: sysconf.set("explain-changesets", True, soft=True) urls = [] for arg in opts.args[:]: if (os.path.isfile(arg) and '/' in arg or ctrl.checkPackageFile(arg)): ctrl.addFileChannel(arg) opts.args.remove(arg) elif ":/" in arg: urls.append(arg) if urls: succ, fail = ctrl.downloadURLs(urls, _("packages"), targetdir=os.getcwd()) if fail: raise Error, _("Failed to download packages:\n") + \ "\n".join([" %s: %s" % (url, fail[url]) for url in fail]) for url, file in succ.items(): ctrl.addFileChannel(file) opts.args.remove(url) if sysconf.get("auto-update"): from smart.commands import update updateopts = update.parse_options([]) update.main(ctrl, updateopts) else: ctrl.reloadChannels() cache = ctrl.getCache() trans = Transaction(cache, PolicyInstall) for channel in ctrl.getFileChannels(): for loader in channel.getLoaders(): for pkg in loader.getPackages(): if pkg.installed: raise Error, _("%s is already installed") % pkg trans.enqueue(pkg, INSTALL) for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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 pkgs = [] for obj in results: if isinstance(obj, Package): pkgs.append(obj) if not pkgs: installed = False names = {} for obj in results: for pkg in obj.packages: if pkg.installed: iface.info(_("%s (for %s) is already installed") % (pkg, arg)) installed = True break else: pkgs.append(pkg) names[pkg.name] = True else: continue break if installed: continue if len(names) == 2 and sysconf.get("rpm-strict-multilib"): from smart.backends.rpm.rpmver import splitarch # two packages with the same version but different arch, pick best if splitarch(pkgs[0].version)[0] == splitarch(pkgs[1].version)[0]: pkg = max(pkgs[0], pkgs[1]) names.pop(pkg.name) pkgs.remove(pkg) if len(names) > 1: raise Error, _("There are multiple matches for '%s':\n%s") % \ (arg, "\n".join([" "+str(x) for x in pkgs])) if len(pkgs) > 1: sortUpgrades(pkgs) names = {} for pkg in pkgs: names.setdefault(pkg.name, []).append(pkg) for name in names: pkg = names[name][0] if pkg.installed: iface.info(_("%s is already installed") % pkg) else: trans.enqueue(pkg, INSTALL) iface.showStatus(_("Computing transaction...")) trans.run() iface.hideStatus() if trans: confirm = not opts.yes if opts.urls: ctrl.dumpTransactionURLs(trans) elif opts.metalink: ctrl.dumpTransactionMetalink(trans) elif opts.dump: ctrl.dumpTransactionPackages(trans, install=True) elif opts.download: ctrl.downloadTransaction(trans, confirm=confirm) elif opts.stepped: ctrl.commitTransactionStepped(trans, confirm=confirm) else: ctrl.commitTransaction(trans, confirm=confirm)
def main(ctrl, opts, reloadchannels=True): 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.all: relateset = dict.fromkeys(cache.getPackages(), True) else: relateset = {} if opts.available: for pkg in cache.getPackages(): if not pkg.installed: relateset[pkg] = True else: for loader in pkg.loaders: if not loader.getInstalled(): relateset[pkg] = True break if opts.channels: aliases = opts.channels.split(",") notfound = [] disabled = [] channels = sysconf.get("channels", ()) for alias in aliases: if alias not in channels: notfound.append(alias) elif channels[alias].get("disabled"): disabled.append(alias) if notfound: raise Error, _("Channels not found: %s") % ", ".join(notfound) elif disabled: iface.warning(_("Channels are disabled: %s") % \ ", ".join(disabled)) for pkg in cache.getPackages(): for loader in pkg.loaders: if loader.getChannel().getAlias() in opts.channels: relateset[pkg] = True break if opts.installed or not opts.channels and not opts.available: for pkg in cache.getPackages(): if pkg.installed: relateset[pkg] = True if opts.args: checkset = {} for arg in opts.args: ratio, results, suggestions = ctrl.search(arg) 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)) checkset.update(dct) else: checkset = relateset return not checkPackages(cache, checkset, relateset, report=True)
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 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