keithsalisbury-subtrac 0.1.7 → 0.1.9

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/README.markdown CHANGED
@@ -21,6 +21,139 @@ For all users, you can add it here:
21
21
 
22
22
  ...
23
23
  export PATH=$PATH:/var/lib/gems/1.8/bin
24
+
25
+
26
+ # Installing on VirtualBox
27
+
28
+ Start with a Fresh VM Image
29
+ Install jeos (hardy)
30
+ # mount guest additions -
31
+ sudo mount /media/cdrom0/ -o unhide
32
+
33
+ # install gcc and make
34
+ sudo aptitude install build-essential linux-headers-`uname -r`
35
+
36
+ # install the guest additions
37
+ sudo /cdrom/VBoxLinuxAdditions-x86.run all
38
+
39
+ # install openssh-server?
40
+ sudo apt-get install openssh-server
41
+
42
+ # install gems
43
+ sudo apt-get install ruby rubygems
44
+
45
+ # update gems
46
+ sudo apt-get update --system
47
+
48
+ # edit bash.bashrc so all users can run the gem binaries
49
+ sudo vi /etc/bash.bashrc
50
+
51
+ # add github to the gem sources list
52
+ sudo gem sources -a http://gems.github.com
53
+
54
+ # some other pre-requisites
55
+ sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 sqlite3
56
+
57
+ # install subtrac gem package
58
+ sudo gem install --include-dependencies keithsalisbury-subtrac
59
+
60
+ # enable mod_rewrite
61
+ a2enmod rewrite
62
+
63
+ # enable dav
64
+ sudo apt-get install libapache2-svn
65
+
66
+ # enable mod_python
67
+ sudo apt-get install libapache2-mod-python libapache2-mod-python-doc
68
+
69
+ sudo apt-get install apache2 libapache2-mod-python \
70
+ libapache2-svn python-setuptools subversion python-subversion
71
+ sudo easy_install Trac
72
+
73
+ # some trac plugin requirements
74
+ sudo apt-get install build-essential graphviz
75
+ sudo apt-get install htmldoc
76
+ sudo apt-get install enscript
77
+
78
+ easy_install -U setuptools
79
+
80
+ # some cool plugins
81
+ sudo easy_install http://svn.edgewall.org/repos/genshi/trunk/
82
+ sudo easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk
83
+ sudo easy_install http://trac-hacks.org/svn/customfieldadminplugin/0.11
84
+ sudo easy_install http://trac-hacks.org/svn/eclipsetracplugin/tracrpcext/0.10
85
+ sudo easy_install http://trac-hacks.org/svn/iniadminplugin/0.11
86
+ sudo easy_install http://trac-hacks.org/svn/masterticketsplugin/0.11
87
+ sudo easy_install http://trac-hacks.org/svn/pagetopdfplugin/0.10/
88
+ sudo easy_install http://trac-hacks.org/svn/progressmetermacro/0.11
89
+ sudo easy_install http://trac-hacks.org/svn/ticketdeleteplugin/0.11
90
+ sudo easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.11
91
+ sudo easy_install http://wikinotification.ufsoft.org/svn/trunk
92
+
93
+ # install subtrac server
94
+ sudo subtrac install [--clean]
95
+
96
+ # Mount a shared host folder from the VM Guest
97
+ mount.vboxsf pkg /mnt/subtrac/
98
+
99
+ # Setting up VM to use an internal loop back interface
100
+
101
+ ## Create the interal interface
102
+ Snakey:~ adambarton$ sudo -i
103
+ Snakey:~ root# python
104
+ Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26)
105
+ [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
106
+ Type "help", "copyright", "credits" or "license" for more information.
107
+ >>> import os
108
+ >>> file_path = '/dev/tap1'
109
+ >>> dev_file = os.open(file_path, os.O_RDWR)
110
+ >>> interface = 'tap1'
111
+
112
+ Leave this window open...
113
+
114
+ ## Configure the interface
115
+
116
+ Snakey:~ root# ifconfig tap1 10.0.2.100 up
117
+ Snakey:~ root# ifconfig tap1
118
+ tap1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
119
+ inet 100.100.100.100 netmask 0xff000000 broadcast 100.255.255.255
120
+ ether ea:a2:95:41:b0:8f
121
+ open (pid 4104)
122
+
123
+ ## Configure the VM
124
+
125
+ VBoxManage modifyvm TestHost1 -nic1 hostif -hostifdev1 'tap1: ethernet'
126
+
127
+ Boot it, and give it a static address on the same subnet
128
+
129
+ ## Assign a static ip
130
+
131
+ sudo vi /etc/networking/interfaces
132
+
133
+ # The primary network interface
134
+ auto eth0
135
+ iface eth0 inet static
136
+ address 10.0.2.2
137
+ netmask 255.255.255.0
138
+ network 10.0.2.0
139
+ broadcast 10.0.2.255
140
+ gateway 10.0.2.200
141
+
142
+ # The secondary network interface
143
+ auto eth1
144
+ iface eth0 inet dhcp
145
+
146
+ # For linux users there's an even cooler way to set this up...
147
+
148
+ http://muffinresearch.co.uk/archives/2009/04/08/virtualbox-access-guests-via-a-virtual-interface/
149
+
150
+ # OSX Map your new domain to the ip
151
+
152
+ sudo mate /private/etc/hosts
153
+
154
+ 10.0.2.2 dev.subtrac.com
155
+
156
+
24
157
 
25
158
  ## Copyright
26
159
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 7
4
+ :patch: 9
data/lib/subtrac.rb CHANGED
@@ -41,11 +41,96 @@ require 'fileutils'
41
41
  require 'subtrac/version'
42
42
 
43
43
  module Subtrac
44
- SUBTRAC_ROOT = File.join(File.dirname(__FILE__), "subtrac")
45
- DEV_ENV = 'development' # should be a system environment var
46
-
47
- attr_accessor :server_name, :server_hostname, :server_ip, :default_client, :default_project, :install_dir, :docs_dir, :conf_dir, :locations_dir, :svn_dir, :trac_dir, :temp_dir
48
44
 
45
+ SUBTRAC_ROOT = "#{File.dirname(__FILE__)}/" unless defined?(SUBTRAC_ROOT)
46
+ SUBTRAC_ENV = (ENV['SUBTRAC_ENV'] || 'development').dup unless defined?(SUBTRAC_ENV)
47
+ USER_CONFIG = 'config/user.yml'
48
+
49
+ class << self
50
+
51
+ # The Configuration instance used to configure the Subtrac environment
52
+ def configuration
53
+ @@configuration
54
+ end
55
+
56
+ def configuration=(configuration)
57
+ @@configuration = configuration
58
+ end
59
+
60
+ def initialized?
61
+ @initialized || false
62
+ end
63
+
64
+ def initialized=(initialized)
65
+ @initialized ||= initialized
66
+ end
67
+
68
+ def root
69
+ Pathname.new(SUBTRAC_ROOT) if defined?(SUBTRAC_ROOT)
70
+ end
71
+
72
+ def public_path
73
+ @@public_path ||= self.root ? File.join(self.root, "public") : "public"
74
+ end
75
+
76
+ def subtrac_path
77
+ @@subtrac_path ||= self.root ? File.join(self.root, "subtrac") : "subtrac"
78
+ end
79
+
80
+ def public_path=(path)
81
+ @@public_path = path
82
+ end
83
+
84
+ def docs_dir
85
+ @@docs_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:docs])
86
+ end
87
+
88
+ def docs_dir=(dir)
89
+ @@docs_dir = dir
90
+ end
91
+
92
+ def svn_dir
93
+ @@svn_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:svn])
94
+ end
95
+
96
+ def svn_dir=(dir)
97
+ @@svn_dir = dir
98
+ end
99
+
100
+ def trac_dir
101
+ @@trac_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:trac])
102
+ end
103
+
104
+ def trac_dir=(dir)
105
+ @@trac_dir = dir
106
+ end
107
+
108
+ def temp_dir
109
+ @@temp_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:temp])
110
+ end
111
+
112
+ def temp_dir=(dir)
113
+ @@temp_dir = dir
114
+ end
115
+
116
+ def log_dir
117
+ @@log_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:log])
118
+ end
119
+
120
+ def log_dir=(dir)
121
+ @@log_dir = dir
122
+ end
123
+
124
+ def locations_dir
125
+ @@locations_dir ||= File.join(@install_dir,@APP_CONFIG[:dirs][:locations])
126
+ end
127
+
128
+ def locations_dir=(dir)
129
+ @@locations_dir = dir
130
+ end
131
+
132
+ end
133
+
49
134
  module Commands
