aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2016-01-12 15:57:04 +0100
committerMichał Górny <mgorny@gentoo.org>2016-01-12 20:08:53 +0100
commitfbfaafce172be5fc7d9547ed200e6d22214792a8 (patch)
tree40605e5f0dbd9f5861f7dee615bc09b6af3056a7
parent!proj: Distinguish between non-existing and empty projects (diff)
downloadrbot-gentoo-fbfaafce172be5fc7d9547ed200e6d22214792a8.tar.gz
rbot-gentoo-fbfaafce172be5fc7d9547ed200e6d22214792a8.tar.bz2
rbot-gentoo-fbfaafce172be5fc7d9547ed200e6d22214792a8.zip
!validpkg: Do queries using packages.gentoo.org
-rw-r--r--gentoo-data.rb30
1 files changed, 24 insertions, 6 deletions
diff --git a/gentoo-data.rb b/gentoo-data.rb
index 37b606f..b1d9827 100644
--- a/gentoo-data.rb
+++ b/gentoo-data.rb
@@ -33,6 +33,7 @@ VALID_PACKAGE_SRC = "/dev/shm/qsearch.txt"
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'
class GentooPlugin < Plugin
Config.register Config::StringValue.new('gentoo.scriptdir',
@@ -54,7 +55,24 @@ class GentooPlugin < Plugin
py = '/usr/bin/python' unless py
return py
end
-
+
+ def pgo_resolve(atom)
+ uri = PGO_RESOLVE_URI % [URI.escape(atom, '\W+')]
+ res = @bot.httputil.get(uri)
+ return JSON.parse(res)
+ end
+
+ def pgo_resolve_one(m, atom)
+ pkgs = pgo_resolve(atom)['packages']
+ if pkgs.empty?
+ m.reply "No matching packages for '#{atom}'"
+ elsif pkgs.length > 1
+ m.reply "Ambiguous name '#{atom}'. Possible options: #{pkgs.map{ |x| x['atom'] }.sort.join(' ')}"
+ else
+ return pkgs[0]
+ end
+ end
+
def meta(m, params)
cp = params[:pkg]
cp = validate_package(m, cp)
@@ -68,12 +86,12 @@ class GentooPlugin < Plugin
m.reply "Cannot find metadata for '#{cp}'"
end
end
-
+
def validpkg(m, params)
- icp = params[:pkg]
- cp = validate_package(m, icp)
- return if cp.nil?
- m.reply "#{icp} => #{cp} is valid"
+ atom = params[:pkg]
+ pkg = pgo_resolve_one(m, atom)
+ return if pkg.nil?
+ m.reply "#{atom} => #{pkg['atom']} is valid"
end
def meta_verbose(m, params)