diff options
Diffstat (limited to 'bin/cnucnu')
-rwxr-xr-x | bin/cnucnu | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/bin/cnucnu b/bin/cnucnu new file mode 100755 index 0000000..4b1c888 --- /dev/null +++ b/bin/cnucnu @@ -0,0 +1,131 @@ +#!/usr/bin/python +# vim: fileencoding=utf8 foldmethod=marker +#{{{ License header: GPLv2+ +# This file is part of cnucnu. +# +# Cnucnu is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# Cnucnu is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cnucnu. If not, see <http://www.gnu.org/licenses/>. +#}}} + +import sys +sys.path.insert(0, './lib') +sys.path.insert(0, '../lib') + +from cnucnu import config +from cnucnu.package_list import Repository, PackageList, Package +from cnucnu.checkshell import CheckShell +from cnucnu.bugzilla_reporter import BugzillaReporter + +import pprint as pprint_module +pp = pprint_module.PrettyPrinter(indent=4) +pprint = pp.pprint + +import pickle + +def analyse_packages(packages): + package_nr = 0 + + if package_nr == 0: + mode = "w" + else: + mode = "a" + + + outdated_f = open("cnucnu-outdated.log", mode) + too_new_f = open("cnucnu-too_new.log", mode) + error_f = open("cnucnu-error.log", mode) + + for package in packages[package_nr:]: + sys.stderr.write("Testing: %i - %s\n" % (package_nr, package.name)) + + try: + if package.upstream_newer: + print "Outdated package %(name)s: Rawhide version: %(repo_version)s, Upstream latest: %(latest_upstream)s" % package + outdated_f.write("%(name)s %(repo_version)s %(latest_upstream)s\n" % package) + elif package.repo_newer: + print "Rawhide newer %(name)s: Rawhide version: %(repo_version)s, Upstream latest: %(latest_upstream)s" % package + too_new_f.write("%(name)s %(repo_version)s %(latest_upstream)s\n" % package) + + except cc_errors.UpstreamVersionRetrievalError, e: + sys.stderr.write("%s\n" % str(e)) + sys.stderr.write("Rawhide Version: %s\n" % package.repo_version) + error_f.write("%s: %s - Rawhide Version: %s\n" % (package.name, str(e), package.repo_version)) + except KeyError, ke: + sys.stderr.write("Package not found in Rawhide: %s\n" % str(ke)) + + package_nr = package_nr + 1 + + outdated_f.close() + too_new_f.close() + error_f.close() + pickle_file = open("data.pickle", "wb") + pickle.dump(packages, pickle_file) + pickle_file.close() + +if __name__ == '__main__': + import re + import cnucnu.errors as cc_errors + + from optparse import OptionParser + parser = OptionParser() + + parser.add_option("", "--shell", dest="action", help="Interactive shell", action="store_const", const="shell") + parser.add_option("", "--config", dest="config_filename", help="config_filename, e.g. for bugzilla credentials", default="./cnucnu.ini") + parser.add_option("", "--create-bugs", dest="action", help="file bugs for outdated packages", action="store_const", const="create-bugs") + parser.add_option("", "--fm-outdated-all", dest="action", help="compare all packages in rawhide with freshmeat", action="store_const", const="fm-outdated-all") + + (options, args) = parser.parse_args() + + conf = config.Config(options.config_filename) + if options.action == "shell": + shell = CheckShell(config=conf) + while True: + try: + if not shell.cmdloop(): + break + except Exception, ex: + print 'Exception occured:' + print repr(ex) + break + elif options.action == "create-bugs": + bugzilla_config = conf.bugzilla_config + br = BugzillaReporter(**bugzilla_config) + + pl = PackageList() + for p in pl: + print "testing: %s" % p.name + try: + if p.upstream_newer: + if p.name not in ['abook', 'crm114', 'crossvc', 'ctorrent', 'ekg2', 'emacs-auctex', 'fdupes', 'hping3', 'libtlen', 'mysqltuner']: + br.report_outdated(p, dry_run=False) + except Exception, e: + pprint(e) + elif options.action == "fm-outdated-all": + print "checking all against FM" + repo = Repository() + package_names = [name for name in repo.repoquery()] + pl=[Package(name, "FM-DEFAULT", "FM-DEFAULT", repo) for name in package_names] + packages = PackageList(packages=pl) + repo.package_list = packages + analyse_packages(packages) + + else: + print "default..." + repo = Repository() + plist = PackageList(repo=repo) + packages = plist.packages + analyse_packages(packages) + + + + |