50
135
  class Install
51
136
  def initialize(args, options)
@@ -55,54 +140,34 @@ module Subtrac
55
140
  end
56
141
  class Create
57
142
  def initialize(args, options)
58
- project = ask("What is the name of the project you would like to create? ") if !options.project
59
- client = ask("Which client is this project for? ") if !options.client
143
+ options.project = ask("What is the name of the project you would like to create? ") if !options.project
144
+ options.client = ask("Which client is this project for? ") if !options.client
145
+ # this needs to load the updated configuration?
60
146
  Subtrac.load_config()
61
147
  Subtrac.create_project(options.project,options.client)
62
148
  end
63
149
  end
64
150
  end
65
-
66
- # Install
67
- def self.install(args,options)
68
- puts "\n==== Installing development server files ===="
69
- # Ask if the user agrees (yes or no)
70
- confirm_clean = agree("Are you sure you would like a clean install? [Y/n]") if options.clean
71
- # clear previous data
72
- clean() if confirm_clean
73
- # right lets install
74
- change_server_name = agree("The default server name is \"#{@server_name}\". Would you like to change this? [Y/n]")
75
- @server_name = ask("What would you like to call your new development server? ") if change_server_name
76
-
77
- create_environment_directories()
78
- install_common_files()
79
- create_virtual_host()
80
- confirm_default_client = agree("Do you want to create a default client project? [Y/n]")
81
- # create default project and client
82
- if confirm_default_client
83
- change_client = agree("The default client name is \"#{@default_client}\". Would you like to change this? [Y/n]")
84
- @default_client = ask("What client name would you like to use? ") if change_client
85
- change_project = agree("The default project name is \"#{@default_project}\". Would you like to change this? [Y/n]")
86
- @default_project = ask("What would you like to call your new project? ") if change_project
87
- create_project(@default_project,@default_client)
88
- end
89
- end
90
-
151
+
91
152
  # Loads the configuration YML file
