From be7e9105c07f2e70ee56abf1c930e28c04729015 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Thu, 18 Dec 2014 15:27:22 +0800 Subject: [PATCH] add gcode_svn source: for Google Code svn repositories --- README.rst | 7 +++++++ nvchecker/get_version.py | 2 +- nvchecker/source/gcode_svn.py | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 nvchecker/source/gcode_svn.py diff --git a/README.rst b/README.rst index 29b9c21..341c6d2 100644 --- a/README.rst +++ b/README.rst @@ -150,6 +150,13 @@ Check a mercurial (hg) repository on `Google Code `_ f gcode_hg The name used on Google Code, e.g. ``chromium-compact-language-detector``. +Check Google Code (svn repository) +--------------------------------- +Check a subversion (svn) repository on `Google Code `_ for updates. The version returned is the svn resivion number. + +gcode_svn + The name used on Google Code, e.g. ``cld2``. + Manually updating ----------------- This enables you to manually specify the version (maybe because you want to approve each release before it gets to the script). diff --git a/nvchecker/get_version.py b/nvchecker/get_version.py index 6bedf54..a57c4e5 100644 --- a/nvchecker/get_version.py +++ b/nvchecker/get_version.py @@ -4,7 +4,7 @@ from importlib import import_module logger = logging.getLogger(__name__) handler_precedence = ( 'github', 'aur', 'pypi', 'archpkg', 'gems', 'pacman', - 'cmd', 'gcode_hg', 'regex', 'manual', 'vcs' + 'cmd', 'gcode_hg', 'gcode_svn', 'regex', 'manual', 'vcs' ) def get_version(name, conf, callback): diff --git a/nvchecker/source/gcode_svn.py b/nvchecker/source/gcode_svn.py new file mode 100644 index 0000000..90c7010 --- /dev/null +++ b/nvchecker/source/gcode_svn.py @@ -0,0 +1,26 @@ +import re +import logging +from functools import partial + +from tornado.httpclient import AsyncHTTPClient + +logger = logging.getLogger(__name__) + +GCODE_URL = 'https://code.google.com/p/%s/source/list' +GCODE_SVN_RE = re.compile(r'r(\d+)') + +def get_version(name, conf, callback): + repo = conf.get('gcode_svn') or name + url = GCODE_URL % repo + AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker', + callback=partial(_gcodehg_done, name, callback)) + +def _gcodehg_done(name, callback, res): + data = res.body.decode('utf-8') + m = GCODE_SVN_RE.search(data) + if m: + version = m.group(1) + else: + logger.error('%s: version not found.', name) + version = None + callback(name, version)