From b25e26fd9f0dc496f5a10eeaf7f921b84e2cd873 Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Tue, 12 Jan 2016 16:24:39 +0100 Subject: !meta: Do queries using packages.gentoo.org --- gentoo-data.rb | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/gentoo-data.rb b/gentoo-data.rb index b1d9827..1a165c1 100644 --- a/gentoo-data.rb +++ b/gentoo-data.rb @@ -34,6 +34,7 @@ GLSA_SRC = "#{ENV['PORTDIR']}/metadata/glsa/glsa-@GLSA_ID@.xml" HERDS_SRC = 'https://api.gentoo.org/packages/herds.xml' PROJECTS_SRC = 'https://api.gentoo.org/metastructure/projects.xml' PGO_RESOLVE_URI = 'https://packages.gentoo.org/packages/resolve.json?atom=%s' +PGO_DATA_URI = 'https://packages.gentoo.org/packages/%s.json' class GentooPlugin < Plugin Config.register Config::StringValue.new('gentoo.scriptdir', @@ -73,18 +74,31 @@ class GentooPlugin < Plugin end end + def pgo_get(m, atom) + pkg = pgo_resolve_one(m, atom) + return if pkg.nil? + + uri = PGO_DATA_URI % [pkg['atom']] + res = @bot.httputil.get(uri) + return JSON.parse(res) + end + + def meta_print(m, pkg) + # TODO: handle description? + maints = pkg['maintainers'].map{|x| x['email'].chomp('@gentoo.org')}.join(', ') + maints = '(none)' if maints.empty? + herds = pkg['herds'].join(', ') + herds = '(none)' if herds.empty? + + m.reply "#{pkg['atom']}; herds: #{herds}; maintainers: #{maints}" + end + def meta(m, params) - cp = params[:pkg] - cp = validate_package(m, cp) - return if cp.nil? - f = IO.popen("#{python} #{scriptdir}/metadata.py '#{cp}'") - r = f.readlines - f.close - if r.length > 0 - m.reply "#{r}" - else - m.reply "Cannot find metadata for '#{cp}'" - end + atom = params[:pkg] + pkg = pgo_get(m, atom) + return if pkg.nil? + + meta_print(m, pkg) end def validpkg(m, params) @@ -95,18 +109,12 @@ class GentooPlugin < Plugin end def meta_verbose(m, params) - cp = params[:pkg] - cp = validate_package(m, cp) - return if cp.nil? - f = IO.popen("#{python} #{scriptdir}/metadata.py '#{cp}'") - output = f.readlines - f.close - m.reply "#{output}" - herds = [] - output[0].gsub!(/(Maintainer:|Description:).*/,'') - mre = /Herd: +([-[:alnum:], ]+) .*/.match(output[0]) - herds = mre[1].strip.split(/[, ]+/).map { |s| s.strip }.flatten if mre and mre[1] - herds.each { |h| + atom = params[:pkg] + pkg = pgo_get(m, atom) + return if pkg.nil? + + meta_print(m, pkg) + pkg['herds'].each { |h| debug("meta -v calling herd for #{h}") p = params.clone p[:herd] = h -- cgit v1.2.3-65-gdbad