##// END OF EJS Templates
svn: Update and add doc strings and comments.
Martin Bornhold -
r560:01b438e0 default
parent child Browse files
Show More
@@ -1,69 +1,74 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2016 RhodeCode GmbH
3 # Copyright (C) 2016-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import logging
21 import logging
22 import os
22 import os
23
23
24 from rhodecode import events
24 from rhodecode import events
25 from rhodecode.lib.utils2 import str2bool
25 from rhodecode.lib.utils2 import str2bool
26 from rhodecode.svn_support.subscribers import generate_mod_dav_svn_config
26 from rhodecode.svn_support.subscribers import generate_mod_dav_svn_config
27 from rhodecode.svn_support import keys
27 from rhodecode.svn_support import keys
28
28
29
29
30 log = logging.getLogger(__name__)
30 log = logging.getLogger(__name__)
31
31
32
32
33 def includeme(config):
33 def includeme(config):
34 settings = config.registry.settings
34 settings = config.registry.settings
35 _sanitize_settings_and_apply_defaults(settings)
35 _sanitize_settings_and_apply_defaults(settings)
36
36
37 if settings[keys.generate_config]:
37 if settings[keys.generate_config]:
38 log.error('Add subscriber')
39 config.add_subscriber(
38 config.add_subscriber(
40 generate_mod_dav_svn_config, events.RepoGroupEvent)
39 generate_mod_dav_svn_config, events.RepoGroupEvent)
41
40
42
41
43 def _sanitize_settings_and_apply_defaults(settings):
42 def _sanitize_settings_and_apply_defaults(settings):
43 """
44 Set defaults, convert to python types and validate settings.
45 """
44 # Convert bool settings from string to bool.
46 # Convert bool settings from string to bool.
45 settings[keys.generate_config] = str2bool(
47 settings[keys.generate_config] = str2bool(
46 settings.get(keys.generate_config, 'false'))
48 settings.get(keys.generate_config, 'false'))
47 settings[keys.list_parent_path] = str2bool(
49 settings[keys.list_parent_path] = str2bool(
48 settings.get(keys.list_parent_path, 'true'))
50 settings.get(keys.list_parent_path, 'true'))
49
51
50 # Set defaults if key not present.
52 # Set defaults if key not present.
51 settings.setdefault(keys.config_file_path, None)
53 settings.setdefault(keys.config_file_path, None)
52 settings.setdefault(keys.location_root, '/')
54 settings.setdefault(keys.location_root, '/')
53 settings.setdefault(keys.parent_path_root, None)
55 settings.setdefault(keys.parent_path_root, None)
54
56
55 # Append path separator to paths.
57 # Append path separator to paths.
56 settings[keys.location_root] = _append_slash(
58 settings[keys.location_root] = _append_path_sep(
57 settings[keys.location_root])
59 settings[keys.location_root])
58 settings[keys.parent_path_root] = _append_slash(
60 settings[keys.parent_path_root] = _append_path_sep(
59 settings[keys.parent_path_root])
61 settings[keys.parent_path_root])
60
62
61 # Validate settings.
63 # Validate settings.
62 if settings[keys.generate_config]:
64 if settings[keys.generate_config]:
63 assert settings[keys.config_file_path] is not None
65 assert settings[keys.config_file_path] is not None
64
66
65
67
66 def _append_slash(path):
68 def _append_path_sep(path):
69 """
70 Append the path separator if missing.
71 """
67 if isinstance(path, basestring) and not path.endswith(os.path.sep):
72 if isinstance(path, basestring) and not path.endswith(os.path.sep):
68 path += os.path.sep
73 path += os.path.sep
69 return path
74 return path
@@ -1,27 +1,28 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2016 RhodeCode GmbH
3 # Copyright (C) 2016-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 # Settings keys used in the ini file.
22 # Definition of setting keys used to configure this module. Defined here to
23 # avoid repetition of keys throughout the module.
23 config_file_path = 'svn.proxy.config_file_path'
24 config_file_path = 'svn.proxy.config_file_path'
24 generate_config = 'svn.proxy.generate_config'
25 generate_config = 'svn.proxy.generate_config'
25 list_parent_path = 'svn.proxy.list_parent_path'
26 list_parent_path = 'svn.proxy.list_parent_path'
26 location_root = 'svn.proxy.location_root'
27 location_root = 'svn.proxy.location_root'
27 parent_path_root = 'svn.proxy.parent_path_root'
28 parent_path_root = 'svn.proxy.parent_path_root'
@@ -1,56 +1,70 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2016 RhodeCode GmbH
3 # Copyright (C) 2016-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 import logging
22 import logging
23
23
24 from pyramid.renderers import render
24 from pyramid.renderers import render
25
25
26 from rhodecode.model.db import RepoGroup
26 from rhodecode.model.db import RepoGroup
27 from rhodecode.svn_support import keys
27 from rhodecode.svn_support import keys
28
28
29
29
30 log = logging.getLogger(__name__)
30 log = logging.getLogger(__name__)
31
31
32
32
33 def generate_mod_dav_svn_config(event):
33 def generate_mod_dav_svn_config(event):
34 _generate(event.request)
34 """
35 Subscriber to the `rhodcode.events.RepoGroupEvent`. This triggers the
36 automatic generation of mod_dav_svn config file on repository group
37 changes.
38 """
39 _generate(event.request.registry.settings)
35
40
36
41
37 def _generate(request):
42 def _generate(settings):
38 settings = request.registry.settings
43 """
44 Generate the configuration file for use with subversion's mod_dav_svn
45 module. The configuration has to contain a <Location> block for each
46 available repository group because the mod_dav_svn module does not support
47 repositories organized in sub folders.
48
49 Currently this is only used by the subscriber above. If we extend this
50 to include it as API method and in the web interface this should be moved
51 to an appropriate place.
52 """
39 filepath = settings[keys.config_file_path]
53 filepath = settings[keys.config_file_path]
40 repository_root = settings[keys.parent_path_root]
54 repository_root = settings[keys.parent_path_root]
41 list_parent_path = settings[keys.list_parent_path]
55 list_parent_path = settings[keys.list_parent_path]
42 location_root = settings[keys.location_root]
56 location_root = settings[keys.location_root]
43
57
44 # Render the configuration to string.
58 # Render the configuration to string.
45 template = 'rhodecode:svn_support/templates/mod-dav-svn.conf.mako'
59 template = 'rhodecode:svn_support/templates/mod-dav-svn.conf.mako'
46 context = {
60 context = {
47 'location_root': location_root,
61 'location_root': location_root,
48 'repository_root': repository_root,
62 'repository_root': repository_root,
49 'repo_groups': RepoGroup.get_all_repo_groups(),
63 'repo_groups': RepoGroup.get_all_repo_groups(),
50 'svn_list_parent_path': list_parent_path,
64 'svn_list_parent_path': list_parent_path,
51 }
65 }
52 mod_dav_svn_config = render(template, context)
66 mod_dav_svn_config = render(template, context)
53
67
54 # Write configuration to file.
68 # Write configuration to file.
55 with open(filepath, 'w') as file_:
69 with open(filepath, 'w') as file_:
56 file_.write(mod_dav_svn_config)
70 file_.write(mod_dav_svn_config)
@@ -1,20 +1,28 b''
1 # This file is auto generated by RhodeCode. It contains the configuration for
1 # Auto generated configuration for use with the Apache mod_dav_svn module.
2 # use with mod_dav_svn.
2
3 # The mod_dav_svn module does not support subversion repositories which are
4 # organized in subfolders. To support the repository groups of RhodeCode it is
5 # required to provide a <Location> block for each group pointing to the
6 # repository group sub folder.
7
8 # To ease the configuration RhodeCode auto generates this file whenever a
9 # repository group is created/changed/deleted. Auto generation can be configured
10 # in the ini file.
3
11
4 <Location ${location_root}>
12 <Location ${location_root}>
5 DAV svn
13 DAV svn
6 SVNParentPath ${parent_path_root}
14 SVNParentPath ${parent_path_root}
7 SVNListParentPath ${'On' if svn_list_parent_path else 'Off'}
15 SVNListParentPath ${'On' if svn_list_parent_path else 'Off'}
8 Allow from all
16 Allow from all
9 Order allow,deny
17 Order allow,deny
10 </Location>
18 </Location>
11
19
12 % for repo_group in repo_groups:
20 % for repo_group in repo_groups:
13 <Location ${location_root}${repo_group.full_path}>
21 <Location ${location_root}${repo_group.full_path}>
14 DAV svn
22 DAV svn
15 SVNParentPath ${parent_path_root}${repo_group.full_path}
23 SVNParentPath ${parent_path_root}${repo_group.full_path}
16 SVNListParentPath ${'On' if svn_list_parent_path else 'Off'}
24 SVNListParentPath ${'On' if svn_list_parent_path else 'Off'}
17 Allow from all
25 Allow from all
18 Order allow,deny
26 Order allow,deny
19 </Location>
27 </Location>
20 % endfor
28 % endfor
General Comments 0
You need to be logged in to leave comments. Login now