changeset 7781:574218777086

ssh: show ssh URL on summary page Original change has been heavily modified by Mads Kiilerich.
author domruf <dominikruf@gmail.com>
date Wed, 27 Sep 2017 22:45:28 +0200
parents 955bbbc29655
children d850a58e6d5f
files kallithea/controllers/admin/settings.py kallithea/controllers/summary.py kallithea/lib/base.py kallithea/lib/db_manage.py kallithea/model/db.py kallithea/model/forms.py kallithea/templates/admin/settings/settings_visual.html kallithea/templates/summary/summary.html kallithea/tests/functional/test_summary.py
diffstat 9 files changed, 72 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/admin/settings.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/controllers/admin/settings.py	Wed Sep 27 22:45:28 2017 +0200
@@ -271,6 +271,7 @@
                     ('use_gravatar', 'use_gravatar', 'bool'),
                     ('gravatar_url', 'gravatar_url', 'unicode'),
                     ('clone_uri_tmpl', 'clone_uri_tmpl', 'unicode'),
+                    ('clone_ssh_tmpl', 'clone_ssh_tmpl', 'unicode'),
                 ]
                 for setting, form_key, type_ in settings:
                     Setting.create_or_update(setting, form_result[form_key], type_)
--- a/kallithea/controllers/summary.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/controllers/summary.py	Wed Sep 27 22:45:28 2017 +0200
@@ -119,6 +119,7 @@
             username = request.authuser.username
         c.clone_repo_url = c.db_repo.clone_url(clone_uri_tmpl=c.clone_uri_tmpl, with_id=False, username=username)
         c.clone_repo_url_id = c.db_repo.clone_url(clone_uri_tmpl=c.clone_uri_tmpl, with_id=True, username=username)
+        c.ssh_repo_url = c.db_repo.clone_url(clone_uri_tmpl=c.clone_ssh_tmpl)
 
         if c.db_repo.enable_statistics:
             c.show_stats = True
--- a/kallithea/lib/base.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/lib/base.py	Wed Sep 27 22:45:28 2017 +0200
@@ -404,6 +404,7 @@
             </script>''' % c.ga_code
         c.site_name = rc_config.get('title')
         c.clone_uri_tmpl = rc_config.get('clone_uri_tmpl') or Repository.DEFAULT_CLONE_URI
+        c.clone_ssh_tmpl = rc_config.get('clone_ssh_tmpl') or Repository.DEFAULT_CLONE_SSH
 
         ## INI stored
         c.visual.allow_repo_location_change = str2bool(config.get('allow_repo_location_change', True))
--- a/kallithea/lib/db_manage.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/lib/db_manage.py	Wed Sep 27 22:45:28 2017 +0200
@@ -375,6 +375,7 @@
             ('use_gravatar', True, 'bool'),
             ('gravatar_url', User.DEFAULT_GRAVATAR_URL, 'unicode'),
             ('clone_uri_tmpl', Repository.DEFAULT_CLONE_URI, 'unicode'),
+            ('clone_ssh_tmpl', Repository.DEFAULT_CLONE_SSH, 'unicode'),
             ('update_url', Setting.DEFAULT_UPDATE_URL, 'unicode'),
         ]
         for key, val, type_ in settings:
--- a/kallithea/model/db.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/model/db.py	Wed Sep 27 22:45:28 2017 +0200
@@ -964,6 +964,7 @@
     )
 
     DEFAULT_CLONE_URI = '{scheme}://{user}@{netloc}/{repo}'
+    DEFAULT_CLONE_SSH = 'ssh://{system_user}@{hostname}/{repo}'
 
     STATE_CREATED = u'repo_state_created'
     STATE_PENDING = u'repo_state_pending'
--- a/kallithea/model/forms.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/model/forms.py	Wed Sep 27 22:45:28 2017 +0200
@@ -371,6 +371,7 @@
         use_gravatar = v.StringBoolean(if_missing=False)
         gravatar_url = v.UnicodeString(min=3)
         clone_uri_tmpl = v.UnicodeString(min=3)
+        clone_ssh_tmpl = v.UnicodeString()
 
     return _ApplicationVisualisationForm
 
--- a/kallithea/templates/admin/settings/settings_visual.html	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/templates/admin/settings/settings_visual.html	Wed Sep 27 22:45:28 2017 +0200
@@ -37,7 +37,7 @@
             </div>
 
             <div class="form-group">
-                <label class="control-label">${_('Clone URL')}:</label>
+                <label class="control-label">${_('HTTP Clone URL')}:</label>
                 <div>
                     ${h.text('clone_uri_tmpl', size=80, class_='form-control')}
                     <span class="help-block">${_('''Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'.
