changeset 348:e8fc875467bd

implemented manual repo rescann and remapping
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 14 Jul 2010 16:51:19 +0200
parents 40bccabf4574
children 031152a540c5
files pylons_app/controllers/admin/settings.py pylons_app/lib/utils.py pylons_app/templates/admin/settings/settings.html
diffstat 3 files changed, 60 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/controllers/admin/settings.py	Wed Jul 14 15:42:39 2010 +0200
+++ b/pylons_app/controllers/admin/settings.py	Wed Jul 14 16:51:19 2010 +0200
@@ -23,14 +23,16 @@
 @author: marcink
 """
 from formencode import htmlfill
-from pylons import request, session, tmpl_context as c, url
+from pylons import request, session, tmpl_context as c, url, app_globals as g
 from pylons.controllers.util import abort, redirect
 from pylons.i18n.translation import _
 from pylons_app.lib import helpers as h
 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
 from pylons_app.lib.base import BaseController, render
+from pylons_app.lib.utils import repo2db_mapper, invalidate_cache
 from pylons_app.model.db import User, UserLog
 from pylons_app.model.forms import UserForm
+from pylons_app.model.hg_model import HgModel
 from pylons_app.model.user_model import UserModel
 import formencode
 import logging
@@ -74,6 +76,20 @@
         #    h.form(url('admin_setting', id=ID),
         #           method='put')
         # url('admin_setting', id=ID)
+        if id == 'mapping':
+            rm_obsolete = request.POST.get('destroy', False)
+            log.debug('Rescanning directories with destroy=%s', rm_obsolete)
+
+            initial = HgModel.repo_scan(g.paths[0][0], g.paths[0][1], g.baseui)
+            repo2db_mapper(initial, rm_obsolete)
+            invalidate_cache('cached_repo_list')
+            
+            
+        return redirect(url('admin_settings'))
+
+
+
+
 
     def delete(self, id):
         """DELETE /admin/settings/id: Delete an existing item"""
--- a/pylons_app/lib/utils.py	Wed Jul 14 15:42:39 2010 +0200
+++ b/pylons_app/lib/utils.py	Wed Jul 14 16:51:19 2010 +0200
@@ -177,11 +177,10 @@
         return '0' * 12
 
 
-def repo2db_mapper(initial_repo_list):
+def repo2db_mapper(initial_repo_list, remove_obsolete=False):
     """
     maps all found repositories into db
     """
-    from pylons_app.model.meta import Session
     from pylons_app.model.repo_model import RepoModel
     
     sa = Session()
@@ -200,3 +199,12 @@
                          'private':False
                          }
             rm.create(form_data, user, just_db=True)
+
+
+    if remove_obsolete:
+        #remove from database those repositories that are not in the filesystem
+        for repo in sa.query(Repository).all():
+            if repo.repo_name not in initial_repo_list.keys():
+                sa.delete(repo)
+                sa.commit()
+
--- a/pylons_app/templates/admin/settings/settings.html	Wed Jul 14 15:42:39 2010 +0200
+++ b/pylons_app/templates/admin/settings/settings.html	Wed Jul 14 16:51:19 2010 +0200
@@ -16,6 +16,38 @@
 <%def name="main()">
 	<div>
 	<h2>${_('Settings administration')}</h2>
-	
+
+     ${h.form(url('admin_setting', id='mapping'),method='put')}
+       <table class="table_disp">
+           <tr class="header">
+            <td colspan="2">${_('Remap andv rescan repositories')}</td>
+           </tr>
+           <tr align="right">
+            <td><span class="tooltip" tooltip_title="${h.tooltip(_('In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it.'))}">
+            ${_('destroy old data')}</span> ${h.checkbox('destroy',True)}</td>
+            <td>${h.submit('rescan','rescan repositories')}</td>   
+       </table>
+     ${h.end_form()}
+     <br/>	
+     ${h.form(url('admin_setting', id='global'),method='put')}
+	   <table class="table_disp">
+	       <tr class="header">
+	           <td colspan="3">${_('Global application settings')}</td>
+	       </tr>
+	       <tr>
+	           <td>${_('Application name')}</td>
+	           <td>${h.text('app_title')}</td>
+	       </tr>
+           <tr>
+               <td>${_('Realm text')}</td>
+               <td>${h.text('app_auth_realm')}</td>
+           </tr>
+           <tr>
+	           <td></td>
+	           <td>${h.submit('save','save settings')}</td>   
+           </tr>
+	   </table>
+     ${h.end_form()}
+    
     </div>
 </%def>