commit: b25e26fd9f0dc496f5a10eeaf7f921b84e2cd873
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 12 15:24:39 2016 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jan 12 19:08:53 2016 +0000
URL: https://gitweb.gentoo.org/proj/rbot-gentoo.git/commit/?id=b25e26fd
!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-@[email protected]"
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