92
153
  def self.load_config
154
+ # TODO: We need to refactor this code so it will load the default configuration only if one has not been created
93
155
  puts "\n==== Loading configuration file ===="
94
156
  # load configuration file
157
+ file_path = File.join(subtrac_path, USER_CONFIG)
158
+ file_path = File.join(subtrac_path,"/config/config.yml") if not File.exists?(file_path)
159
+ puts "Attempting to read config file: #{file_path}"
95
160
  begin
96
- raw_config = File.read(SUBTRAC_ROOT + "/config/config.yml")
161
+ raw_config = File.read(file_path)
97
162
  yamlFile = YAML.load(raw_config)
98
163
  rescue Exception => e
99
164
  raise StandardError, "Config #{file_path} could not be loaded."
100
165
  end
101
166
  if yamlFile
102
- if yamlFile[DEV_ENV]
103
- @APP_CONFIG = yamlFile[DEV_ENV]
167
+ if yamlFile[SUBTRAC_ENV]
168
+ @APP_CONFIG = yamlFile[SUBTRAC_ENV]
104
169
  else
105
- raise StandardError, "config/config.yml exists, but doesn't have a configuration for DEV_ENV=#{DEV_ENV}."
170
+ raise StandardError, "config/config.yml exists, but doesn't have a configuration for #{SUBTRAC_ENV}."
106
171
  end
107
172
  else
108
173
  raise StandardError, "config/config.yml does not exist."
@@ -118,25 +183,69 @@ module Subtrac
118
183
  @default_project = @APP_CONFIG[:default_project]
119
184
 
120
185
  @install_dir = File.expand_path(@APP_CONFIG[:installation_dir])
121
- @docs_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:docs])
122
186
  @conf_dir = @APP_CONFIG[:apache2_conf]
123
- @locations_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:conf_locations])
124
- @svn_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:svn])
125
- @trac_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:trac])
126
- @temp_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:temp])
127
- @log_dir = File.join(@install_dir,@APP_CONFIG[:dirs][:log])
128
187
 
129
188
  @ldap_bind_dn = @APP_CONFIG[:ldap][:bind_dn]
130
189
  @ldap_bind_password = @APP_CONFIG[:ldap][:bind_password]
131
190
  @ldap_url = @APP_CONFIG[:ldap][:host]
191
+
192
+ end
193
+
194
+
195
+ # Install
196
+ def self.install(args,options)
197
+ puts "\n==== Installing development server files ===="
198
+ # check where we are installing
199
+ change_install_dir = agree("The default installation directory is \"#{@install_dir}\". Would you like to change this? [Y/n]")
200
+ @install_dir = ask("Where would you like to install this server?") if change_install_dir
201
+
202
+ unless !File.directory?(@install_dir)
203
+ # Ask if the user agrees (yes or no)
204
+ confirm_clean = agree("Err, that dirctory's got stuff init. You sure you want me to overwrite? [Y/n]") if options.clean
205
+ end
132
206
 
