aboutsummaryrefslogblamecommitdiffstats
path: root/osurl
blob: cff52824a57733aebdce2ae2ab46c08b2bfea655 (plain) (tree)
1
2
3
4
5
6
7
8
9

              
                           
                                                                      

                
                                                                                       
                                                                            
                                                                        
                                                                
                                                                

                  







                                                                         
                                                              
                                                                   
                                                                  



                                                                       
                                                                         

                                                                             
                                                                             

                                                                      
                                                                        
                                                                               
                                                               

                                                             












                                                                                           

 
 


                                                                           





                                                                             
                                
                                                        
   
 

                             
                                           
   

                                 






                                         
#!/usr/bin/lua

local lpeg = require 'lpeg'
local P,C,Cs,Cf,R,S = lpeg.P, lpeg.C, lpeg.Cs, lpeg.Cf, lpeg.R, lpeg.S

local tokens = {
    NONHASH    = C((1 - P("#"))^1),             -- any nonempty string not containing #
    SEP        = S("#-"),                       -- separators, can be # or -
    NUM        = C(R("09")^1),                  -- nonempty digit string
    WORD       = C(R("AZ","az","09","__")^1),   -- nonempty word
    JIRID      = C(R("AZ","az","09","--")^1)    -- nonempty word
}
local patterns = {
    ["bgo%SEP%NUM"] = "https://bugzilla.gnome.org/show_bug.cgi?id=%1",
    ["bpo%SEP%NUM"] = "https://bugs.python.org/issue%1",
    ["bko%SEP%NUM"] = "https://bugzilla.kernel.org/show_bug.cgi?id=%1",
    ["bmo%SEP%NUM"] = "https://bugzilla.mozilla.org/show_bug.cgi?id=%1",
    ["boo%SEP%NUM"] = "https://bugzilla.opensuse.org/show_bug.cgi?id=%1",
    ["bnc%SEP%NUM"] = "https://bugzilla.novell.com/show_bug.cgi?id=%1",
    ["bsc%SEP%NUM"] = "https://bugzilla.suse.com/show_bug.cgi?id=%1",
    ["bds%SEP%NUM"] = "https://build.suse.de/request/show/%1",
    ["ssr%SEP%NUM"] = "https://build.suse.de/request/show/%1",
    ["bdo%SEP%NUM"] = "https://build.opensuse.org/request/show/%1",
    ["sr%SEP%NUM"] = "https://build.opensuse.org/request/show/%1",
    ["jsc%SEP%JIRID"] = "https://jira.suse.com/browse/%1",
    ["gh%SEP%NONHASH%SEP%WORD"] = "https://github.com/%1/issues/%2",
    ["gl%SEP%NONHASH%SEP%WORD"] = "https://gitlab.com/%1/issues/%2",
    ["bt%SEP%NONHASH%SEP%WORD"] = "https://bitbucket.org/%1/issues/%2",
    ["sh%SEP%NUM"] = "http://sourceforge.net/support/tracker.php?aid=%1",
    ["shb%SEP%NONHASH%SEP%NUM"] = "https://sourceforge.net/p/%1/bugs/%2/",
    ["shp%SEP%NONHASH%SEP%NUM"] = "https://sourceforge.net/p/%1/patches/%2/",
    ["sht%SEP%NONHASH%SEP%NUM"] = "https://sourceforge.net/p/%1/tickets/%2/",
    ["lp%SEP%NUM"] = "https://launchpad.net/bugs/%1",
    ["rh%SEP%NUM"] = "https://bugzilla.redhat.com/show_bug.cgi?id=%1",
    ["rhbz%SEP%NUM"] = "https://bugzilla.redhat.com/show_bug.cgi?id=%1",
    ["tdf%SEP%NUM"] = "https://bugs.documentfoundation.org/show_bug.cgi?id=%1",
    ["pep%SEP%NUM"] = "https://www.python.org/dev/peps/pep-%1",
    ["ffn%SEP%NUM"] = "https://www.fanfiction.net/s/%1",
    ["ao3%SEP%NUM"] = "https://archiveofourown.org/works/%1",
    ["boost%SEP%NUM"] = "https://svn.boost.org/trac/boost/%1",
    ["RT%SEP%NUM"] = "https://rt.cpan.org/Public/%1",
    ["deb%SEP%NUM"] = "https://bugs.debian.org/%1",
    ["fdo%SEP%NUM"] = "https://bugs.freedesktop.org/%1",
    ["glfo%SEP%NONHASH%SEP%NUM"] = "https://gitlab.freedesktop.org/%1/issues/%2",
    ["gcc%SEP%NUM"] = "https://gcc.gnu.org/bugzilla/%1",
    ["glgo%SEP%NONHASH%SEP%NUM"] = "https://gitlab.gnome.org/%1/issues/%2",
    ["kde%SEP%NUM"] = "https://bugs.kde.org/%1",
    ["obs%SEP%NUM"] = "https://api.github.com/repos/openSUSE/open-build-service/issues/%1",
    ["build%SEP%NUM"] = "https://api.github.com/repos/openSUSE/obs-build/issues/%1",
    ["osc%SEP%NUM"] = "https://api.github.com/repos/openSUSE/osc/issues/%1",
    ["poo%SEP%NUM"] = "https://progress.opensuse.org/issues/%1",
    ["lf%SEP%NUM"] = "https://developerbugs.linux-foundation.org/%1",
}


-- turn "foo#%BLAH" into a pattern that matches everything literally except
-- %BLAH
local makepat = Cf(
    (
        ((P("%") * C(R("AZ")^1)) / tokens)        -- %BLAH is from tokens
        + (P"%%" / function() return P"%" end)    -- %% treat as literal %
        + (C(P(1)) / P)                           -- anything else is literal
    )^0,
    function(a,b) return a * b end)
local function make_pattern(str)
    return assert(makepat:match(str), "invalid pattern")
end

local bugpat = P(false)
for k,v in pairs(patterns) do
    bugpat = bugpat + (make_pattern(k) / v)
end
local pat = Cs((bugpat + P(1))^0)

local in_url = arg[1]
local out_url = pat:match(in_url:lower())
if out_url == in_url:lower() then
    out_url = in_url
end

os.execute("xdg-open " .. out_url)