@@ -52,6 +52,13 @@
                                                     ''')}
                     </span>
                 </div>
+                %if c.ssh_enabled:
+                <label class="control-label">${_('SSH Clone URL')}:</label>
+                <div>
+                    ${h.text('clone_ssh_tmpl', size=80, class_='form-control')}
+                    <span class="help-block">${_('''Schema for constructing SSH clone URL, eg. 'ssh://{system_user}@{hostname}/{repo}'.''')}</span>
+                </div>
+                %endif
             </div>
 
             <div class="form-group">
--- a/kallithea/templates/summary/summary.html	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/templates/summary/summary.html	Wed Sep 27 22:45:28 2017 +0200
@@ -53,16 +53,33 @@
             <div class="form-group form-inline">
                 <label>${_('Clone URL')}:</label>
                 <div id="clone-url">
-                  <div id="clone_by_name" class="input-group">
+                  <div id="clone_by_name" class="input-group"
+                    %if c.ssh_enabled:
+                        style="display:none"
+                    %endif
+                    >
                     <span class="input-group-addon">${self.repolabel(c.db_repo)}</span>
                     <input class="form-control" size="80" readonly="readonly" value="${c.clone_repo_url}"/>
-                    <span class="input-group-addon btn">${_('Show by ID')}</span>
+                    <span class="input-group-addon btn use-id">${_('Use ID')}</span>
+                    %if c.ssh_enabled:
+                    <span class="input-group-addon btn use-ssh">${_('Use SSH')}</span>
+                    %endif
                   </div>
                   <div id="clone_by_id" class="input-group" style="display:none">
                     <span class="input-group-addon">${self.repolabel(c.db_repo)}</span>
                     <input class="form-control" size="80" readonly="readonly" value="${c.clone_repo_url_id}"/>
-                    <span class="input-group-addon btn">${_('Show by Name')}</span>
+                    <span class="input-group-addon btn use-name">${_('Use Name')}</span>
+                    %if c.ssh_enabled:
+                    <span class="input-group-addon btn use-ssh">${_('Use SSH')}</span>
+                    %endif
                   </div>
+                  %if c.ssh_enabled:
+                  <div id="clone_ssh" class="input-group">
+                    <span class="input-group-addon">${self.repolabel(c.db_repo)}</span>
+                    <input id="ssh_url" class="form-control" size="80" readonly="readonly" value="${c.ssh_repo_url}"/>
+                    <span class="input-group-addon btn use-name">${_('Use HTTP')}</span>
+                  </div>
+                  %endif
                 </div>
             </div>
 
@@ -233,15 +250,24 @@
         }
     });
 
+    var $clone_url = $('#clone-url');
     var $clone_by_name = $('#clone_by_name');
     var $clone_by_id = $('#clone_by_id');
-    $clone_by_name.find('.btn').click(function(e){
-        $clone_by_name.hide();
-        $clone_by_id.show();
+    var $clone_ssh = $('#clone_ssh');
+    $clone_url.on('click', '.btn.use-name', function(e){
+        $clone_by_name.show();
+        $clone_by_id.hide();
+        $clone_ssh.hide();
     });
-    $clone_by_id.find('.btn').click(function(e){
+    $clone_url.on('click', '.btn.use-id', function(e){
+        $clone_by_id.show();
+        $clone_by_name.hide();
+        $clone_ssh.hide();
+    });
+    $clone_url.on('click', '.btn.use-ssh', function(e){
         $clone_by_id.hide();
-        $clone_by_name.show();
+        $clone_by_name.hide();
+        $clone_ssh.show();
     });
 
     var cache = {}
--- a/kallithea/tests/functional/test_summary.py	Mon Nov 17 14:42:45 2014 -0500
+++ b/kallithea/tests/functional/test_summary.py	Wed Sep 27 22:45:28 2017 +0200
@@ -19,12 +19,21 @@
 from kallithea.model.meta import Session
 from kallithea.model.scm import ScmModel
 
+import pytest
+
 fixture = Fixture()
 
+@pytest.fixture
+def custom_settings(set_test_settings):
+    # overwrite DEFAULT_CLONE_SSH = 'ssh://{system_user}@{hostname}/{repo}'
+    set_test_settings(
+        ('clone_ssh_tmpl', 'ssh://ssh_user@ssh_hostname/{repo}', 'unicode'),
+        )
+
 
 class TestSummaryController(TestController):
 
-    def test_index_hg(self):
+    def test_index_hg(self, custom_settings):
         self.log_user()
         ID = Repository.get_by_repo_name(HG_REPO).repo_id
         response = self.app.get(url(controller='summary',
@@ -39,8 +48,7 @@
         response.mustcontain(
             """<i class="icon-globe">"""
         )
-
-        # clone url...
+        # clone URLs
         response.mustcontain(
             '''<input class="form-control" size="80" readonly="readonly" value="http://%s@localhost:80/%s"/>''' %
             (TEST_USER_ADMIN_LOGIN, HG_REPO)
@@ -49,8 +57,13 @@
             '''<input class="form-control" size="80" readonly="readonly" value="http://%s@localhost:80/_%s"/>''' %
             (TEST_USER_ADMIN_LOGIN, ID)
         )
+        response.mustcontain(
+            '''<input id="ssh_url" class="form-control" size="80" readonly="readonly" value="ssh://ssh_user@ssh_hostname/%s"/>''' %
+            (HG_REPO)
+        )
 
-    def test_index_git(self):
+
+    def test_index_git(self, custom_settings):
         self.log_user()
         ID = Repository.get_by_repo_name(GIT_REPO).repo_id
         response = self.app.get(url(controller='summary',
@@ -65,15 +78,19 @@
         response.mustcontain(
             """<i class="icon-globe">"""
         )
-
-        # clone url...
+        # clone URLs
         response.mustcontain(
             '''<input class="form-control" size="80" readonly="readonly" value="http://%s@localhost:80/%s"/>''' %
-            (TEST_USER_ADMIN_LOGIN, GIT_REPO))
+            (TEST_USER_ADMIN_LOGIN, GIT_REPO)
+        )
         response.mustcontain(
             '''<input class="form-control" size="80" readonly="readonly" value="http://%s@localhost:80/_%s"/>''' %
             (TEST_USER_ADMIN_LOGIN, ID)
         )
+        response.mustcontain(
+            '''<input id="ssh_url" class="form-control" size="80" readonly="readonly" value="ssh://ssh_user@ssh_hostname/%s"/>''' %
+            (GIT_REPO)
+        )
 
     def test_index_by_id_hg(self):
         self.log_user()