207
+ # right lets install
208
+ change_server_name = agree("The default server name is \"#{@server_name}\". Would you like to change this? [Y/n]")
209
+ @server_name = ask("What would you like to call your new development server? ") if change_server_name
210
+
211
+ create_environment_directories(confirm_clean)
212
+ install_common_files()
213
+ # TODO: Need to check for default client/project before creating virtual host
214
+ # otherwise we need remove the rewrite rule
215
+ create_virtual_host()
216
+ confirm_default_client = agree("Do you want to create a default client project? [Y/n]")
217
+ # create default project and client
218
+ if confirm_default_client
219
+ change_client = agree("The default client name is \"#{@default_client}\". Would you like to change this? [Y/n]")
220
+ @default_client = ask("What client name would you like to use? ") if change_client
221
+ change_project = agree("The default project name is \"#{@default_project}\". Would you like to change this? [Y/n]")
222
+ @default_project = ask("What would you like to call your new project? ") if change_project
223
+ create_project(@default_project,@default_client)
224
+ end
225
+ save_config()
133
226
  end
134
227
 
135
228
  private
136
229
 
137
- # Ask the user for configuration details
138
- def self.get_config
230
+ # Write the changes configuration to disk
231
+ def self.save_config
232
+ # save the things that might have changed
233
+ @APP_CONFIG[:server_name] = @server_name
234
+ @APP_CONFIG[:server_hostname] = @server_hostname
235
+ @APP_CONFIG[:server_ip] = @server_ip
236
+
237
+ @APP_CONFIG[:default_client] = @default_client
238
+ @APP_CONFIG[:default_project] = @default_project
239
+
240
+ @APP_CONFIG[:installation_dir] = @install_dir
241
+ @APP_CONFIG[:apache2_conf] = @conf_dir
139
242
 
243
+ @APP_CONFIG[:ldap][:bind_dn] = @ldap_bind_dn
244
+ @APP_CONFIG[:ldap][:bind_password] = @ldap_bind_password
245
+ @APP_CONFIG[:ldap][:host] = @ldap_url
246
+
247
+ file_path = File.join(subtrac_path, USER_CONFIG)
248
+ open(file_path, 'w') {|f| YAML.dump({SUBTRAC_ENV => @APP_CONFIG}, f)}
140
249
  end
141
250
 
142
251
  # creates a directory if it does not exist
@@ -167,53 +276,51 @@ module Subtrac
167
276
  # creates a new virtual host and reloads apache and enables the new virtual host
168
277
  def self.create_virtual_host
169
278
  puts "\n==== Creating new virtual host ===="
170
- vhost_template = File.join(SUBTRAC_ROOT, @APP_CONFIG[:templates][:virtual_host])
279
+ vhost_template = File.join(subtrac_path, @APP_CONFIG[:templates][:virtual_host])
280
+ puts "group apache tempalte: #{vhost_template}"
171
281
  new_vhost = File.join(@conf_dir,@server_hostname)
172
- parse_template(vhost_template,new_vhost,binding)
282
+ puts "group apache file: #{new_vhost}"
283
+ parse_template(vhost_template,new_vhost,binding) if SUBTRAC_ENV != 'test'
173
284
  # reload apache configuration
174
- `/etc/init.d/apache2 force-reload` if DEV_ENV != 'test'
175
- `a2ensite #{@server_hostname}` if DEV_ENV != 'test'
285
+ `/etc/init.d/apache2 force-reload` if SUBTRAC_ENV != 'test'
286
+ `a2ensite #{@server_hostname}` if SUBTRAC_ENV != 'test'
176
287
  end
177
288
 
178
289
  def self.install_common_files
179
290
  puts "\n==== Installing common files ===="
180
291
  # TODO: implement a mask for .svn folders
181
292
  # TODO: refactor /common to the app config
182
- common_dir = File.join(SUBTRAC_ROOT, "common")
183
- source = Dir.glob("#{common_dir}/.")
184
- dest = @docs_dir
185
- FileUtils.cp_r(source,dest)
293
+ FileUtils.cp_r(Dir.glob(File.join(subtrac_path, "common/.")),docs_dir)
294
+ FileUtils.cp_r(Dir.glob(File.join(subtrac_path, "shared/.")),File.join(trac_dir, ".shared"))
186
295
  end
187
296
 
188
- def self.create_environment_directories
297
+ def self.create_environment_directories(overwrite=false)
189
298
  puts "\n==== Creating new environment directories ===="
299
+ FileUtils.rm_rf @install_dir if overwrite
300
+ create_if_missing @install_dir
190
301
  # create the environment directories
191
302
  @APP_CONFIG[:dirs].each do |key, value|
