The branch, master has been updated via bbee78c1104146f36d1145dcface82563391eb1b (commit) via 83511e004f43bb10df5d070d10f155f81c301276 (commit) from 289aa8e4ec467ddc107ad550291ca00df17b9c63 (commit)
- Log ----------------------------------------------------------------- commit bbee78c1104146f36d1145dcface82563391eb1b Author: Michal Čihař mcihar@novell.com Date: Thu Mar 11 16:05:56 2010 +0100
Ignore git cache.
commit 83511e004f43bb10df5d070d10f155f81c301276 Author: Michal Čihař mcihar@novell.com Date: Thu Mar 11 16:05:20 2010 +0100
Generate translation stats from Git.
-----------------------------------------------------------------------
Summary of changes: README | 4 +- cache/.gitignore | 1 + helper/cache.py | 119 +++++------------------------------------------------- render.py | 29 +++++++------ 4 files changed, 29 insertions(+), 124 deletions(-)
diff --git a/README b/README index 887bfee..12c4747 100644 --- a/README +++ b/README @@ -14,8 +14,8 @@ Genshi - http://genshi.edgewall.org/ (0.5.0 tested) python-feedparser - http://www.feedparser.org (4.1 tested) -pysvn - http://pysvn.tigris.org/ -(1.6.1 tested) +GitPython - http://gitorious.org/projects/git-python/ +(0.1.6 tested)
Security announcements diff --git a/cache/.gitignore b/cache/.gitignore index 2232829..775d8a0 100644 --- a/cache/.gitignore +++ b/cache/.gitignore @@ -1 +1,2 @@ *.dump +git* diff --git a/helper/cache.py b/helper/cache.py index e59e341..28c288d 100644 --- a/helper/cache.py +++ b/helper/cache.py @@ -23,10 +23,10 @@ import cPickle import feedparser import os import time -import pysvn import glob import traceback import urllib +import git
from xml.dom import minidom
@@ -35,8 +35,6 @@ import helper.date
# How long is cache valid (in seconds) CACHE_TIME = 60 * 60 -# How long is svn cache valid (in seconds) -SVN_CACHE_TIME = 60 * 60 * 24
class NoCache(Exception): pass @@ -181,108 +179,13 @@ class FeedCache(URLCache): self.set(cache, result) return result
-class SimpleSVNCache(Cache): - def __init__(self, url, timeout = SVN_CACHE_TIME): - super(SimpleSVNCache, self).__init__(timeout) - self._svn = pysvn.Client() - self._url = url - - def cat(self, name): - ''' - Performs cached svn cat, returns string with file content. - ''' - fullname = '%s/%s' % (self._url, name) - cachename = 'svn-log-%s' % fullname - - try: - data = self.get(cachename) - return data - except NoCache: - data = self._svn.cat(fullname) - self.set(cachename, data) - return data - - def log(self, name): - ''' - Performs cached svn log, returs list of revisions as dict with - message, date, author and revision fields. - - 1. If cache is up to date, use cache. - 2. If cache exists, use it as base, request only remaining logs. - 3. Request missing logs. - 4. Save log to cache and return it. - ''' - fullname = '%s/%s' % (self._url, name) - cachename = 'svn-log-%s' % fullname - - try: - list = self.get(cachename) - return list - except NoCache: - pass - - try: - list = self.force_get(cachename) - base = list[0]['revision'] - except NoCache: - list = [] - base = 0 - - try: - base_rev = pysvn.Revision(pysvn.opt_revision_kind.number, base) - self.dbg('svn log -r %d %s' % (base, fullname)) - svnlog = self._svn.log(fullname, revision_end = base_rev) - newlog = [{ - 'message': x['message'], - 'revision': x['revision'].number, - 'date': helper.date.fmtdate.fromtimestamp(x['date']), - 'author': x['author'], - } for x in svnlog] - list.extend(newlog) - list.sort(key = lambda x: x['revision'], reverse = True) - self.set(cachename, list) - except pysvn.ClientError: - traceback.print_exc() - return list - -class SVNCache(SimpleSVNCache): - def __init__(self, url, timeout = SVN_CACHE_TIME): - super(SVNCache, self).__init__(timeout) - self._svn = pysvn.Client() - self._url = url - self._updated = False - self._wc = self.get_name('svn-%s' % self._url, '%s') - - def ls(self): - ''' - Performs cached svn ls, returs list of URLs. - ''' - self.update_wc() - files = glob.glob(os.path.join(self._wc, '*')) - files.sort() - return [os.path.basename(x) for x in files] - - def cat(self, name): - ''' - Performs cached svn cat, returns string with file content. - ''' - self.update_wc() - return open(os.path.join(self._wc, name), 'r').read() - - def update_wc(self): - ''' - Updates working copy of repository. - ''' - if self._updated: - return - if not os.path.exists(self._wc): - self.dbg('svn co %s' % self._url) - self._svn.checkout(self._url, self._wc) - self._updated = True - elif not self.check_timeout(self._wc): - try: - self.dbg('svn up %s' % self._url) - self._svn.update(self._wc) - except pysvn.ClientError: - traceback.print_exc() - self._updated = True +class GitCache(Cache): + def __init__(self, url): + self.dirname = self.get_name(url, '%s') + if not os.path.exists(self.dirname): + os.system('git clone %s %s' % (url, self.dirname)) + else: + os.system('cd %s ; git pull' % self.dirname) + self.repo = git.Repo(self.dirname) + self.tree = self.repo.tree() + self.langtree = self.tree['lang'] diff --git a/render.py b/render.py index de7fb1f..faf85cc 100755 --- a/render.py +++ b/render.py @@ -86,8 +86,7 @@ PROJECT_SUMMARY_RSS = 'https://sourceforge.net/export/rss2_projsummary.php?group DONATIONS_RSS = 'https://sourceforge.net/export/rss2_projdonors.php?group_id=%d&limit=20' % PROJECT_ID PROJECT_VCS_RSS = 'http://cia.vc/stats/project/phpmyadmin/.rss' PROJECT_DL = 'http://prdownloads.sourceforge.net/%s/%%s' % PROJECT_NAME -PROJECT_SVN = 'https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyAdmin/' -TRANSLATIONS_SVN = '%slang/' % PROJECT_SVN +PROJECT_GIT = 'git://phpmyadmin.git.sourceforge.net/gitroot/phpmyadmin/phpmyadmin' PLANET_RSS = 'http://planet.phpmyadmin.net/rss20.xml' RSS_CZ = 'http://phpmyadmin.cz/rss.xml' RSS_RU = 'http://php-myadmin.ru/rss/news.xml' @@ -125,7 +124,7 @@ def copytree(src, dst): names = os.listdir(src) errors = [] for name in names: - if name == '.svn' or name.find('.swp') != -1 or name[0] == '_': + if name == '.git' or name == '.svn' or name.find('.swp') != -1 or name[0] == '_': continue srcname = os.path.join(src, name) dstname = os.path.join(dst, name) @@ -196,8 +195,7 @@ class SFGenerator: self.feeds = helper.cache.FeedCache() self.xmls = helper.cache.XMLCache() self.urls = helper.cache.URLCache() - self.svn = helper.cache.SVNCache(TRANSLATIONS_SVN) - self.simplesvn = helper.cache.SimpleSVNCache(PROJECT_SVN) + self.git = helper.cache.GitCache(PROJECT_GIT)
def get_outname(self, page): ''' @@ -867,6 +865,8 @@ class SFGenerator: for root, dirs, files in os.walk(TEMPLATES): if '.svn' in dirs: dirs.remove('.svn') # don't visit .svn directories + if '.git' in dirs: + dirs.remove('.git') # don't visit .git directories files.sort() dir = root[len(TEMPLATES):].strip('/') if len(dir) > 0: @@ -911,9 +911,10 @@ class SFGenerator: ''' helper.log.dbg('Processing translation stats...') self.data['translations'] = [] - list = self.svn.ls() - translators = XML(self.simplesvn.cat('translators.html')) - english = self.svn.cat('english-utf-8.inc.php') + list = self.git.langtree.keys() + list.sort() + translators = XML(self.git.tree['translators.html'].data) + english = self.git.langtree['english-utf-8.inc.php'].data allmessages = len(re.compile('\n$str').findall(english)) for name in list: if name[-14:] != '-utf-8.inc.php': @@ -931,18 +932,18 @@ class SFGenerator: translator = self.fmt_translator(translator) short = data.langnames.MAP[lang] helper.log.dbg(' - %s [%s]' % (lang, short)) - svnlog = self.svn.log(name) + gitlog = self.git.repo.log(path = 'lang/english-utf-8.inc.php') langs = '%s|%s|%s' % (lang, short, baselang) regexp = re.compile(LANG_REGEXP % (langs, langs), re.IGNORECASE) found = None if lang == 'english': - found = svnlog[0] + found = gitlog[0] else: - for x in svnlog: - if regexp.findall(x['message']) != []: + for x in gitlog: + if regexp.findall(x.message) != []: found = x break - content = self.svn.cat(name) + content = self.git.langtree[name].data missing = len(re.compile('\n$str.*to translate').findall(content)) translated = allmessages - missing percent = 100.0 * translated / allmessages @@ -953,7 +954,7 @@ class SFGenerator: else: css ='' try: - dt = found['date'] + dt = datetime.datetime(*found.committed_date[:6]) except TypeError: dt = '' self.data['translations'].append({
hooks/post-receive