changeset 2708:9bce679a3f49 beta

Added form for controlling mercurial extensions added hggit also for future
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 08 Aug 2012 23:30:55 +0200
parents aa89767753a9
children d2d35cf2b351
files rhodecode/controllers/admin/settings.py rhodecode/lib/base.py rhodecode/lib/db_manage.py rhodecode/model/db.py rhodecode/model/forms.py rhodecode/model/repos_group.py rhodecode/templates/admin/settings/settings.html
diffstat 7 files changed, 80 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/settings.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/controllers/admin/settings.py	Wed Aug 08 23:30:55 2012 +0200
@@ -79,7 +79,7 @@
         # url('admin_settings')
 
         defaults = RhodeCodeSetting.get_app_settings()
-        defaults.update(self.get_hg_ui_settings())
+        defaults.update(self._get_hg_ui_settings())
 
         return htmlfill.render(
             render('admin/settings/settings.html'),
@@ -123,7 +123,7 @@
                       category='success')
 
         if setting_id == 'whoosh':
-            repo_location = self.get_hg_ui_settings()['paths_root_path']
+            repo_location = self._get_hg_ui_settings()['paths_root_path']
             full_index = request.POST.get('full_index', False)
             run_task(tasks.whoosh_index, repo_location, full_index)
             h.flash(_('Whoosh reindex task scheduled'), category='success')
@@ -220,51 +220,55 @@
                 )
 
             try:
-                # fix namespaces for hooks
+                # fix namespaces for hooks and extensions
                 _f = lambda s: s.replace('.', '_')
 
-                sett1 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == 'push_ssl').one()
-                sett1.ui_value = form_result['web_push_ssl']
+                sett = RhodeCodeUi.get_by_key('push_ssl')
+                sett.ui_value = form_result['web_push_ssl']
+                Session().add(sett)
 
-                sett2 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == '/').one()
-                sett2.ui_value = form_result['paths_root_path']
+                sett = RhodeCodeUi.get_by_key('/')
+                sett.ui_value = form_result['paths_root_path']
+                Session().add(sett)
 
                 #HOOKS
-                sett3 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\
-                        .one()
-                sett3.ui_active = bool(form_result[_f('hooks_%s' %
-                                        RhodeCodeUi.HOOK_UPDATE)])
+                sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE)
+                sett.ui_active = form_result[_f('hooks_%s' %
+                                                RhodeCodeUi.HOOK_UPDATE)]
+                Session().add(sett)
 
-                sett4 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\
-                        .one()
-                sett4.ui_active = bool(form_result[_f('hooks_%s' %
-                                             RhodeCodeUi.HOOK_REPO_SIZE)])
+                sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE)
+                sett.ui_active = form_result[_f('hooks_%s' %
+                                                RhodeCodeUi.HOOK_REPO_SIZE)]
+                Session().add(sett)
+
+                sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH)
+                sett.ui_active = form_result[_f('hooks_%s' %
+                                                RhodeCodeUi.HOOK_PUSH)]
+                Session().add(sett)
 
-                sett5 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\
-                        .one()
-                sett5.ui_active = bool(form_result[_f('hooks_%s' %
-                                             RhodeCodeUi.HOOK_PUSH)])
+                sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL)
+                sett.ui_active = form_result[_f('hooks_%s' %
+                                                 RhodeCodeUi.HOOK_PULL)]
+
+                Session().add(sett)
 
-                sett6 = RhodeCodeUi.query()\
-                        .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\
-                        .one()
-                sett6.ui_active = bool(form_result[_f('hooks_%s' %
-                                             RhodeCodeUi.HOOK_PULL)])
+                ## EXTENSIONS
+                sett = RhodeCodeUi.get_by_key('largefiles')
+                sett.ui_active = form_result[_f('extensions_largefiles')]
+                Session().add(sett)
 
-                Session().add(sett1)
-                Session().add(sett2)
-                Session().add(sett3)
-                Session().add(sett4)
-                Session().add(sett5)
-                Session().add(sett6)
+                sett = RhodeCodeUi.get_by_key('hgsubversion')
+                sett.ui_active = form_result[_f('extensions_hgsubversion')]
+                Session().add(sett)
+
+#                sett = RhodeCodeUi.get_by_key('hggit')
+#                sett.ui_active = form_result[_f('extensions_hggit')]
+#                Session().add(sett)
+
                 Session().commit()
 
-                h.flash(_('Updated mercurial settings'), category='success')
+                h.flash(_('Updated VCS settings'), category='success')
 
             except Exception:
                 log.error(traceback.format_exc())
@@ -455,8 +459,7 @@
 
         return render('admin/repos/repo_add_create_repository.html')
 
-    @NotAnonymous()
-    def get_hg_ui_settings(self):
+    def _get_hg_ui_settings(self):
         ret = RhodeCodeUi.query().all()
 
         if not ret:
@@ -471,7 +474,7 @@
             if k.find('.') != -1:
                 k = k.replace('.', '_')
 
-            if each.ui_section == 'hooks':
+            if each.ui_section in ['hooks', 'extensions']:
                 v = each.ui_active
 
             settings[each.ui_section + '_' + k] = v