192
- create_if_missing File.join(@install_dir,value)
303
+ dir = File.join(@install_dir,value)
304
+ create_if_missing dir
193
305
  end
194
306
  end
195
307
 
196
- def self.clean
197
- puts "\n==== Remove old data if exists ===="
198
- @APP_CONFIG[:dirs].each do |key, value|
199
- #TODO: Ask for confirmation - yes,no,All
200
- puts "Deleting #{value}"
201
- FileUtils.rm_rf value
202
- end
203
- end
204
-
205
308
  def self.create_client(name)
206
309
  puts "\n==== Create a new client called #{name} ===="
207
310
  client_name = name.downcase
208
311
  # create apache configuration
209
- location_template = File.join(SUBTRAC_ROOT, @APP_CONFIG[:templates][:location])
210
- location_conf = File.join(@locations_dir,"#{client_name}.conf")
312
+ puts "subtrac_path: #{subtrac_path}"
313
+ puts "templates_location: #{@APP_CONFIG[:templates][:location]}"
314
+ location_template = File.join(subtrac_path, @APP_CONFIG[:templates][:location])
315
+ puts "location_template: #{location_template}"
316
+ location_conf = File.join(locations_dir,"#{client_name}.conf")
317
+ puts "location_conf: #{location_conf}"
211
318
  parse_template(location_template,location_conf,binding)
212
- `/etc/init.d/apache2 force-reload` if DEV_ENV != 'test'
319
+ `/etc/init.d/apache2 force-reload` if SUBTRAC_ENV != 'test'
213
320
 
214
321
  # create svn+trac directory
215
- create_if_missing File.join(@svn_dir,client_name)
216
- create_if_missing File.join(@trac_dir,client_name)
322
+ create_if_missing File.join(svn_dir,client_name)
323
+ create_if_missing File.join(trac_dir,client_name)
217
324
  end
218
325
 
219
326
  def self.create_project(project, client)
@@ -223,51 +330,57 @@ module Subtrac
223
330
  project_name = project.downcase
224
331
 
225
332
  # create client directory if needed
226
- create_client(client_name) if (!File.directory? File.join(@svn_dir,client_name))
333
+ create_client(client_name) if (!File.directory? File.join(svn_dir,client_name))
334
+
335
+ project_svn_dir = File.join(svn_dir,client_name,project_name)
336
+ project_trac_dir = File.join(trac_dir,client_name,project_name)
227
337
 
228
- svn_dir = File.join(@svn_dir,client_name,project_name)
229
- trac_dir = File.join(@trac_dir,client_name,project_name)
230
- if (File.directory? svn_dir) then
338
+ # TODO: Need to change this to use a 'groups' yml file
339
+ if (File.directory? project_svn_dir) then
231
340
  raise StandardError, "A project called #{project} already exists in the #{client} repository. Would you like to replace it?"
232
341
  end
233
342
 
234
343
  # create new project directories
235
- create_if_missing svn_dir
236
- create_if_missing trac_dir
344
+ say("Create project directories...")
345
+ create_if_missing project_svn_dir
346
+ create_if_missing project_trac_dir
237
347
 
238
- project_template = File.join(SUBTRAC_ROOT, @APP_CONFIG[:templates][:projects],@APP_CONFIG[:default_project_template])
348
+ project_template = File.join(subtrac_path, @APP_CONFIG[:templates][:projects],@APP_CONFIG[:default_project_template])
239
349
 
240
350
  # copy template svn project to a temp folder, then svn import it into the repo
351
+ say("Create temporary project directory and copy template files...")
241
352
  svn_template_dir = File.join(project_template,"svn")
242
- temp_dir = File.join(@temp_dir,project_name)
243
- FileUtils.cp_r(svn_template_dir,temp_dir)
353
+ project_temp_dir = File.join(temp_dir,project_name)
354
+ FileUtils.cp_r(svn_template_dir,project_temp_dir)
244
355
 
245
356
  # create a new subversion repository
246
357
  say("Creating a new subversion repository...")
247
- `svnadmin create #{svn_dir}` if DEV_ENV != 'test'
358
+ `svnadmin create #{project_svn_dir}` if SUBTRAC_ENV != 'test'
248
359
 
249
360
  # import into svn
250
- `svn import #{temp_dir} file:///#{svn_dir} --message "initial import"` if DEV_ENV != 'test'
361
+ say("Importing temporary project into the new subversion repository...")
362
+ `svn import #{project_temp_dir} file:///#{project_svn_dir} --message "initial import"` if SUBTRAC_ENV != 'test'
251
363
  # delete the temporary directory
