Mercurial > public > src > rhodecode
diff pylons_app/model/hg_model.py @ 58:8fb1abd4178a
Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
author | Marcin Kuzminski <marcin@python-blog.com> |
---|---|
date | Fri, 09 Apr 2010 03:00:20 +0200 |
parents | |
children | 9f956354807b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pylons_app/model/hg_model.py Fri Apr 09 03:00:20 2010 +0200 @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2010 marcink. All rights reserved. +# +''' +Created on Apr 9, 2010 + +@author: marcink +''' +import os +from pylons_app.lib.base import BaseController +from pylons import tmpl_context as c, app_globals as g, session, request, config +from pylons_app.lib import helpers as h +from mako.template import Template +from pylons.controllers.util import abort +from pylons_app.lib.base import BaseController, render +try: + from vcs.backends.hg import get_repositories +except ImportError: + print 'You have to import vcs module' +from mercurial.util import matchdate, Abort, makedate +from mercurial.hgweb.common import get_contact +from mercurial.templatefilters import age +from operator import itemgetter + +class HgModel(object): + """ + Mercurial Model + """ + + + def __init__(self): + """ + Constructor + """ + + + def get_mtime(self, spath): + cl_path = os.path.join(spath, "00changelog.i") + if os.path.exists(cl_path): + return os.stat(cl_path).st_mtime + else: + return os.stat(spath).st_mtime + + def archivelist(self, ui, nodeid, url): + allowed = g.baseui.configlist("web", "allow_archive", untrusted=True) + for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]: + if i[0] in allowed or ui.configbool("web", "allow" + i[0], + untrusted=True): + yield {"type" : i[0], "extension": i[1], + "node": nodeid, "url": url} + + def get_repos(self): + for name, r in get_repositories(g.paths[0][0], g.paths[0][1]).items(): + last_change = (self.get_mtime(r.spath), makedate()[1]) + tip = r.changectx('tip') + tmp_d = {} + tmp_d['name'] = name + tmp_d['name_sort'] = tmp_d['name'] + tmp_d['description'] = r.ui.config('web', 'description', 'Unknown', untrusted=True) + tmp_d['description_sort'] = tmp_d['description'] + tmp_d['last_change'] = age(last_change) + tmp_d['last_change_sort'] = last_change[1] - last_change[0] + tmp_d['tip'] = str(tip) + tmp_d['tip_sort'] = tip.rev() + tmp_d['rev'] = tip.rev() + tmp_d['contact'] = get_contact(r.ui.config) + tmp_d['contact_sort'] = get_contact(r.ui.config) + tmp_d['repo_archives'] = self.archivelist(r.ui, "tip", 'sa') + + yield tmp_d