aboutsummaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2012-06-14 12:33:55 +0200
committerMichał Górny <mgorny@gentoo.org>2012-06-14 12:34:39 +0200
commit7cbe517a70ab12b8d8327a9c12e52bd5c6b4059f (patch)
treedc9e2f1ba23a4ff58f8a75e6b6bacadff54260e2 /pym
parentMerge pull request #16 from radhermit/bs4 (diff)
downloadeuscan-7cbe517a70ab12b8d8327a9c12e52bd5c6b4059f.tar.gz
euscan-7cbe517a70ab12b8d8327a9c12e52bd5c6b4059f.tar.bz2
euscan-7cbe517a70ab12b8d8327a9c12e52bd5c6b4059f.zip
Initial support for github downloads.
Right now, it just handles ebuilds using mirror://github.
Diffstat (limited to 'pym')
-rw-r--r--pym/euscan/handlers/__init__.py4
-rw-r--r--pym/euscan/handlers/github.py51
2 files changed, 53 insertions, 2 deletions
diff --git a/pym/euscan/handlers/__init__.py b/pym/euscan/handlers/__init__.py
index 41236cc..0b4b510 100644
--- a/pym/euscan/handlers/__init__.py
+++ b/pym/euscan/handlers/__init__.py
@@ -1,6 +1,6 @@
-from euscan.handlers import generic, php, pypi, rubygem, kde, cpan
+from euscan.handlers import generic, php, pypi, rubygem, kde, cpan, github
-handlers = [kde, php, pypi, rubygem, cpan, generic]
+handlers = [kde, php, pypi, rubygem, cpan, github, generic]
def find_best_handler(cpv, url):
diff --git a/pym/euscan/handlers/github.py b/pym/euscan/handlers/github.py
new file mode 100644
index 0000000..6bddad1
--- /dev/null
+++ b/pym/euscan/handlers/github.py
@@ -0,0 +1,51 @@
+import json, urllib2
+import re
+
+import portage
+
+from euscan import helpers, output
+
+HANDLER_NAME = "github"
+CONFIDENCE = 100.0
+
+def can_handle(cpv, url):
+ return url.startswith('mirror://github/')
+
+def guess_package(cp, url):
+ match = re.search('^mirror://github/(.*?)/(.*?)/(.*)$', url)
+
+ assert(match)
+ return (match.group(1), match.group(2), match.group(3))
+
+def scan(cpv, url):
+ 'http://developer.github.com/v3/repos/downloads/'
+
+ user, project, filename = guess_package(cpv, url)
+
+ # find out where version is expected to be found
+ cp, ver, rev = portage.pkgsplit(cpv)
+ if ver not in filename:
+ return
+
+ # now create a filename-matching regexp
+ # XXX: supposedly replace first with (?P<foo>...)
+ # and remaining ones with (?P=foo)
+ fnre = re.compile('^%s$' % re.escape(filename).replace(re.escape(ver), '(.*?)'))
+
+ output.einfo("Using github API for: " + '/'.join(package))
+
+ dlreq = urllib2.urlopen('https://api.github.com/repos/%s/%s/downloads' % (user, project))
+ dls = json.load(dlreq)
+
+ for dl in dls:
+ m = fnre.match(dl['name'])
+
+ if m:
+ pv = helpers.gentoo_mangle_version(m.group(1))
+ if helpers.version_filtered(cp, ver, pv):
+ continue
+ yield ('mirror://github/%s' % dl['name'],
+ pv, HANDLER_NAME, CONFIDENCE)
+
+def brute_force(cpv, url):
+ return []