252
- FileUtils.rm_r(temp_dir, :force => true)
364
+ FileUtils.rm_r(project_temp_dir, :force => true)
253
365
 
254
366
  # create a new trac site
255
367
  say("Creating a new trac site...")
256
- result = `trac-admin #{trac_dir} initenv #{project_name} sqlite:#{trac_dir}/db/trac.db svn #{svn_dir}` if DEV_ENV != 'test'
257
- FileUtils.chown_R('www-data', 'www-data', trac_dir, :verbose => true) if DEV_ENV != 'test'
258
- FileUtils.mkdir_p("#{trac_dir}/conf") if DEV_ENV == 'test' # fake the folder for tests
368
+ result = `trac-admin #{project_trac_dir} initenv #{project_name} sqlite:#{project_trac_dir}/db/trac.db svn #{project_svn_dir}` if SUBTRAC_ENV != 'test'
369
+ FileUtils.chown_R('www-data', 'www-data', project_trac_dir, :verbose => true) if SUBTRAC_ENV != 'test'
370
+ FileUtils.mkdir_p("#{project_trac_dir}/conf") if SUBTRAC_ENV == 'test' # fake the folder for tests
259
371
 
372
+ say("Installing trac configuration...")
260
373
  # install shared trac.ini
261
- trac_ini_template = File.join(SUBTRAC_ROOT, @APP_CONFIG[:templates][:trac])
262
- parse_template(trac_ini_template,File.join(trac_dir,"/conf/trac.ini"),binding)
374
+ trac_ini_template = File.join(subtrac_path, @APP_CONFIG[:templates][:trac])
375
+ parse_template(trac_ini_template,File.join(project_trac_dir,"/conf/trac.ini"),binding)
263
376
 
264
377
  # remove custom templates directory so trac uses the shared location (while we wait for trac patch)
265
- FileUtils.rm_rf("#{trac_dir}/templates")
378
+ FileUtils.rm_rf("#{project_trac_dir}/templates")
266
379
 
267
- say("Setting up default trac permission...")
380
+ say("Setting up default trac permissions...")
268
381
  # set up trac permissions
269
382
  @APP_CONFIG[:trac][:permissions].each do |key, value|
270
- `trac-admin #{trac_dir} permission add #{key} #{value}` if DEV_ENV != 'test'
383
+ `trac-admin #{project_trac_dir} permission add #{key} #{value}` if SUBTRAC_ENV != 'test'
271
384
  end
272
385
 
273
386
  say("Adding default trac wiki pages...")
@@ -275,13 +388,17 @@ module Subtrac
275
388
  Dir.foreach("#{project_template}/trac/wiki/.") do |file|
276
389
  # do something with the file here
277
390
  unless ['.', '..','.svn'].include? file
278
- temp_file = File.join(@temp_dir,file)
391
+ temp_file = File.join(temp_dir,file)
279
392
  parse_template(File.join(project_template,"trac/wiki",file), temp_file, binding)
280
- `trac-admin #{trac_dir} wiki import #{file} #{temp_file}` if DEV_ENV != 'test'
393
+ `trac-admin #{project_trac_dir} wiki import #{file} #{temp_file}` if SUBTRAC_ENV != 'test'
281
394
  FileUtils.rm(temp_file)
282
395
  end
283
396
  end
284
-
397
+
398
+ # run trac upgrade
399
+ say("Upgrading the trac installation...")
400
+ `trac-admin #{project_trac_dir} upgrade` if SUBTRAC_ENV != 'test'
401
+
285
402
  end
286
403
  end
287
404
 
@@ -45,7 +45,7 @@ development: &non_production_settings
45
45
  :log: log
46
46
  :docs: www
47
47
  :conf: conf
48
- :conf_locations: conf/locations
48
+ :locations: locations
49
49
  :temp: tmp
50
50
  :urls:
51
51
  :svn: "/svn"
@@ -2,14 +2,14 @@
2
2
  SetHandler mod_python
3
3
  PythonInterpreter main_interpreter
4
4
  PythonHandler trac.web.modpython_frontend
5
- PythonOption TracEnvParentDir <%= @trac_dir %>/<%= client_name %>
5
+ PythonOption TracEnvParentDir <%= trac_dir %>/<%= client_name %>
6
6
  PythonOption TracUriRoot /<%= client_name %>
7
- PythonOption TracEnvIndexTemplate <%= @trac_dir %>/<%= client_name %>/trac_theme/htdocs/index/index.html
7
+ PythonOption TracEnvIndexTemplate <%= trac_dir %>/<%= client_name %>/trac_theme/htdocs/index/index.html
8
8
  PythonOption PYTHON_EGG_CACHE /tmp
