view 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 source

#!/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