commit:     fbfaafce172be5fc7d9547ed200e6d22214792a8
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 12 14:57:04 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=fbfaafce

!validpkg: Do queries using packages.gentoo.org

 gentoo-data.rb | 30 ++++++++++++++++++++++++------
 1 file 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-@[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'
 
 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)

Reply via email to