9
9
  </location>
10
10
  <location <%= @APP_CONFIG[:urls][:svn] %>/<%= client_name %>>
11
11
  DAV svn
12
- SVNParentPath <%= @APP_CONFIG[:urls][:svn] %>/<%= client_name %>
12
+ SVNParentPath <%= svn_dir %>/<%= client_name %>
13
13
  SVNListParentPath On
14
14
  SVNAutoversioning On
15
15
  SVNReposName "Saint Digital Source Repository for <%= client_name %>"
@@ -1,6 +1,6 @@
1
1
  [inherit]
2
- file = <%= @docs_dir %>/common/trac.ini
3
- templates_dir = ../../trac_theme/shared/theme/templates
2
+ file = ../../../.shared/trac.ini
3
+ templates_dir = ../../.theme/templates
4
4
 
5
5
  [project]
6
6
  name = <%= project_name %>
@@ -1,19 +1,19 @@
1
1
  <virtualhost *>
2
2
  ServerAdmin webmaster@localhost
3
3
  ServerName <%= @server_hostname %>
4
- DocumentRoot <%= @docs_dir %>
5
- ErrorLog <%= @log_dir %>/error.<%= @server_hostname %>.log
6
- CustomLog <%= @log_dir %>/access.<%= @server_hostname %>.log combined
4
+ DocumentRoot <%= docs_dir %>
5
+ ErrorLog <%= log_dir %>/error.<%= @server_hostname %>.log
6
+ CustomLog <%= log_dir %>/access.<%= @server_hostname %>.log combined
7
7
  LogLevel error
8
8
 
9
9
  RewriteEngine On
10
- RewriteRule ^/$ http://<%= @server_hostname %>/<%= @default_client %>/<%= @default_project %>
11
- RewriteRule ^/index*$ http://<%= @server_hostname %>/<%= @default_client %>/<%= @default_project %>
10
+ RewriteRule ^/$ http://<%= @server_hostname %>/<%= @default_client.downcase %>/<%= @default_project.downcase %>
11
+ RewriteRule ^/index*$ http://<%= @server_hostname %>/<%= @default_client.downcase %>/<%= @default_project.downcase %>
12
12
 
13
13
  <location />
14
14
  AuthType Basic
15
15
  AuthName '<%= @server_name %>'
16
- AuthUserFile <%= @APP_CONFIG[:dirs][:install] %>/passwords
16
+ AuthUserFile <%= @install_dir %>/passwords
17
17
  #Require valid-user
18
18
  #AuthBasicProvider file ldap
19
19
  #AuthLDAPBindDN '<%= @ldap_bind_dn %>'
@@ -30,6 +30,6 @@
30
30
  SVNReposName '<%= @server_name %>'
31
31
  </location>
32
32
 
