mina 0.1.3.pre1 → 0.2.0.pre2

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/.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