diff pylons_app/lib/simplehg.py @ 114:cc5cf1a93902

Implemented simplehg middleware,moved make_ui functions to lib.utils
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 28 Apr 2010 02:08:45 +0200
parents 70b1e5d1e20d
children 345811faa8a0
line wrap: on
line diff
--- a/pylons_app/lib/simplehg.py	Wed Apr 28 01:56:11 2010 +0200
+++ b/pylons_app/lib/simplehg.py	Wed Apr 28 02:08:45 2010 +0200
@@ -1,13 +1,7 @@
 import os
-
-import cgi
-from mercurial import util
-from mercurial.hgweb.request import wsgirequest, normalize
 from mercurial.hgweb import hgweb
-from pylons.controllers.util import Response
 from mercurial.hgweb.request import wsgiapplication
-
-
+from pylons_app.lib.utils import make_ui
 class SimpleHg(object):
 
     def __init__(self, application, config):
@@ -18,14 +12,33 @@
         if not is_mercurial(environ):
             return self.application(environ, start_response)
         else:
-            from pprint import pprint
-            pprint(environ)
+            repo_name = environ['PATH_INFO'].replace('/', '')
+            if not environ['PATH_INFO'].endswith == '/':
+                environ['PATH_INFO'] += '/'
+            #environ['SCRIPT_NAME'] = request.path
+            environ['PATH_INFO'] = '/'
+            self.baseui = make_ui()
+            self.basepath = self.baseui.configitems('paths')[0][1].replace('*', '')
+            self.repo_path = os.path.join(self.basepath, repo_name)
+            app = wsgiapplication(self._make_app)
+            return app(environ, start_response)            
 
-            repo_path = os.path.join('/home/marcink/python_workspace/', environ['PATH_INFO'].replace('/', ''))
-            def _make_app():return hgweb(repo_path, "Name")
-            app = wsgiapplication(_make_app)
-            return app(environ, start_response)            
+    def _make_app(self):
+        hgserve = hgweb(self.repo_path)
+        return  self.load_web_settings(hgserve)
+        
                 
+    def load_web_settings(self, hgserve):
+        repoui = make_ui(os.path.join(self.repo_path, '.hg', 'hgrc'), False)
+        #set the global ui for hgserve
+        hgserve.repo.ui = self.baseui
+        
+        if repoui:
+            #set the repository based config
+            hgserve.repo.ui = repoui
+            
+        return hgserve
+                                
 def is_mercurial(environ):
     """
     Returns True if request's target is mercurial server - header
@@ -35,3 +48,5 @@
     if http_accept and http_accept.startswith('application/mercurial'):
         return True
     return False
+
+