deprec 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/docs/README.quickstart +47 -0
- data/docs/README.slicehost +11 -16
- data/docs/README.svn_trac +19 -0
- data/lib/deprec/capistrano_extensions/cli_extensions.rb +35 -0
- data/lib/deprec/capistrano_extensions/deprec_extensions.rb +3 -3
- data/lib/deprec/generators/deprec/templates/deploy.rb +1 -0
- data/lib/deprec/recipes.rb +17 -130
- data/lib/deprec/recipes/apache.rb +91 -0
- data/lib/deprec/recipes/memcache.rb +45 -0
- data/lib/deprec/recipes/svn.rb +108 -37
- data/lib/deprec/recipes/trac.rb +83 -2
- data/lib/deprec/{recipes/templates → templates}/postfix_main.conf +0 -0
- data/lib/deprec/templates/trac.ini.erb +106 -0
- data/lib/deprec/third_party/railsmachine/recipes/apache.rb +6 -1
- data/lib/deprec/third_party/railsmachine/recipes/mysql.rb +8 -2
- data/lib/deprec/third_party/railsmachine/recipes/templates/httpd-ssl.conf +1 -1
- data/lib/deprec/third_party/railsmachine/recipes/templates/httpd.conf +1 -1
- metadata +10 -9
- data/docs/old_homepage.txt +0 -172
- data/lib/deprec/recipes/templates/interfaces.rhtml +0 -19
- data/lib/deprec/recipes/templates/test_template.rhtml +0 -1
- data/lib/deprec/recipes/wordpress.rb +0 -23
- data/lib/deprec/third_party/railsmachine/recipes/svn.rb +0 -45
@@ -0,0 +1,45 @@
|
|
1
|
+
Capistrano.configuration(:must_exist).load do
|
2
|
+
|
3
|
+
set :memcache_ip, '127.0.0.1'
|
4
|
+
set :memcache_port, 11211
|
5
|
+
set :memcache_memory, 256
|
6
|
+
|
7
|
+
# XXX needs thought/work
|
8
|
+
task :memcached_start do
|
9
|
+
run "memcached -d -m #{memcache_memory} -l #{memcache_ip} -p #{memcache_port}"
|
10
|
+
end
|
11
|
+
|
12
|
+
# XXX needs thought/work
|
13
|
+
task :memcached_stop do
|
14
|
+
run "killall memcached"
|
15
|
+
end
|
16
|
+
|
17
|
+
# XXX needs thought/work
|
18
|
+
task :memcached_restart do
|
19
|
+
memcached_stop
|
20
|
+
memcached_start
|
21
|
+
end
|
22
|
+
|
23
|
+
task :install_memcached do
|
24
|
+
version = 'memcached-1.2.2'
|
25
|
+
set :src_package, {
|
26
|
+
:file => version + '.tar.gz',
|
27
|
+
:md5sum => 'a08851f7fa7b15e92ee6320b7a79c321 memcached-1.2.2.tar.gz',
|
28
|
+
:dir => version,
|
29
|
+
:url => "http://www.danga.com/memcached/dist/#{version}.tar.gz",
|
30
|
+
:unpack => "tar zxf #{version}.tar.gz;",
|
31
|
+
:configure => %w{
|
32
|
+
./configure
|
33
|
+
--prefix=/usr/local
|
34
|
+
;
|
35
|
+
}.reject{|arg| arg.match '#'}.join(' '),
|
36
|
+
:make => 'make;',
|
37
|
+
:install => 'make install;',
|
38
|
+
:post_install => 'install -b support/apachectl /etc/init.d/httpd;'
|
39
|
+
}
|
40
|
+
apt.install( {:base => %w(libevent-dev)}, :stable )
|
41
|
+
deprec.download_src(src_package, src_dir)
|
42
|
+
deprec.install_from_src(src_package, src_dir)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/deprec/recipes/svn.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
Capistrano.configuration(:must_exist).load do
|
4
5
|
|
@@ -9,23 +10,67 @@ Capistrano.configuration(:must_exist).load do
|
|
9
10
|
#
|
10
11
|
# however the SVN docs convinced me it's probably overkill.
|
11
12
|
# http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.serverconfig.pathbasedauthz
|
13
|
+
#
|
12
14
|
set :scm_group, 'scm'
|
13
15
|
|
14
|
-
|
16
|
+
# The following values define the svn repository to work with.
|
17
|
+
# If any are undefined but :repository is set, we'll extract the
|
18
|
+
# necessary values from it, otherwise we'll prompt the user.
|
19
|
+
#
|
20
|
+
# An example of :repository entries are:
|
21
|
+
#
|
22
|
+
# set :repository, 'svn+ssh://scm.deprecated.org/var/svn/deprec/trunk'
|
23
|
+
# set :repository, 'file:///tmp/svn/deprec/trunk'
|
24
|
+
#
|
25
|
+
# I've only used svn+ssh but it shouldn't be hard to get the file scheme working.
|
26
|
+
#
|
27
|
+
set (:svn_scheme) do
|
28
|
+
repository ? URI.parse(repository).scheme : 'svn+ssh'
|
29
|
+
end
|
30
|
+
|
31
|
+
set (:scm_host) do
|
32
|
+
if repository
|
33
|
+
URI.parse(repository).host || 'localhost'
|
34
|
+
elsif ENV['HOSTS']
|
35
|
+
svn_host = ENV['HOSTS']
|
36
|
+
else
|
37
|
+
Capistrano::CLI.password_prompt('svn host: ')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# This is the actual path in the svn repos where we'll check our project into
|
42
|
+
set (:repos_path) do
|
43
|
+
repository ? URI.parse(repository).path : Capistrano::CLI.password_prompt('svn repos path: ')
|
44
|
+
end
|
45
|
+
|
46
|
+
# We'll calculate this based on the repos_path. It's used when initializing the repository
|
47
|
+
set (:repos_root) do
|
48
|
+
(repository ? URI.parse(repository).path : repos_path).sub(/\/(trunk|tags|branches)$/, '')
|
49
|
+
end
|
15
50
|
|
51
|
+
# account name to perform actions on
|
52
|
+
# this is a hack to allow us to optionally pass a variable to tasks
|
53
|
+
set (:svn_account) do
|
54
|
+
Capistrano::CLI.prompt('account name: ')
|
55
|
+
end
|
16
56
|
|
57
|
+
# XXX sudo apt-get install swig python-dev
|
58
|
+
# XXX requires apache already installed...
|
17
59
|
desc "install Subversion version control system"
|
18
|
-
task :
|
60
|
+
task :svn_install, :roles => :scm do
|
19
61
|
# svn 1.4 server improves on 1.3 and is backwards compatible with 1.3 clients
|
20
62
|
# http://subversion.tigris.org/svn_1.4_releasenotes.html
|
21
63
|
#
|
22
64
|
# We're using FSFS instead of BerkeleyDB. Read why below:
|
23
65
|
# http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.reposadmin.basics.backends
|
24
66
|
#
|
25
|
-
|
67
|
+
# NOTE: we're bulding the python bindings for trac
|
68
|
+
# ./subversion/bindings/swig/INSTALL
|
69
|
+
#
|
70
|
+
version = 'subversion-1.4.4'
|
26
71
|
set :src_package, {
|
27
72
|
:file => version + '.tar.gz',
|
28
|
-
:md5sum => '
|
73
|
+
:md5sum => '702655defa418bab8f683f6268b4fd30 subversion-1.4.4.tar.gz',
|
29
74
|
:dir => version,
|
30
75
|
:url => "http://subversion.tigris.org/downloads/#{version}.tar.gz",
|
31
76
|
:unpack => "tar zxf #{version}.tar.gz;",
|
@@ -35,32 +80,60 @@ Capistrano.configuration(:must_exist).load do
|
|
35
80
|
--with-apxs=/usr/local/apache2/bin/apxs
|
36
81
|
--with-apr=/usr/local/apache2
|
37
82
|
--with-apr-util=/usr/local/apache2
|
83
|
+
PYTHON=/usr/bin/python
|
38
84
|
;
|
39
85
|
).reject{|arg| arg.match '#'}.join(' ') , # DRY this up
|
40
86
|
:make => 'make;',
|
41
|
-
:install => 'make install;'
|
87
|
+
:install => 'make install;',
|
88
|
+
:post_install => '
|
89
|
+
make swig-py;
|
90
|
+
make install-swig-py;
|
91
|
+
echo /usr/local/lib/svn-python > /usr/lib/python2.4/site-packages/subversion.pth;
|
92
|
+
'
|
42
93
|
}
|
43
|
-
|
94
|
+
enable_universe
|
95
|
+
apt.install( {:base => %w(libneon25 libneon25-dev swig python-dev)}, :stable )
|
44
96
|
deprec.download_src(src_package, src_dir)
|
45
97
|
deprec.install_from_src(src_package, src_dir)
|
46
98
|
end
|
47
99
|
|
48
|
-
desc "
|
49
|
-
task :
|
50
|
-
|
100
|
+
desc "grant a user access to svn repos"
|
101
|
+
task :svn_grant_user_access, :roles => :scm do
|
102
|
+
deprec.useradd(svn_account)
|
51
103
|
deprec.groupadd(scm_group)
|
52
|
-
deprec.add_user_to_group(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
104
|
+
deprec.add_user_to_group(svn_account, scm_group)
|
105
|
+
end
|
106
|
+
|
107
|
+
task :scm_setup do # deprecated
|
108
|
+
svn_setup
|
109
|
+
end
|
110
|
+
|
111
|
+
task :svn_setup do
|
112
|
+
svn_import_project
|
113
|
+
end
|
114
|
+
|
115
|
+
desc "Create subversion repository and import project into it"
|
116
|
+
task :svn_import_project, :roles => :scm do
|
117
|
+
svn_create_repos
|
118
|
+
svn_import
|
57
119
|
end
|
58
|
-
|
59
|
-
# XXX check through and test the next two [mike]
|
60
120
|
|
61
|
-
|
62
|
-
|
63
|
-
|
121
|
+
desc "Create a subversion repository"
|
122
|
+
task :svn_create_repos, :roles => :scm do
|
123
|
+
set :svn_account, user
|
124
|
+
svn_grant_user_access
|
125
|
+
# deprec.useradd(user)
|
126
|
+
# deprec.groupadd(scm_group)
|
127
|
+
# deprec.add_user_to_group(user, scm_group)
|
128
|
+
deprec.mkdir(repos_root, :mode => '2775', :group => scm_group)
|
129
|
+
sudo "svnadmin verify #{repos_root} > /dev/null 2>&1 || sudo svnadmin create #{repos_root}"
|
130
|
+
sudo "chmod -R g+w #{repos_root}"
|
131
|
+
end
|
132
|
+
|
133
|
+
# Adapted from code in Bradley Taylors RailsMachine gem
|
134
|
+
desc "Import project into subversion repository."
|
135
|
+
task :svn_import, :roles => :scm do
|
136
|
+
repository ||= "#{svn_scheme}://#{scm_host == 'localhost' ? '/' : scm_host}/#{repos_path}"
|
64
137
|
new_path = "../#{application}"
|
65
138
|
tags = repository.sub("trunk", "tags")
|
66
139
|
branches = repository.sub("trunk", "branches")
|
@@ -75,43 +148,41 @@ Capistrano.configuration(:must_exist).load do
|
|
75
148
|
puts "Checking out application."
|
76
149
|
system "svn co #{repository} #{application}"
|
77
150
|
Dir.chdir application
|
78
|
-
|
79
|
-
system "svn remove log/*"
|
80
|
-
puts "ignoring log directory"
|
81
|
-
system "svn propset svn:ignore '*.log' log/"
|
82
|
-
system "svn update log/"
|
83
|
-
puts "removing tmp directory from svn"
|
84
|
-
system "svn remove tmp/"
|
85
|
-
puts "ignoring tmp directory"
|
86
|
-
system "svn propset svn:ignore '*' tmp/"
|
87
|
-
system "svn update tmp/"
|
88
|
-
puts "committing changes"
|
89
|
-
system "svn commit -m 'Removed and ignored log files and tmp'"
|
151
|
+
svn_remove_log_and_tmp
|
90
152
|
puts "Your repository is: #{repository}"
|
91
153
|
end
|
92
154
|
|
93
|
-
# from Bradley Taylors RailsMachine gem
|
155
|
+
# Lifted from Bradley Taylors RailsMachine gem
|
94
156
|
desc "remove and ignore log files and tmp from subversion"
|
95
|
-
task :svn_remove_log_and_tmp do
|
157
|
+
task :svn_remove_log_and_tmp, :roles => :scm do
|
96
158
|
puts "removing log directory contents from svn"
|
97
159
|
system "svn remove log/*"
|
98
160
|
puts "ignoring log directory"
|
99
161
|
system "svn propset svn:ignore '*.log' log/"
|
100
162
|
system "svn update log/"
|
101
|
-
puts "removing tmp
|
102
|
-
system "svn remove tmp/"
|
163
|
+
puts "removing contents of tmp sub-directorys from svn"
|
164
|
+
system "svn remove tmp/cache/*"
|
165
|
+
system "svn remove tmp/pids/*"
|
166
|
+
system "svn remove tmp/sessions/*"
|
167
|
+
system "svn remove tmp/sockets/*"
|
103
168
|
puts "ignoring tmp directory"
|
104
|
-
system "svn propset svn:ignore '*' tmp/"
|
169
|
+
system "svn propset svn:ignore '*' tmp/cache"
|
170
|
+
system "svn propset svn:ignore '*' tmp/pids"
|
171
|
+
system "svn propset svn:ignore '*' tmp/sessions"
|
172
|
+
system "svn propset svn:ignore '*' tmp/sockets"
|
105
173
|
system "svn update tmp/"
|
106
174
|
puts "committing changes"
|
107
175
|
system "svn commit -m 'Removed and ignored log files and tmp'"
|
108
176
|
end
|
109
177
|
|
110
|
-
desc "Cache svn name and password on the server. Useful for http-based repositories."
|
178
|
+
# desc "Cache svn name and password on the server. Useful for http-based repositories."
|
111
179
|
task :svn_cache_credentials do
|
112
180
|
run_with_input "svn list #{repository}"
|
113
181
|
end
|
114
182
|
|
183
|
+
|
184
|
+
|
185
|
+
|
115
186
|
# XXX TODO
|
116
187
|
# desc "backup repository"
|
117
188
|
# task :svn_backup_respository, :roles => :scm do
|
data/lib/deprec/recipes/trac.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
Capistrano.configuration(:must_exist).load do
|
2
2
|
|
3
|
-
|
3
|
+
set :trac_password_file, lambda { "#{trac_path}/conf/users.htdigest" }
|
4
|
+
set :trac_pidfile, lambda { "#{deploy_to}/shared/pids/trac.pid" }
|
5
|
+
set :tracd_port, '9000'
|
6
|
+
set (:trac_path) do
|
7
|
+
deploy_to ? "#{deploy_to}/trac" : Capistrano::CLI.prompt('path to trac config: ')
|
8
|
+
end
|
9
|
+
set (:trac_account) do
|
10
|
+
Capistrano::CLI.prompt('enter new trac user account name: ')
|
11
|
+
end
|
12
|
+
set :trac_passwordfile_exists, true # hack - should check on remote system instead
|
13
|
+
|
14
|
+
task :trac_install, :roles => :scm do
|
4
15
|
version = 'trac-0.10.4'
|
5
16
|
set :src_package, {
|
6
17
|
:file => version + '.tar.gz',
|
@@ -10,8 +21,78 @@ Capistrano.configuration(:must_exist).load do
|
|
10
21
|
:unpack => "tar zxf #{version}.tar.gz;",
|
11
22
|
:install => 'python ./setup.py install --prefix=/usr/local;'
|
12
23
|
}
|
24
|
+
enable_universe
|
25
|
+
apt.install( {:base => %w(python-sqlite sqlite python-clearsilver)}, :stable )
|
13
26
|
deprec.download_src(src_package, src_dir)
|
14
27
|
deprec.install_from_src(src_package, src_dir)
|
15
|
-
# mysql.create_database(wordpress_db_name, wordpress_db_user, wordpress_db_pass )
|
16
28
|
end
|
29
|
+
|
30
|
+
task :trac_create_pid_dir, :roles => :scm do
|
31
|
+
deprec.mkdir(File.dirname(trac_pidfile))
|
32
|
+
end
|
33
|
+
|
34
|
+
task :trac_setup, :roles => :scm do
|
35
|
+
trac_init
|
36
|
+
trac_config
|
37
|
+
# create trac account for current user
|
38
|
+
set :trac_account, user
|
39
|
+
set :trac_passwordfile_exists, false # hack - should check on remote system instead
|
40
|
+
trac_user_add
|
41
|
+
|
42
|
+
trac_create_pid_dir
|
43
|
+
end
|
44
|
+
|
45
|
+
task :trac_init, :roles => :scm do
|
46
|
+
sudo "trac-admin #{trac_path} initenv #{application} sqlite:db/trac.db svn #{repos_root} /usr/local/share/trac/templates"
|
47
|
+
trac_set_default_permissions
|
48
|
+
end
|
49
|
+
|
50
|
+
task :trac_set_default_permissions, :roles => :scm do
|
51
|
+
trac_anonymous_disable
|
52
|
+
trac_authenticated_enable
|
53
|
+
end
|
54
|
+
|
55
|
+
# desc "disable anonymous access to everything"
|
56
|
+
task :trac_anonymous_disable, :roles => :scm do
|
57
|
+
sudo "trac-admin #{trac_path} permission remove anonymous '*'"
|
58
|
+
end
|
59
|
+
|
60
|
+
# desc "enable authenticated users access to everything"
|
61
|
+
task :trac_authenticated_enable, :roles => :scm do
|
62
|
+
sudo "trac-admin #{trac_path} permission add authenticated TRAC_ADMIN"
|
63
|
+
end
|
64
|
+
|
65
|
+
task :trac_config, :roles => :scm do
|
66
|
+
deprec.render_template_to_file('trac.ini.erb', "#{trac_path}/conf/trac.ini")
|
67
|
+
end
|
68
|
+
|
69
|
+
task :trac_start, :roles => :scm do
|
70
|
+
# XXX enable this for cap2
|
71
|
+
# XXX run "echo point your browser to http://$CAPISTRANO:HOST$:#{tracd_port}/trac"
|
72
|
+
auth_string = "--auth=*,#{trac_password_file},#{application}"
|
73
|
+
sudo "tracd #{auth_string} --daemonize --single-env --port=#{tracd_port} --pidfile=#{trac_pidfile} #{trac_path}"
|
74
|
+
end
|
75
|
+
|
76
|
+
task :trac_stop, :roles => :scm do
|
77
|
+
sudo "kill `cat #{trac_pidfile}` >/dev/null 2>&1"
|
78
|
+
sudo "rm -f #{trac_pidfile}"
|
79
|
+
end
|
80
|
+
|
81
|
+
desc "create a trac user"
|
82
|
+
task :trac_user_add, :roles => :scm do
|
83
|
+
create_file = trac_passwordfile_exists ? '' : ' -c '
|
84
|
+
htdigest = '/usr/local/apache2/bin/htdigest'
|
85
|
+
# XXX check if htdigest file exists and add '-c' option if not
|
86
|
+
# sudo "test -f #{trac_path/conf/users.htdigest}
|
87
|
+
create_file = trac_passwordfile_exists ? '' : ' -c '
|
88
|
+
sudo_with_input("#{htdigest} #{create_file} #{trac_path}/conf/users.htdigest #{application} #{trac_account}", /password:/)
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "list trac users"
|
92
|
+
task :trac_list_users, :roles => :scm do
|
93
|
+
sudo "cat #{trac_path}/conf/users.htdigest"
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
17
98
|
end
|
File without changes
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
[attachment]
|
4
|
+
max_size = 262144
|
5
|
+
render_unsafe_content = false
|
6
|
+
|
7
|
+
[browser]
|
8
|
+
downloadable_paths = /trunk, /branches/*, /tags/*
|
9
|
+
hide_properties = svk:merge
|
10
|
+
render_unsafe_content = false
|
11
|
+
|
12
|
+
[changeset]
|
13
|
+
max_diff_bytes = 10000000
|
14
|
+
max_diff_files = 0
|
15
|
+
wiki_format_messages = true
|
16
|
+
|
17
|
+
[header_logo]
|
18
|
+
alt =
|
19
|
+
height = -1
|
20
|
+
link = http://example.org/
|
21
|
+
src = common/trac_banner.png
|
22
|
+
width = -1
|
23
|
+
|
24
|
+
[logging]
|
25
|
+
log_file = trac.log
|
26
|
+
# log_format = <set in global trac.ini>
|
27
|
+
log_level = DEBUG
|
28
|
+
log_type = none
|
29
|
+
|
30
|
+
[mimeviewer]
|
31
|
+
enscript_modes = text/x-dylan:dylan:4
|
32
|
+
enscript_path = enscript
|
33
|
+
max_preview_size = 262144
|
34
|
+
mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb
|
35
|
+
php_path = php
|
36
|
+
silvercity_modes =
|
37
|
+
tab_width = 8
|
38
|
+
|
39
|
+
[notification]
|
40
|
+
always_notify_owner = false
|
41
|
+
always_notify_reporter = false
|
42
|
+
always_notify_updater = true
|
43
|
+
mime_encoding = base64
|
44
|
+
smtp_always_bcc =
|
45
|
+
smtp_always_cc =
|
46
|
+
smtp_default_domain =
|
47
|
+
smtp_enabled = false
|
48
|
+
smtp_from = trac@localhost
|
49
|
+
smtp_password =
|
50
|
+
smtp_port = 25
|
51
|
+
smtp_replyto = trac@localhost
|
52
|
+
smtp_server = localhost
|
53
|
+
smtp_subject_prefix = __default__
|
54
|
+
smtp_user =
|
55
|
+
use_public_cc = false
|
56
|
+
use_short_addr = false
|
57
|
+
use_tls = false
|
58
|
+
|
59
|
+
[project]
|
60
|
+
descr = My example project
|
61
|
+
footer = Visit the Trac open source project at<br /><a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a>
|
62
|
+
icon = common/trac.ico
|
63
|
+
name = <%= application %>
|
64
|
+
url = http://example.org/
|
65
|
+
|
66
|
+
[search]
|
67
|
+
min_query_length = 3
|
68
|
+
|
69
|
+
[ticket]
|
70
|
+
default_component =
|
71
|
+
default_milestone =
|
72
|
+
default_priority = major
|
73
|
+
default_type = defect
|
74
|
+
default_version =
|
75
|
+
restrict_owner = false
|
76
|
+
|
77
|
+
[timeline]
|
78
|
+
changeset_long_messages = false
|
79
|
+
changeset_show_files = 0
|
80
|
+
default_daysback = 30
|
81
|
+
ticket_show_details = false
|
82
|
+
|
83
|
+
[trac]
|
84
|
+
authz_file =
|
85
|
+
authz_module_name =
|
86
|
+
base_url =
|
87
|
+
check_auth_ip = true
|
88
|
+
database = sqlite:db/trac.db
|
89
|
+
default_charset = iso-8859-15
|
90
|
+
default_handler = WikiModule
|
91
|
+
htdocs_location =
|
92
|
+
ignore_auth_case = false
|
93
|
+
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
|
94
|
+
metanav = login,logout,settings,help,about
|
95
|
+
permission_store = DefaultPermissionStore
|
96
|
+
repository_dir = <%= repos_root %>
|
97
|
+
repository_type = svn
|
98
|
+
# request_filters = <set in global trac.ini>
|
99
|
+
# templates_dir = <set in global trac.ini>
|
100
|
+
timeout = 20
|
101
|
+
|
102
|
+
[wiki]
|
103
|
+
ignore_missing_pages = false
|
104
|
+
render_unsafe_content = false
|
105
|
+
split_page_names = false
|
106
|
+
|