--- a/rhodecode/lib/base.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/lib/base.py	Wed Aug 08 23:30:55 2012 +0200
@@ -152,8 +152,7 @@
         """
         org_proto = environ['wsgi._org_proto']
         #check if we have SSL required  ! if not it's a bad request !
-        require_ssl = str2bool(RhodeCodeUi.get_by_key('push_ssl')\
-                               .scalar().ui_value)
+        require_ssl = str2bool(RhodeCodeUi.get_by_key('push_ssl').ui_value)
         if require_ssl and org_proto == 'http':
             log.debug('proto is %s and SSL is required BAD REQUEST !'
                       % org_proto)
--- a/rhodecode/lib/db_manage.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/lib/db_manage.py	Wed Aug 08 23:30:55 2012 +0200
@@ -346,12 +346,20 @@
         hgsubversion.ui_value = ''
         hgsubversion.ui_active = False
 
+        # enable hggit disabled by default
+        hggit = RhodeCodeUi()
+        hggit.ui_section = 'extensions'
+        hggit.ui_key = 'hggit'
+        hggit.ui_value = ''
+        hggit.ui_active = False
+
         self.sa.add(hooks1)
         self.sa.add(hooks2)
         self.sa.add(hooks3)
         self.sa.add(hooks4)
         self.sa.add(largefiles)
         self.sa.add(hgsubversion)
+        self.sa.add(hggit)
 
     def create_ldap_options(self, skip_existing=False):
         """Creates ldap settings"""
--- a/rhodecode/model/db.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/model/db.py	Wed Aug 08 23:30:55 2012 +0200
@@ -242,7 +242,7 @@
 
     @classmethod
     def get_by_key(cls, key):
-        return cls.query().filter(cls.ui_key == key)
+        return cls.query().filter(cls.ui_key == key).scalar()
 
     @classmethod
     def get_builtin_hooks(cls):
@@ -263,11 +263,11 @@
 
     @classmethod
     def get_repos_location(cls):
-        return cls.get_by_key('/').one().ui_value
+        return cls.get_by_key('/').ui_value
 
     @classmethod
     def create_or_update_hook(cls, key, val):
-        new_ui = cls.get_by_key(key).scalar() or cls()
+        new_ui = cls.get_by_key(key) or cls()
         new_ui.ui_section = 'hooks'
         new_ui.ui_active = True
         new_ui.ui_key = key
--- a/rhodecode/model/forms.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/model/forms.py	Wed Aug 08 23:30:55 2012 +0200
@@ -267,6 +267,10 @@
         hooks_changegroup_push_logger = v.StringBoolean(if_missing=False)
         hooks_preoutgoing_pull_logger = v.StringBoolean(if_missing=False)
 
+        extensions_largefiles = v.StringBoolean(if_missing=False)
+        extensions_hgsubversion = v.StringBoolean(if_missing=False)
+        extensions_hggit = v.StringBoolean(if_missing=False)
+
     return _ApplicationUiSettingsForm
 
 
--- a/rhodecode/model/repos_group.py	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/model/repos_group.py	Wed Aug 08 23:30:55 2012 +0200
@@ -55,7 +55,7 @@
         Get's the repositories root path from database
         """
 
-        q = RhodeCodeUi.get_by_key('/').one()
+        q = RhodeCodeUi.get_by_key('/')
         return q.ui_value
 
     def _create_default_perms(self, new_group):
--- a/rhodecode/templates/admin/settings/settings.html	Wed Aug 08 22:38:01 2012 +0200
+++ b/rhodecode/templates/admin/settings/settings.html	Wed Aug 08 23:30:55 2012 +0200
@@ -219,6 +219,27 @@
                     ${h.link_to(_('advanced setup'),url('admin_edit_setting',setting_id='hooks'),class_="ui-btn")}
                 </div>
              </div>
+             <div class="field">
+                <div class="label label-checkbox">
+                    <label>${_('Mercurial Extensions')}:</label>
+                </div>
+                <div class="checkboxes">
+                    <div class="checkbox">
+                        ${h.checkbox('extensions_largefiles','True')}
+                        <label for="extensions_hgsubversion">${_('largefiles extensions')}</label>
+                    </div>
+                    <div class="checkbox">
+                        ${h.checkbox('extensions_hgsubversion','True')}
+                        <label for="extensions_hgsubversion">${_('hgsubversion extensions')}</label>
+                    </div>
+                    <span class="help-block">${_('Requires hgsubversion library installed. Allows clonning from svn remote locations')}</span>
+                    ##<div class="checkbox">
+                    ##    ${h.checkbox('extensions_hggit','True')}
+                    ##    <label for="extensions_hggit">${_('hg-git extensions')}</label>
+                    ##</div>
+                    ##<span class="help-block">${_('Requires hg-git library installed. Allows clonning from git remote locations')}</span>                    
+                </div>
+             </div>             
             <div class="field">
                 <div class="label">
                     <label for="paths_root_path">${_('Repositories location')}:</label>