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