mina 0.1.3.pre1 → 0.2.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -4,7 +4,6 @@ rvm:
4
4
  - 1.9.3
5
5
  - rbx-18mode
6
6
  - rbx-19mode
7
- - ruby-head
8
7
  env:
9
8
  - "rake=0.8"
10
9
  - "rake=0.9"
data/HISTORY.md CHANGED
@@ -1,16 +1,40 @@
1
- v0.1.3 - Jul 13, 2012 (Unreleased)
2
- ----------------------------------
1
+ v0.2.0 - Unreleased
2
+ -------------------
3
+
4
+ This release had two pre releases:
5
+
6
+ * v0.2.0.pre2 (Aug 2, 2012)
7
+ * v0.1.3.pre1 (Jul 13, 2012)
3
8
 
4
9
  ### Fixed:
10
+ * [pre2] Call ssh with no double use `-t` parameter.
11
+ * [pre2] Fix Ruby 1.8 compatibility.
12
+ * [pre2] Fix the "undefined method > for Process::Status" error.
13
+ * [pre2] Using `force_migrate=1` and `force_assets=1` to `rails:db_migrate`
14
+ and `rails:assets_precompile` now works well.
5
15
  * [pre1] Respect the `bundle_bin` setting when doing `bundle exec` in Rails commands. (#29)
6
16
  * [pre1] Doing `rails:assets_precompile` now properly skips asset compilation if not needed. (#25)
7
17
 
8
18
  ### Added:
19
+ * [pre2] __Optimize git:clone by caching the repository.__ This way, updates are
20
+ faster because not the entire repo is cloned everytime. (#10)
21
+ * [pre2] __Show elapsed time that a deploy takes.__
22
+ * [pre2] __Display the git commit nicely when deploying.__
23
+ * [pre2] __Force quit when 2 `^C`s are pressed.__
24
+ * [pre2] New `die` helper.
25
+ * [pre2] New `report_time` helper.
26
+ * [pre2] New `to_directory` helper. (#35)
27
+ * [pre2] Put optional optimizations for Rails 3.2 asset pipeline. (#32)
28
+ * Update sample deploy script:
29
+ - [pre2] Update default deploy.rb to note :branch.
30
+ - [pre2] Add `link_shared_paths` to the sample deploy script.
9
31
  * [pre1] Doing `rails:db_migrate` now skips doing migrations if they're not needed. (#18)
10
32
  * [pre1] Added the `mina console` command for Rails.
11
33
  * [pre1] Make asset paths configurable using the `asset_paths` setting.
12
34
 
13
35
  ### Changed:
36
+ * [pre2] __Improve output of `mina init`.__
37
+ * [pre2] Prettier output for `mina setup`. Also, show a better error message for it.
14
38
  * [pre1] Refactor pretty printing to be simpler, cleaner, and extensible.
15
39
  * [pre1] Show prettier abort messages when ^C'd.
16
40
 
data/data/deploy.rb CHANGED
@@ -1,25 +1,44 @@
1
+ # For help in making your deploy script, see the Mina documentation:
2
+ #
3
+ # - http://nadarei.co/mina
4
+ # - http://nadarei.co/mina/tasks
5
+ # - http://nadarei.co/mina/settings
6
+ # - http://nadarei.co/mina/helpers
7
+
1
8
  require 'mina/bundler'
2
9
  require 'mina/rails'
3
10
  require 'mina/git'
4
11
 
5
12
  # Basic settings:
6
- # domain - The hostname to SSH to
7
- # deploy_to - Path to deploy into
8
- # repository - Git repo to clone from (needed by mina/git)
9
- # user - Username in the server to SSH to (optional)
13
+ # domain - The hostname to SSH to.
14
+ # deploy_to - Path to deploy into.
15
+ # repository - Git repo to clone from. (needed by mina/git)
16
+ # branch - Branch name to deploy. (needed by mina/git)
10
17
 
11
18
  set :domain, 'foobar.com'
12
19
  set :deploy_to, '/var/www/foobar.com'
13
20
  set :repository, 'git://...'
14
- # set :user, 'foobar'
15
- # set :port, '30000'
21
+ set :branch, 'master'
22
+
23
+ # Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
24
+ # They will be linked in the 'deploy:link_shared_paths' step.
25
+ set :shared_paths, ['config/database.yml']
26
+
27
+ # Optional settings:
28
+ # set :user, 'foobar' # Username in the server to SSH to.
29
+ # set :port, '30000' # SSH port number.
16
30
 
17
31
  desc "Deploys the current version to the server."
18
32
  task :deploy do
19
33
  deploy do
34
+ # This makes asset compilation faster in Rails 3.2 -- remove this for other
35
+ # Rails versions.
36
+ invoke :'rails:optimize_for_3.2'
37
+
20
38
  # Put things that will set up an empty directory into a fully set-up
21
39
  # instance of your project.
22
40
  invoke :'git:clone'
41
+ invoke :'deploy:link_shared_paths'
23
42
  invoke :'bundle:install'
24
43
  invoke :'rails:db_migrate'
25
44
  invoke :'rails:assets_precompile'
data/lib/mina/bundler.rb CHANGED
@@ -6,19 +6,12 @@ settings.bundle_options ||= lambda { %{--without development:test --path "#{bund
6
6
  namespace :bundle do
7
7
  desc "Install gem dependencies using Bundler."
8
8
  task :install do
9
- if bundle_path.nil?
10
- queue %{
11
- echo "-----> Installing gem dependencies using Bundler"
12
- #{echo_cmd %[#{bundle_bin} install #{bundle_options}]}
13
- }
14
- else
15
- queue %{
16
- echo "-----> Installing gem dependencies using Bundler"
17
- #{echo_cmd %[mkdir -p "#{deploy_to}/#{shared_path}/bundle"]}
18
- #{echo_cmd %[mkdir -p "#{File.dirname bundle_path}"]}
19
- #{echo_cmd %[ln -s "#{deploy_to}/#{shared_path}/bundle" "#{bundle_path}"]}
20
- #{echo_cmd %[#{bundle_bin} install #{bundle_options}]}
21
- }
22
- end
9
+ queue %{
10
+ echo "-----> Installing gem dependencies using Bundler"
11
+ #{echo_cmd %[mkdir -p "#{deploy_to}/#{shared_path}/bundle"]}
12
+ #{echo_cmd %[mkdir -p "#{File.dirname bundle_path}"]}
13
+ #{echo_cmd %[ln -s "#{deploy_to}/#{shared_path}/bundle" "#{bundle_path}"]}
14
+ #{echo_cmd %[#{bundle_bin} install #{bundle_options}]}
15
+ }
23
16
  end
24
- end
17
+ end
data/lib/mina/default.rb CHANGED
@@ -7,16 +7,17 @@ task :init do
7
7
  config_file = Rake.application.rakefile
8
8
 
9
9
  unless config_file.to_s.empty?
10
- error "You already have #{config_file}."
10
+ print_str "! You already have #{config_file}."
11
11
  exit 8
12
12
  end
13
13
 
14
+ outfile = './config/deploy.rb'
14
15
  require 'fileutils'
15
16
  FileUtils.mkdir_p './config'
16
- FileUtils.cp Mina.root_path('data/deploy.rb'), './config/deploy.rb'
17
+ FileUtils.cp Mina.root_path('data/deploy.rb'), outfile
17
18
 
18
- puts 'Created deploy.rb.'
19
- puts "Edit it, then run `#{name} setup` after."
19
+ print_str "-----> Created #{outfile}"
20
+ print_str "Edit this file, then run `#{name} setup` after."
20
21
  end
21
22
 
22
23
  task :default => :help
data/lib/mina/deploy.rb CHANGED
@@ -44,18 +44,33 @@ end
44
44
 
45
45
  desc "Sets up a site."
46
46
  task :setup do
47
+ set :term_mode, :pretty
48
+
47
49
  settings.deploy_to!
48
50
 
49
- queue %{echo "-----> Setting up #{deploy_to}"}
50
- queue echo_cmd %{mkdir -p "#{deploy_to}"}
51
- queue echo_cmd %{chown -R `whoami` "#{deploy_to}"}
52
- queue echo_cmd %{chmod g+rx,u+rwx "#{deploy_to}"}
53
- queue echo_cmd %{cd "#{deploy_to}"}
54
- queue echo_cmd %{mkdir -p "#{releases_path}"}
55
- queue echo_cmd %{chmod g+rx,u+rwx "#{releases_path}"}
56
- queue echo_cmd %{mkdir -p "#{shared_path}"}
57
- queue echo_cmd %{chmod g+rx,u+rwx "#{shared_path}"}
58
- queue %{echo "-----> Done"}
51
+ user = settings.user? ? "#{settings.user}" : "username"
52
+
53
+ queue %{
54
+ echo "-----> Setting up #{deploy_to}" && (
55
+ #{echo_cmd %{mkdir -p "#{deploy_to}"}} &&
56
+ #{echo_cmd %{chown -R `whoami` "#{deploy_to}"}} &&
57
+ #{echo_cmd %{chmod g+rx,u+rwx "#{deploy_to}"}} &&
58
+ #{echo_cmd %{cd "#{deploy_to}"}} &&
59
+ #{echo_cmd %{mkdir -p "#{releases_path}"}} &&
60
+ #{echo_cmd %{chmod g+rx,u+rwx "#{releases_path}"}} &&
61
+ #{echo_cmd %{mkdir -p "#{shared_path}"}} &&
62
+ #{echo_cmd %{chmod g+rx,u+rwx "#{shared_path}"}} &&
63
+ echo "" &&
64
+ #{echo_cmd %{ls -la "#{deploy_to}"}} &&
65
+ echo "" &&
66
+ echo "-----> Done."
67
+ ) || (
68
+ echo "! ERROR: Setup failed."
69
+ echo "! Ensure that the path '#{deploy_to}' is accessible to the SSH user."
70
+ echo "! Try doing:"
71
+ echo "! sudo mkdir -p \\"#{deploy_to}\\" && sudo chown -R #{user} \\"#{deploy_to}\\""
72
+ )
73
+ }
59
74
  end
60
75
 
61
76
  desc "Runs a command in the server."
data/lib/mina/git.rb CHANGED
@@ -1,19 +1,42 @@
1
+ settings.branch ||= "master"
2
+
1
3
  namespace :git do
2
4
  desc "Clones the Git repository to the release path."
3
5
  task :clone do
4
- settings.revision ||= `git rev-parse HEAD`.strip
6
+ if revision?
7
+ error "The Git option `:revision` has now been deprecated."
8
+ error "Please use `:commit` or `:branch` instead."
9
+ exit
10
+ end
5
11
 
6
- if settings.revision.empty?
7
- error "Git revision is empty. Check if you are in git tree."
8
- exit 1
12
+ clone = if commit?
13
+ %[
14
+ echo "-----> Using git commit '#{commit}'" &&
15
+ #{echo_cmd %[git clone "#{repository!}" . --recursive]} &&
16
+ #{echo_cmd %[git checkout -b current_release "#{commit}" --force]} &&
17
+ ]
18
+ else
19
+ %{
20
+ if [ ! -d "#{deploy_to}/scm/objects" ]; then
21
+ echo "-----> Cloning the Git repository"
22
+ #{echo_cmd %[git clone "#{repository!}" "#{deploy_to}/scm" --bare]}
23
+ else
24
+ echo "-----> Fetching new git commits"
25
+ #{echo_cmd %[(cd "#{deploy_to}/scm" && git fetch "#{repository!}" "#{branch}:#{branch}" --force)]}
26
+ fi &&
27
+ echo "-----> Using git branch '#{branch}'" &&
28
+ #{echo_cmd %[git clone "#{deploy_to}/scm" . --depth 1 --recursive --branch "#{branch}"]} &&
29
+ }
9
30
  end
10
31
 
11
- queue %{
12
- echo "-----> Cloning the Git repository"
13
- #{echo_cmd %[git clone "#{repository!}" . -n --recursive]} &&
14
- echo "-----> Using revision #{revision}" &&
15
- #{echo_cmd %[git checkout -q "#{revision}" -b current_release 1>/dev/null]} &&
16
- #{echo_cmd %[rm -rf .git]}
17
- }
32
+ status = %[
33
+ echo "-----> Using this git commit" &&
34
+ echo &&
35
+ #{echo_cmd %[git log --format="%aN (%h):%n> %s" -n 1]} &&
36
+ #{echo_cmd %[rm -rf .git]} &&
37
+ echo
38
+ ]
39
+
40
+ queue clone + status
18
41
  end
19
42
  end
data/lib/mina/helpers.rb CHANGED
@@ -42,7 +42,23 @@ module Mina
42
42
  # Returns nothing.
43
43
  #
44
44
  def run!
45
- ssh commands(:default)
45
+ report_time { ssh commands(:default) }
46
+ end
47
+
48
+ # Report time elapsed in the block.
49
+ # Returns the output of the block.
50
+ def report_time(&blk)
51
+ time, output = measure &blk
52
+ print_str "Elapsed time: %.2f seconds" % [time]
53
+ output
54
+ end
55
+
56
+ # Measures the time (in ms) a block takes.
57
+ # Returns a [time, output] tuple.
58
+ def measure(&blk)
59
+ t = Time.now
60
+ output = yield
61
+ [(Time.now - t).to_i, output]
46
62
  end
47
63
 
48
64
  # Executes a command via SSH.
@@ -73,34 +89,40 @@ module Mina
73
89
  str = "Executing the following via '#{ssh_command}':"
74
90
  puts "#!/usr/bin/env bash"
75
91
  puts "# #{str}"
76
- puts "# " + ("-" * str.size)
77
92
  puts "#"
78
93
 
79
94
  puts cmd
80
95
 
81
- elsif settings.term_mode == :pretty
82
- code = "#{ssh_command} -- bash #{bash_options} -c #{script}"
83
- result = pretty_system(code)
84
-
85
- elsif settings.term_mode == :exec
86
- code = "#{ssh_command} -t -- bash #{bash_options} -c #{script}"
87
- exec code
88
-
89
96
  else
90
- code = "#{ssh_command} -t -- bash #{bash_options} -c #{script}"
91
- system code
92
- result = $?
93
- end
94
-
95
- unless result == 0
96
- err = Failed.new("Failed with status #{result}")
97
- err.exitstatus = result
98
- raise err
97
+ code = "#{ssh_command} -- bash #{bash_options} -c #{script}"
98
+ if settings.term_mode == :pretty
99
+ result = pretty_system(code)
100
+ elsif settings.term_mode == :exec
101
+ exec code
102
+ else
103
+ system code
104
+ result = $?.to_i
105
+ end
99
106
  end
100
107
 
108
+ die result if result > 0
101
109
  result
102
110
  end
103
111
 
112
+ # Exits with a nice looking message.
113
+ # Returns nothing.
114
+ #
115
+ # die 2
116
+ # die 2, "Tests failed"
117
+ #
118
+ def die(code, msg=null)
119
+ str = "Failed with status #{code}"
120
+ str += " (#{msg})" if msg
121
+ err = Failed.new(str)
122
+ err.exitstatus = code
123
+ raise err
124
+ end
125
+
104
126
  # Returns the SSH command to be executed.
105
127
  #
106
128
  # set :domain, 'foo.com'
@@ -204,6 +226,21 @@ module Mina
204
226
  result
205
227
  end
206
228
 
229
+ # Starts a new block where #commands are collected, to be executed inside `path`.
230
+ #
231
+ # Returns nothing.
232
+ #
233
+ # in_directory './webapp' do
234
+ # queue "./reload"
235
+ # end
236
+ #
237
+ # commands.should == ['cd ./webapp && (./reload && true)']
238
+ #
239
+ def in_directory(path, &blk)
240
+ isolated_commands = isolate { yield; commands }
241
+ isolated_commands.each { |cmd| queue "(cd #{path} && (#{cmd}))" }
242
+ end
243
+
207
244
  # Defines instructions on how to do a certain thing.
208
245
  # This makes the commands that are `queue`d go into a different bucket in commands.
209
246
  #
@@ -221,9 +258,9 @@ module Mina
221
258
  #
222
259
  def to(name, &blk)
223
260
  old, @to = @to, name
224
- result = yield
261
+ yield
262
+ ensure
225
263
  @to = old
226
- result
227
264
  end
228
265
 
229
266
  # Sets settings.
@@ -62,13 +62,20 @@ module Mina
62
62
  def pretty_system(code)
63
63
  require 'shellwords'
64
64
  cmds = Shellwords.shellsplit(code)
65
+ interrupted = false
65
66
 
66
67
  status =
67
68
  Tools.popen4(*cmds) do |pid, i, o, e|
68
69
  trap "INT" do
69
70
  puts ""
70
- print_status "Mina: SIGINT received."
71
- Process.kill "TERM", pid
71
+ unless interrupted
72
+ print_status "Mina: SIGINT received."
73
+ Process.kill "TERM", pid
74
+ interrupted = true
75
+ else
76
+ print_status "Mina: SIGINT received again. Force quitting..."
77
+ Process.kill "KILL", pid
78
+ end
72
79
  end
73
80
 
74
81
  # Read stderr in the background.
data/lib/mina/rails.rb CHANGED
@@ -6,6 +6,24 @@ settings.bundle_prefix ||= lambda { %{RAILS_ENV="#{rails_env}" #{bundle_bin} exe
6
6
  settings.rake ||= lambda { %{#{bundle_prefix} rake} }
7
7
  settings.rails ||= lambda { %{#{bundle_prefix} rails} }
8
8
  settings.asset_paths ||= ['vendor/assets/', 'app/assets/']
9
+ settings.rake_assets_precompile ||= lambda { "#{rake} assets:precompile" }
10
+
11
+ desc "Makes Rails 3.2 deploys faster."
12
+ task :'rails:optimize_for_3.2' do
13
+ # This is 100% faster in Rails 3.2 because it skips re-invoking the
14
+ # Rake+Rails environment twice, and reuses the compilation cache for
15
+ # generating digest and non-digest assets. See:
16
+ # https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rake
17
+ settings.rake_assets_precompile = lambda {
18
+ "#{rake} assets:precompile:primary assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets"
19
+ }
20
+
21
+ # A safer, but slower (and still faster than default) version would be the
22
+ # one below. This will respect your config.assets.digest setting.
23
+ # settings.rake_assets_precompile = lambda {
24
+ # "#{rake} assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets"
25
+ # }
26
+ end
9
27
 
10
28
  # Macro used later by :rails, :rake, etc
11
29
  make_run_task = lambda { |name, sample_args|
@@ -59,27 +77,26 @@ namespace :rails do
59
77
  task :db_migrate do
60
78
  if ENV['force_migrate']
61
79
  invoke :'rails:db_migrate:force'
62
- return
80
+ else
81
+ message = verbose_mode? ?
82
+ '$((count)) changes found, migrating database' :
83
+ 'Migrating database'
84
+
85
+ queue check_for_changes_script \
86
+ :check => 'db/schema.rb',
87
+ :at => ['db/schema.rb'],
88
+ :skip => %[
89
+ echo "-----> DB schema unchanged; skipping DB migration"
90
+ ],
91
+ :changed => %[
92
+ echo "-----> #{message}"
93
+ #{echo_cmd %[#{rake} db:migrate]}
94
+ ],
95
+ :default => %[
96
+ echo "-----> Migrating database"
97
+ #{echo_cmd %[#{rake} db:migrate]}
98
+ ]
63
99
  end
64
-
65
- message = verbose_mode? ?
66
- '$((count)) changes found, migrating database' :
67
- 'Migrating database'
68
-
69
- queue check_for_changes_script \
70
- check: 'db/schema.rb',
71
- at: ['db/schema.rb'],
72
- skip: %[
73
- echo "-----> DB schema unchanged; skipping DB migration"
74
- ],
75
- changed: %[
76
- echo "-----> #{message}"
77
- #{echo_cmd %[#{rake} db:migrate]}
78
- ],
79
- default: %[
80
- echo "-----> Migrating database"
81
- #{echo_cmd %[#{rake} db:migrate]}
82
- ]
83
100
  end
84
101
 
85
102
  desc "Migrates the Rails database."
@@ -94,7 +111,7 @@ namespace :rails do
94
111
  task :'assets_precompile:force' do
95
112
  queue %{
96
113
  echo "-----> Precompiling asset files"
97
- #{echo_cmd %[#{rake} assets:precompile]}
114
+ #{echo_cmd %[#{rake_assets_precompile}]}
98
115
  }
99
116
  end
100
117
 
@@ -102,28 +119,27 @@ namespace :rails do
102
119
  task :'assets_precompile' do
103
120
  if ENV['force_assets']
104
121
  invoke :'rails:assets_precompile:force'
105
- return
122
+ else
123
+ message = verbose_mode? ?
124
+ '$((count)) changes found, precompiling asset files' :
125
+ 'Precompiling asset files'
126
+
127
+ queue check_for_changes_script \
128
+ :check => 'public/assets/',
129
+ :at => [*asset_paths],
130
+ :skip => %[
131
+ echo "-----> Skipping asset precompilation"
132
+ #{echo_cmd %[cp -R "#{deploy_to}/#{current_path}/public/assets" "./public/assets"]}
133
+ ],
134
+ :changed => %[
135
+ echo "-----> #{message}"
136
+ #{echo_cmd %[#{rake_assets_precompile}]}
137
+ ],
138
+ :default => %[
139
+ echo "-----> Precompiling asset files"
140
+ #{echo_cmd %[#{rake_assets_precompile}]}
141
+ ]
106
142
  end
107
-
108
- message = verbose_mode? ?
109
- '$((count)) changes found, precompiling asset files' :
110
- 'Precompiling asset files'
111
-
112
- queue check_for_changes_script \
113
- check: 'public/assets/',
114
- at: [*asset_paths],
115
- skip: %[
116
- echo "-----> Skipping asset precompilation"
117
- #{echo_cmd %[cp -R "#{deploy_to}/#{current_path}/public/assets" "./public/assets"]}
118
- ],
119
- changed: %[
120
- echo "-----> #{message}"
121
- #{echo_cmd %[#{rake} assets:precompile]}
122
- ],
123
- default: %[
124
- echo "-----> Precompiling asset files"
125
- #{echo_cmd %[#{rake} assets:precompile]}
126
- ]
127
143
  end
128
144
 
129
145
  end
data/lib/mina/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Mina
2
2
  def self.version
3
- "0.1.3.pre1"
3
+ "0.2.0.pre2"
4
4
  end
5
5
  end
@@ -21,7 +21,6 @@ require 'mina/git'
21
21
  set :domain, 'localhost'
22
22
  set :deploy_to, "#{Dir.pwd}/deploy"
23
23
  set :repository, "#{Mina.root_path}"
24
- set :revision, 'HEAD'
25
24
 
26
25
  desc "Deploys."
27
26
  task :deploy do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3.pre1
4
+ version: 0.2.0.pre2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-13 00:00:00.000000000 Z
13
+ date: 2012-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -98,7 +98,6 @@ files:
98
98
  - spec/commands/command_spec.rb
99
99
  - spec/commands/custom_config_spec.rb
100
100
  - spec/commands/deploy_spec.rb
101
- - spec/commands/git_spec.rb
102
101
  - spec/commands/outside_project_spec.rb
103
102
  - spec/commands/real_deploy_spec.rb
104
103
  - spec/commands/verbose_spec.rb
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
- require 'command_helper'
3
-
4
- describe "Invoking the 'mina deploy' command outside of git tree" do
5
- before do
6
- temp_path = "/tmp/mina-spec"
7
- FileUtils.mkdir_p("#{temp_path}/config")
8
- FileUtils.cp root('spec/fixtures/empty_env/config/deploy.rb'), "#{temp_path}/config/deploy.rb"
9
- Dir.chdir temp_path
10
- end
11
-
12
- after do
13
- FileUtils.rm_rf "/tmp/mina-spec"
14
- Dir.chdir root
15
- end
16
-
17
- it 'should prompt empty revision error message' do
18
- run_command 'deploy', 'simulate=1'
19
- exitstatus.should_not eq(0)
20
- stderr.should match(/git revision is empty/i)
21
- end
22
- end