chicken_soup 0.1.0 → 0.2.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/.gitignore +2 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/chicken_soup.gemspec +3 -1
- data/lib/chicken_soup/capabilities.rb +21 -6
- data/lib/chicken_soup/capabilities/apache/apache-checks.rb +19 -0
- data/lib/chicken_soup/capabilities/apache/apache-defaults.rb +30 -0
- data/lib/chicken_soup/capabilities/apache/apache-tasks.rb +85 -0
- data/lib/chicken_soup/capabilities/bundler/bundler-checks.rb +19 -0
- data/lib/chicken_soup/capabilities/bundler/bundler-defaults.rb +14 -0
- data/lib/chicken_soup/capabilities/bundler/bundler-tasks.rb +35 -0
- data/lib/chicken_soup/capabilities/checks.rb +1 -1
- data/lib/chicken_soup/capabilities/defaults.rb +22 -5
- data/lib/chicken_soup/capabilities/{git.rb → git/git-defaults.rb} +2 -13
- data/lib/chicken_soup/capabilities/heroku/heroku-checks.rb +22 -0
- data/lib/chicken_soup/capabilities/heroku/heroku-defaults.rb +16 -0
- data/lib/chicken_soup/capabilities/{heroku.rb → heroku/heroku-tasks.rb} +5 -45
- data/lib/chicken_soup/capabilities/{mysql.rb → mysql/mysql-tasks.rb} +0 -0
- data/lib/chicken_soup/capabilities/nginx/nginx-checks.rb +19 -0
- data/lib/chicken_soup/capabilities/nginx/nginx-defaults.rb +21 -0
- data/lib/chicken_soup/capabilities/nginx/nginx-tasks.rb +85 -0
- data/lib/chicken_soup/capabilities/{passenger.rb → passenger/passenger-tasks.rb} +1 -1
- data/lib/chicken_soup/capabilities/postgres/postgres-checks.rb +17 -0
- data/lib/chicken_soup/capabilities/postgres/postgres-defaults.rb +15 -0
- data/lib/chicken_soup/capabilities/{postgres.rb → postgres/postgres-tasks.rb} +1 -1
- data/lib/chicken_soup/capabilities/rvm/rvm-checks.rb +21 -0
- data/lib/chicken_soup/capabilities/rvm/rvm-defaults.rb +13 -0
- data/lib/chicken_soup/capabilities/rvm/rvm-tasks.rb +6 -0
- data/lib/chicken_soup/capabilities/shared/db-checks.rb +19 -0
- data/lib/chicken_soup/capabilities/shared/db-defaults.rb +13 -0
- data/lib/chicken_soup/capabilities/shared/{db.rb → db-tasks.rb} +24 -11
- data/lib/chicken_soup/capabilities/shared/web_server-tasks.rb +99 -0
- data/lib/chicken_soup/capabilities/{svn.rb → svn/svn-defaults.rb} +0 -13
- data/lib/chicken_soup/capabilities/svn/svn-tasks.rb +12 -0
- data/lib/chicken_soup/capabilities/tasks.rb +12 -0
- data/lib/chicken_soup/capabilities/unix/unix-checks.rb +33 -0
- data/lib/chicken_soup/capabilities/unix/unix-defaults.rb +42 -0
- data/lib/chicken_soup/capabilities/{unix.rb → unix/unix-tasks.rb} +4 -83
- data/lib/chicken_soup/deploy.rb +0 -5
- data/lib/chicken_soup/environment.rb +10 -0
- data/lib/chicken_soup/environment/checks.rb +17 -2
- data/lib/chicken_soup/environment/defaults.rb +25 -3
- data/lib/chicken_soup/environment/tasks.rb +12 -0
- data/lib/chicken_soup/global.rb +77 -2
- data/lib/chicken_soup/notifiers.rb +7 -4
- data/lib/chicken_soup/notifiers/checks.rb +1 -1
- data/lib/chicken_soup/notifiers/defaults.rb +1 -2
- data/lib/chicken_soup/notifiers/email/email-checks.rb +26 -0
- data/lib/chicken_soup/notifiers/email/email-defaults.rb +50 -0
- data/lib/chicken_soup/notifiers/email/email-tasks.rb +37 -0
- data/lib/chicken_soup/notifiers/email/presenter.rb +56 -0
- data/lib/chicken_soup/notifiers/{git.rb → git/git-tasks.rb} +0 -0
- data/lib/chicken_soup/notifiers/{hoptoad.rb → hoptoad/hoptoad-tasks.rb} +0 -0
- data/lib/chicken_soup/notifiers/tasks.rb +12 -0
- data/lib/chicken_soup/templates/client_email.html.erb +21 -0
- data/lib/chicken_soup/templates/internal_email.html.erb +19 -0
- data/lib/chicken_soup/version.rb +1 -1
- data/lib/chicken_stock.rb +3 -3
- data/spec/support/focused.rb +10 -0
- metadata +91 -35
- data/lib/chicken_soup/capabilities/apache.rb +0 -235
- data/lib/chicken_soup/capabilities/bundler.rb +0 -68
- data/lib/chicken_soup/capabilities/rvm.rb +0 -42
- data/lib/chicken_soup/notifiers/email.rb +0 -109
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
######################################################################
|
2
|
+
# NGINX CHECKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :check do
|
7
|
+
desc <<-DESC
|
8
|
+
[internal] Checks to see if all necessary Nginx capabilities variables have been set up.
|
9
|
+
DESC
|
10
|
+
task :nginx do
|
11
|
+
required_variables = [
|
12
|
+
:web_server_control_script
|
13
|
+
]
|
14
|
+
|
15
|
+
verify_variables(required_variables)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
######################################################################
|
2
|
+
# NGINX DEFAULTS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :defaults do
|
7
|
+
desc "[internal] Checks to see what type of Nginx installation is running on the remote."
|
8
|
+
task :nginx do
|
9
|
+
find_web_server_control_script
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_web_server_control_script
|
16
|
+
if remote_file_exists?("/etc/init.d/nginx")
|
17
|
+
set :web_server_control_script, "/etc/init.d/nginx"
|
18
|
+
end
|
19
|
+
|
20
|
+
abort "Couldn't figure out how to control your installation of Nginx" unless exists?(:web_server_control_script)
|
21
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
######################################################################
|
2
|
+
# NGINX TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/shared/web_server-tasks'
|
6
|
+
|
7
|
+
namespace :website do
|
8
|
+
desc "Creates the site configuration for the files."
|
9
|
+
task :create do
|
10
|
+
abort "Sorry, auto-installing sites is not supported on your installation of Nginx." unless exists?(:nginx_disable_script)
|
11
|
+
|
12
|
+
passenger_friendly_error_messages = rails_env == :production ? "off" : "on"
|
13
|
+
|
14
|
+
virtual_host_config = <<-VHOST
|
15
|
+
server {
|
16
|
+
listen #{web_server_ip}:443;
|
17
|
+
server_name #{deploy_site_name} *.#{deploy_site_name};
|
18
|
+
|
19
|
+
passenger_enabled on;
|
20
|
+
passenger_friendly_error_pages #{passenger_friendly_error_pages};
|
21
|
+
passenger_min_instances 4;
|
22
|
+
|
23
|
+
rails_env #{rails_env};
|
24
|
+
rack_env #{rails_env};
|
25
|
+
|
26
|
+
ssl on;
|
27
|
+
ssl_certificate /etc/nginx/ssl/#{domain}.crt;
|
28
|
+
ssl_certificate_key /etc/nginx/ssl/#{domain}.key;
|
29
|
+
|
30
|
+
ssl_session_timeout 5m;
|
31
|
+
|
32
|
+
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
|
33
|
+
ssl_prefer_server_ciphers on;
|
34
|
+
|
35
|
+
root #{deploy_to}/current/public;
|
36
|
+
|
37
|
+
client_max_body_size 3M;
|
38
|
+
|
39
|
+
access_log /var/log/nginx/#{application}.access.log main;
|
40
|
+
error_log /var/log/nginx/#{application}.error.log warn;
|
41
|
+
|
42
|
+
error_page 500 501 504 505 506 507 508 509 /500.html;
|
43
|
+
error_page 400 401 403 404 405 406 407 409 410 413 415 416 417 /404.html;
|
44
|
+
error_page 422 444 /422.html;
|
45
|
+
error_page 502 503 /public/maintenance.html;
|
46
|
+
|
47
|
+
location / {
|
48
|
+
try_files /system/maintenance.html $request_uri;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
server {
|
53
|
+
listen #{web_server_ip}:80;
|
54
|
+
server_name #{deploy_site_name} *.#{deploy_site_name};
|
55
|
+
|
56
|
+
location / {
|
57
|
+
rewrite ^ https://$http_host$request_uri? permanent
|
58
|
+
}
|
59
|
+
}
|
60
|
+
VHOST
|
61
|
+
|
62
|
+
put virtual_host_config, "#{user_home}/#{deploy_site_name}"
|
63
|
+
run "#{sudo} mv #{user_home}/#{deploy_site_name} /etc/nginx/sites-available"
|
64
|
+
web_server.reload
|
65
|
+
end
|
66
|
+
|
67
|
+
desc "Completely removes the site configuration from the server (but leaves the files.)"
|
68
|
+
task :remove do
|
69
|
+
abort "Sorry, auto-removing sites is not supported on your installation of Nginx." unless exists?(:nginx_disable_script)
|
70
|
+
|
71
|
+
run "#{sudo} rm /etc/nginx/sites-available/#{deploy_site_name}"
|
72
|
+
web_server.reload
|
73
|
+
end
|
74
|
+
|
75
|
+
desc "Enable Site"
|
76
|
+
task :enable do
|
77
|
+
abort "Sorry, auto-enabling sites is not supported on your installation of Nginx." unless exists?(:nginx_enable_script)
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "Disable Site"
|
81
|
+
task :disable do
|
82
|
+
abort "Sorry, auto-disabling sites is not supported on your installation of Nginx." unless exists?(:nginx_disable_script)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -25,7 +25,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
25
25
|
changes, Passenger restarts the app.
|
26
26
|
DESC
|
27
27
|
task :restart, :except => { :no_release => true } do
|
28
|
-
run "touch #{File.join(current_path,'tmp','restart.txt')}"
|
28
|
+
run "touch #{File.join( current_path, 'tmp', 'restart.txt' )}"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
######################################################################
|
2
|
+
# POSTGRES CHECKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/shared/db-checks'
|
6
|
+
|
7
|
+
namespace :capabilities do
|
8
|
+
namespace :check do
|
9
|
+
desc <<-DESC
|
10
|
+
[internal] Checks to see if all necessary Postgres capabilities variables have been set up.
|
11
|
+
DESC
|
12
|
+
task :postgres do
|
13
|
+
capabilities.check.db
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
######################################################################
|
2
|
+
# POSTGRES DEFAULTS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/shared/db-defaults'
|
6
|
+
|
7
|
+
namespace :capabilities do
|
8
|
+
namespace :defaults do
|
9
|
+
desc "[internal] Sets intelligent defaults for Postgres deployments."
|
10
|
+
task :postgres do
|
11
|
+
capabilities.defaults.db
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
######################################################################
|
2
|
+
# RVM CHECKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :check do
|
7
|
+
desc <<-DESC
|
8
|
+
[internal] Checks to see if all necessary RVM variables have been set up.
|
9
|
+
DESC
|
10
|
+
task :rvm do
|
11
|
+
required_variables = [
|
12
|
+
:ruby_version,
|
13
|
+
:ruby_gemset,
|
14
|
+
:rvm_ruby_string,
|
15
|
+
]
|
16
|
+
|
17
|
+
verify_variables(required_variables)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
######################################################################
|
2
|
+
# RVM DEFAULTS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :defaults do
|
7
|
+
_cset :ruby_version, ENV["rvm_ruby_string"]
|
8
|
+
_cset :ruby_gemset, ENV["GEM_HOME"].split('@')[1]
|
9
|
+
|
10
|
+
_cset(:rvm_ruby_string) {ruby_gemset ? "#{ruby_version}@#{ruby_gemset}" : ruby_version}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DB CHECKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :check do
|
7
|
+
desc <<-DESC
|
8
|
+
[internal] Checks to see if all necessary DB capabilities variables have been set up.
|
9
|
+
DESC
|
10
|
+
task :db do
|
11
|
+
required_variables = [
|
12
|
+
:skip_backup_before_migration
|
13
|
+
]
|
14
|
+
|
15
|
+
verify_variables(required_variables)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DB DEFAULTS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :capabilities do
|
6
|
+
namespace :defaults do
|
7
|
+
desc "[internal] Sets intelligent defaults for DB deployments."
|
8
|
+
task :db do
|
9
|
+
_cset :skip_backup_before_migration, false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -5,8 +5,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
5
5
|
_cset(:db_root_password) {Capistrano::CLI.password_prompt("Root Password For DB: ")}
|
6
6
|
_cset(:db_app_password) {Capistrano::CLI.password_prompt("App Password For DB: ")}
|
7
7
|
|
8
|
-
run_task
|
9
|
-
run_task
|
8
|
+
run_task "db:create", :as => manager_username
|
9
|
+
run_task "db:drop", :as => manager_username
|
10
|
+
|
11
|
+
before "deploy:migrate", "db:backup" unless skip_backup_before_migration
|
12
|
+
|
13
|
+
before 'db:backup', 'db:backup:check'
|
10
14
|
|
11
15
|
namespace :db do
|
12
16
|
desc <<-DESC
|
@@ -17,9 +21,18 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
17
21
|
* The filenames are formatted with the timestamp of the backup.
|
18
22
|
* After export, each file is zipped up using a bzip2 compression format.
|
19
23
|
DESC
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
namespace :backup do
|
25
|
+
task :default do
|
26
|
+
run "cd #{current_path} && BACKUP_DIRECTORY=#{shared_path}/db_backups #{rake} db:backup"
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "[internal] Used to check to see if the db:backup task exists on the server."
|
30
|
+
task :check do
|
31
|
+
backup_task_exists = capture("cd #{current_path} && #{rake} -T | grep db:backup | wc -l").chomp
|
32
|
+
abort("There must be a task named db:backup in order to deploy. If you do not want to backup your DB during deployments, set the skip_backup_before_migration variable to true in your deploy.rb.") if backup_task_exists == '0'
|
33
|
+
|
34
|
+
run "if [ ! -d #{shared_path}/db_backups ]; then mkdir #{shared_path}/db_backups; fi"
|
35
|
+
end
|
23
36
|
end
|
24
37
|
|
25
38
|
desc <<-DESC
|
@@ -30,12 +43,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
30
43
|
|
31
44
|
Warning: This task cannot be called in production mode. If you truely wish
|
32
45
|
to run this in production, you'll need to log into the server and
|
33
|
-
run the rake task manually.
|
46
|
+
run the rake task manually or use Capistrano's `console` task.
|
34
47
|
DESC
|
35
48
|
task :reset_and_seed do
|
36
|
-
|
49
|
+
abort "I'm sorry Dave, but I can't let you do that. I have full control over production." if rails_env == 'production'
|
37
50
|
db.backup
|
38
|
-
run "cd #{current_path} && rake
|
51
|
+
run "cd #{current_path} && #{rake} db:reset_and_seed"
|
39
52
|
end
|
40
53
|
|
41
54
|
desc <<-DESC
|
@@ -47,12 +60,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
47
60
|
|
48
61
|
Warning: This task cannot be called in production mode. If you truely wish
|
49
62
|
to run this in production, you'll need to log into the server and
|
50
|
-
run the rake task manually.
|
63
|
+
run the rake task manually or use Capistrano's `console` task.
|
51
64
|
DESC
|
52
65
|
task :seed do
|
53
|
-
|
66
|
+
abort "I'm sorry Dave, but I can't let you do that. I have full control over production." if rails_env == 'production'
|
54
67
|
db.backup
|
55
|
-
run "cd #{current_path} && rake
|
68
|
+
run "cd #{current_path} && #{rake} db:seed"
|
56
69
|
end
|
57
70
|
end
|
58
71
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
######################################################################
|
2
|
+
# COMMON WEB SERVER TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
run_task 'web_server:stop', :as => manager_username
|
6
|
+
run_task 'web_server:start', :as => manager_username
|
7
|
+
run_task 'web_server:restart', :as => manager_username
|
8
|
+
run_task 'web_server:reload', :as => manager_username
|
9
|
+
|
10
|
+
run_task 'website:install', :as => manager_username
|
11
|
+
run_task 'website:remove', :as => manager_username
|
12
|
+
run_task 'website:enable', :as => manager_username
|
13
|
+
run_task 'website:disable', :as => manager_username
|
14
|
+
|
15
|
+
before 'deploy', 'deploy:web:disable'
|
16
|
+
after 'deploy', 'deploy:web:enable'
|
17
|
+
|
18
|
+
namespace :deploy do
|
19
|
+
namespace :web do
|
20
|
+
desc <<-DESC
|
21
|
+
Enables the website's application by removing the maintenance page.
|
22
|
+
DESC
|
23
|
+
task :enable do
|
24
|
+
website.maintenance_mode.disable
|
25
|
+
end
|
26
|
+
|
27
|
+
desc <<-DESC
|
28
|
+
Disables the website's application by installing the maintenance page.
|
29
|
+
DESC
|
30
|
+
task :disable do
|
31
|
+
website.maintenance_mode.enable
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
namespace :website do
|
37
|
+
namespace :maintenance_mode do
|
38
|
+
desc <<-DESC
|
39
|
+
Makes the application web-accessible again. Removes the \
|
40
|
+
"maintenance.html" page generated by deploy:web:disable, which (if your \
|
41
|
+
web servers are configured correctly) will make your application \
|
42
|
+
web-accessible again.
|
43
|
+
DESC
|
44
|
+
task :disable, :except => { :no_release => true } do
|
45
|
+
run "rm #{shared_path}/system/maintenance.html"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc <<-DESC
|
49
|
+
Present a maintenance page to visitors. Disables your application's web \
|
50
|
+
interface by writing a "maintenance.html" file to each web server. The \
|
51
|
+
servers must be configured to detect the presence of this file, and if \
|
52
|
+
it is present, always display it instead of performing the request.
|
53
|
+
|
54
|
+
By default, the maintenance page will just say the site is down for \
|
55
|
+
"maintenance", and will be back "shortly", but you can customize the \
|
56
|
+
page by specifying the REASON and UNTIL environment variables:
|
57
|
+
|
58
|
+
$ cap deploy:web:disable \\
|
59
|
+
REASON="hardware upgrade" \\
|
60
|
+
UNTIL="12pm Central Time"
|
61
|
+
|
62
|
+
Further customization will require that you write your own task.
|
63
|
+
DESC
|
64
|
+
task :enable, :except => { :no_release => true } do
|
65
|
+
on_rollback { rm "#{shared_path}/system/maintenance.html" }
|
66
|
+
|
67
|
+
require 'erb'
|
68
|
+
deadline, reason = ENV['UNTIL'], ENV['REASON']
|
69
|
+
|
70
|
+
template = File.read("./public/maintenance.html.erb")
|
71
|
+
maintenance_page = ERB.new(template).result(binding)
|
72
|
+
|
73
|
+
put maintenance_page, "#{shared_path}/system/maintenance.html", :mode => 0644
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :web_server do
|
79
|
+
desc "Stop the web server"
|
80
|
+
task :stop do
|
81
|
+
run "#{sudo} #{web_server_control_script} stop"
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "Start the web server"
|
85
|
+
task :start do
|
86
|
+
run "#{sudo} #{web_server_control_script} start"
|
87
|
+
end
|
88
|
+
|
89
|
+
desc "Restart the web server"
|
90
|
+
task :restart do
|
91
|
+
run "#{sudo} #{web_server_control_script} restart"
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "Reloads the web server configuration"
|
95
|
+
task :reload do
|
96
|
+
run "#{sudo} #{web_server_control_script} reload"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -1,16 +1,3 @@
|
|
1
|
-
######################################################################
|
2
|
-
# SUBVERSION TASKS #
|
3
|
-
######################################################################
|
4
|
-
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
namespace :vc do
|
6
|
-
desc <<-DESC
|
7
|
-
DESC
|
8
|
-
task :log do
|
9
|
-
set :vc_log, `svn log -r #{previous_revision.to_i + 1}:#{current_revision}`
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
1
|
######################################################################
|
15
2
|
# SUBVERSION DEFAULTS #
|
16
3
|
######################################################################
|