33
- Include <%= @locations_dir %>/*
33
+ Include <%= locations_dir %>/*
34
34
 
35
35
  </virtualhost>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keithsalisbury-subtrac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Salisbury
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-17 00:00:00 -07:00
12
+ date: 2009-04-19 00:00:00 -07:00
13
13
  default_executable: subtrac
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -47,7 +47,6 @@ files:
47
47
  - lib/subtrac/common/images/trac/saint_logo_small.png
48
48
  - lib/subtrac/common/static/404.html
49
49
  - lib/subtrac/common/styles/trac.css
50
- - lib/subtrac/common/trac.ini
51
50
  - lib/subtrac/config/config.yml
52
51
  - lib/subtrac/passwords
53
52
  - lib/subtrac/shared/trac.ini
@@ -1,178 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- [attachment]
4
- max_size = 262144
5
- render_unsafe_content = false
6
-
7
- [browser]
8
- color_scale = True
9
- downloadable_paths = /trunk, /branches/*, /tags/*
10
- hide_properties = svk:merge
11
- intermediate_color =
12
- intermediate_point =
13
- newest_color = (255, 136, 136)
14
- oldest_color = (136, 136, 255)
15
- oneliner_properties = trac:summary
16
- render_unsafe_content = false
17
- wiki_properties = trac:description
18
-
19
- [changeset]
20
- max_diff_bytes = 10000000
21
- max_diff_files = 0
22
- wiki_format_messages = true
23
-
24
- [header_logo]
25
- alt = Saint Development Server
26
- height = -1
27
- link = /
28
- src = /images/trac/saint_logo_small.png
29
- width = -1
30
-
31
- [inherit]
32
- plugins_dir =
33
- templates_dir =
34
-
35
- [logging]
36
- log_file = trac.log
37
- # log_format = <inherited>
38
- log_level = DEBUG
39
- log_type = none
40
-
41
- [milestone]
42
- stats_provider = DefaultTicketGroupStatsProvider
43
-
44
- [mimeviewer]
45
- enscript_modes = text/x-dylan:dylan:4
46
- enscript_path = enscript
47
- max_preview_size = 262144
48
- mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb
49
- php_path = php
50
- tab_width = 8
51
-
52
- [notification]
53
- admit_domains =
54
- always_notify_owner = false
55
- always_notify_reporter = false
56
- always_notify_updater = true
57
- ignore_domains =
58
- mime_encoding = base64
59
- smtp_always_bcc =
60
- smtp_always_cc =
61
- smtp_default_domain =
62
- smtp_enabled = false
63
- smtp_from = trac@localhost
64
- smtp_from_name =
65
- smtp_password =
66
- smtp_port = 25
67
- smtp_replyto = trac@localhost
68
- smtp_server = localhost
69
- smtp_subject_prefix = __default__
70
- smtp_user =
71
- ticket_subject_template = $prefix #$ticket.id: $summary
72
- use_public_cc = false
73
- use_short_addr = false
74
- use_tls = false
75
-
76
- [project]
77
- admin =
78
- admin_trac_url = .
79
- descr = My example project
80
- footer = Visit the Trac open source project at<br /><a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a>
81
- icon = /favicon.ico
82
- url =
83
-
84
- [query]
85
- default_anonymous_query = status!=closed&cc~=$USER
86
- default_query = status!=closed&owner=$USER
87
- items_per_page = 100
88
-
89
- [report]
90
- items_per_page = 100
91
- items_per_page_rss = 0
92
-
93
- [revisionlog]
94
- default_log_limit = 100
95
-
96
- [roadmap]
97
- stats_provider = DefaultTicketGroupStatsProvider
98
-
99
- [search]
100
- min_query_length = 3
101
-
102
- [svn]
103
- branches = trunk,branches/*
104
- tags = tags/*
105
-
106
- [ticket]
107
- default_cc =
108
- default_component =
109
- default_description =
110
- default_keywords =
111
- default_milestone =
112
- default_owner =
113
- default_priority = major
114
- default_resolution = fixed
115
- default_severity =
116
- default_summary =
117
- default_type = defect
118
- default_version =
119
- max_comment_size = 262144
120
- max_description_size = 262144
121
- preserve_newlines = default
122
- restrict_owner = false
123
- workflow = ConfigurableTicketWorkflow
124
-
125
- [ticket-workflow]
126
- accept = new,assigned,accepted,reopened -> accepted
127
- accept.operations = set_owner_to_self
128
- accept.permissions = TICKET_MODIFY
129
- leave = * -> *
130
- leave.default = 1
131
- leave.operations = leave_status
132
- reassign = new,assigned,accepted,reopened -> assigned
133
- reassign.operations = set_owner
134
- reassign.permissions = TICKET_MODIFY
135
- reopen = closed -> reopened
136
- reopen.operations = del_resolution
137
- reopen.permissions = TICKET_CREATE
138
- resolve = new,assigned,accepted,reopened -> closed
139
- resolve.operations = set_resolution
140
- resolve.permissions = TICKET_MODIFY
141
-
142
- [timeline]
143
- abbreviated_messages = True
144
- changeset_collapse_events = false
145
- changeset_long_messages = false
146
- changeset_show_files = 0
147
- default_daysback = 30
148
- max_daysback = 90
149
- newticket_formatter = oneliner
150
- ticket_show_details = false
151
-
152
- [trac]
153
- authz_file =
154
- authz_module_name =
155
- auto_reload = False
156
- base_url =
157
- check_auth_ip = false
158
- database = sqlite:db/trac.db
159
- default_charset = iso-8859-15
160
- htdocs_location =
161
- ignore_auth_case = false
162
- mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
163
- metanav = login,logout,prefs,help,about
164
- permission_policies = DefaultPermissionPolicy, LegacyAttachmentPolicy
165
- permission_store = DefaultPermissionStore
166
- repository_type = svn
167
- secure_cookies = False
168
- show_email_addresses = false
169
- show_ip_addresses = false
170
- timeout = 20
171
- use_base_url_for_redirect = False
172
-
173
- [wiki]
174
- ignore_missing_pages = false
175
- max_size = 262144
176
- render_unsafe_content = false
177
- split_page_names = false
178
-