vgrnt 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ec9d0aba10f8e4965ff0be10e8734933faa88c0
4
- data.tar.gz: a3434a03c3abe317c00a78cda479be664aa9e3cd
3
+ metadata.gz: f8323a806adea255394c51d19b359c5ceb3f19be
4
+ data.tar.gz: e5f2a0f951de3281b168fdf4c773e450be3a40c8
5
5
  SHA512:
6
- metadata.gz: 1e73e399f049fbf2c68312e1b7ea5c55e9d22ae6dd21cc7f5cea59aba198d943493019014fe642ff4bfce9e9e6d14bff30d81bc9d6d8c70d90a24ee367ba88db
7
- data.tar.gz: 6527718cba50263df9bafcf60aa40fed17f74eae4ea2c6d428b7383b2ceb4906503cb2f3e4eb045439de3623c03281676da206ed8a039ad3868a9d759044eaaf
6
+ metadata.gz: b9b1c2561570adcb5348d37e6d6d697b3d595ed7b7aa4d86eac7417aeb73f0f4953076090e52b9d0711d5f95bade4c3be903d1f784a9675b3bda1eef41081f51
7
+ data.tar.gz: 284e2a10e4d795c60f62cd33c52173553b916eb3fdedfda8afede4ccee657245c5cc444c31f791e5bc86f77ebd34c63dabf2e35f18a088419d9c2858f1ff46db
@@ -1,3 +1,16 @@
1
+ ## [0.0.5](https://github.com/dergachev/vagrant/compare/v0.0.4...v0.0.5) (Dec 10, 2013)
2
+
3
+ FEATURES:
4
+
5
+ - Added 'vgrnt np' support.
6
+
7
+ IMPROVEMENTS:
8
+
9
+ - Refactored codebase a bit:
10
+ - Extracted shelling out logic into Vgrnt::Util::Exec
11
+ - Extracted logger helpers into Vgrnt::Util::Logger
12
+ - Improved Vgrnt::Util::Exec to allow capturing of stderr for testing
13
+
1
14
  ## [0.0.4](https://github.com/dergachev/vagrant/compare/v0.0.3...v0.0.4) (Dec 3, 2013)
2
15
 
3
16
  BUGFIX:
data/README.md CHANGED
@@ -77,6 +77,16 @@ vgrnt vboxmanage metrics query VM_ID
77
77
  # => VBoxManage metrics query 0398e43a-d35f-4c84-bc81-6807f5d11262
78
78
  ```
79
79
 
80
+ ### vgrnt np
81
+
82
+ Same as `VAGRANT_NO_PLUGINS=1 vagrant <args>`. Useful for speeding up any
83
+ command `vgrnt` doesn't support.
84
+
85
+ ```
86
+ vgrnt np provision
87
+ # Executing "VAGRANT_NO_PLUGINS=1 vagrant provision"
88
+ ```
89
+
80
90
  ## Installation
81
91
 
82
92
  vgrnt *should not* be installed as a vagrant plugin. Instead, just install the gem:
@@ -12,7 +12,7 @@ cd ~/code/vgrnt
12
12
 
13
13
  # after making code changes, increment version number, build the gem locally
14
14
  vim lib/vgrnt/version.rb +/VERSION # increment version counter, eg to 0.0.3
15
- rake build # package the gem into ./pkg/vgrnt-0.0.3.gem
15
+ bundle exec rake build # package the gem into ./pkg/vgrnt-0.0.3.gem
16
16
 
17
17
  # install and test the gem locally
18
18
  gem uninstall vgrnt
@@ -24,8 +24,7 @@ vgrnt ssh -- ls /
24
24
  vim CHANGELOG.md # add v0.0.3 details
25
25
  git commit -m "Publishing v0.0.3" CHANGELOG.md lib/vgrnt/version.rb
26
26
 
27
- rake release
28
- git push --tags
27
+ bundle exec rake release
29
28
  ```
30
29
 
31
30
  ## Creating a gem
@@ -1,28 +1,12 @@
1
1
  require 'thor'
2
2
  require 'open3'
3
+ require 'vgrnt/util/logger'
3
4
  require 'vgrnt/util/virtualbox'
4
5
  require 'vgrnt/util/vagrantfile'
6
+ require 'vgrnt/util/exec'
5
7
 
6
- module Vgrnt
7
- class Logger
8
-
9
- def stdout(str)
10
- $stdout.puts str unless str.empty?
11
- end
12
-
13
- def notice(str)
14
- $stderr.puts str unless str.empty?
15
- end
16
8
 
17
- def debug(str)
18
- $stderr.puts str if !str.empty? && ENV['VAGRANT_LOG'] == 'debug'
19
- end
20
-
21
- def error(str)
22
- # terminal codes for red
23
- $stderr.puts "\e[31m" + str + "\e[0m" unless str.empty?
24
- end
25
- end
9
+ module Vgrnt
26
10
 
27
11
  # Undoes the automatic removal of -- in Thor::Options.peek. Otherwise "vgrnt ssh precise -- ls /"
28
12
  # is parsed as "precise ls /". TODO: is there a less hacky way to handle this?
@@ -32,12 +16,11 @@ module Vgrnt
32
16
  end
33
17
  end
34
18
 
35
-
36
19
  class App < Thor
37
20
 
38
21
  def initialize(*args)
39
22
  super(*args)
40
- @logger = Logger.new
23
+ @logger = Vgrnt::Util::Logger
41
24
  end
42
25
 
43
26
  desc "ssh [vm-name] [-- extra ssh args]", "Runs vagrant ssh without bootstrapping vagrant."
@@ -74,14 +57,7 @@ module Vgrnt
74
57
  end
75
58
  end
76
59
 
77
- # Using IO.popen is important:
78
- # - POpen3 ignores STDIN. Backticks buffer stdout. Kernel::exec breaks rspec.
79
- # - getc instead of gets fixes the 1 line lag.
80
- IO.popen(ssh_command) do |io|
81
- while c = io.getc do
82
- putc c
83
- end
84
- end
60
+ Vgrnt::Util::Exec.popen(ssh_command)
85
61
  end
86
62
 
87
63
  desc "ssh-config [vm-name]", "Store output of 'vagrant ssh-config' to .vgrnt-sshconfig"
@@ -114,6 +90,13 @@ module Vgrnt
114
90
  end
115
91
  end
116
92
 
93
+ desc "np [args]", "Executes 'VAGRANT_NO_PLUGINS=1 vagrant [args ...]'"
94
+ def np(*args)
95
+ command = (["VAGRANT_NO_PLUGINS=1", "vagrant" ] + args).join(" ")
96
+ Vgrnt::Util::Exec.popen(command)
97
+ end
98
+
99
+
117
100
  # desc "provision", "Run vagrant provision like last time"
118
101
  # def provision
119
102
  # raise "Not implemented yet. Likely requires creating vagrant-vgrnt."
@@ -166,10 +149,7 @@ module Vgrnt
166
149
 
167
150
  @logger.debug "Executing: #{command}"
168
151
  #TODO: windows support (path to VBoxManage.exe")
169
- Open3.popen3(command) do |stdin, stdout, stderr|
170
- @logger.stdout stdout.read
171
- @logger.error stderr.read
172
- end
152
+ Vgrnt::Util::Exec.popen(command)
173
153
  end
174
154
  end
175
155
  end
@@ -0,0 +1,31 @@
1
+ module Vgrnt
2
+ module Util
3
+ module Exec
4
+ # used when wanting pass STDIN without buffering
5
+ def self.popen(command)
6
+ # Using IO.popen is important:
7
+ # - Open3.popen3 ignores STDIN. Backticks buffer stdout. Kernel::exec breaks rspec.
8
+ # - getc instead of gets fixes the 1 line lag.
9
+ IO.popen(command) do |io|
10
+ while c = io.getc do
11
+ putc c
12
+ end
13
+ end
14
+ end
15
+
16
+ # used when we want to capture stdout, stderr separately and don't care about buffering on stdin
17
+ def self.popen3(command, logger = Vgrnt::Util::Logger)
18
+ Open3.popen3(command) do |stdin, stdout, stderr|
19
+ logger.stdout stdout.read
20
+ logger.error stderr.read
21
+ end
22
+ end
23
+
24
+ def self.exec(command)
25
+ raise "NOT IMPLEMENTED"
26
+ # FIXME: stop using exec, it's too hard to test without stubbing
27
+ exec(command)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ module Vgrnt
2
+ module Util
3
+ class Logger
4
+
5
+ def self.stdout(str)
6
+ $stdout.puts str unless str.empty?
7
+ end
8
+
9
+ def self.notice(str)
10
+ $stderr.puts str unless str.empty?
11
+ end
12
+
13
+ def self.debug(str)
14
+ $stderr.puts str if !str.empty? && ENV['VAGRANT_LOG'] == 'debug'
15
+ end
16
+
17
+ def self.error(str)
18
+ # terminal codes for red
19
+ $stderr.puts "\e[31m" + str + "\e[0m" unless str.empty?
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Vgrnt
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -16,6 +16,11 @@ describe Vgrnt::App do
16
16
  output = vagrant_stdout { Vgrnt::App.start(%w{ssh -- whoami}) }
17
17
  expect(output).to eq "vagrant\n"
18
18
  end
19
+
20
+ it 'preserves stderr' do
21
+ output = vagrant_stderr { Vgrnt::App.start(%w{ssh -- grep --bob }) }
22
+ expect(output).to include "grep: unrecognized option '--bob'"
23
+ end
19
24
  end
20
25
 
21
26
  describe "#ssh-config", :slow do
@@ -26,6 +31,7 @@ describe Vgrnt::App do
26
31
  it 'with default VM specified explicitly' do
27
32
  expect( in_vagrant_env { File.exists? '.vgrnt-sshconfig' } ).to be_false
28
33
  stderr = vagrant_stderr { Vgrnt::App.start(%w{ssh-config default}) }
34
+ expect(stderr).to include "Created ./.vgrnt-sshconfig with the following: Host default"
29
35
  expect( in_vagrant_env { File.exists? '.vgrnt-sshconfig' } ).to be_true
30
36
  end
31
37
 
@@ -68,6 +74,17 @@ describe Vgrnt::App do
68
74
  expect(vgrnt_output).to include(vagrant_output)
69
75
  end
70
76
  end
77
+
78
+ describe "#np" do
79
+ it "'np status' is identical to 'vagrant status'", :slow do
80
+ # default saved (virtualbox)
81
+ vagrant_output = vagrant_stdout { puts `VAGRANT_NO_PLUGINS=1 vagrant status | grep '(virtualbox)$'` }
82
+ expect(vagrant_output).to match /default +running \(virtualbox\)/
83
+
84
+ vgrnt_output = vagrant_stdout { Vgrnt::App.start(%w{np status}) }
85
+ expect(vgrnt_output).to include(vagrant_output)
86
+ end
87
+ end
71
88
  end
72
89
 
73
90
  context "when running from ./spec/acceptance/fixtures/neveron" do
@@ -28,6 +28,9 @@ module AcceptanceExampleGroup
28
28
  end
29
29
 
30
30
  def vagrant_stderr(&block)
31
+ # stubbing because IO.popen in Vgrnt::Util::Exec prevents stderr from being capturable.
32
+ Vgrnt::Util::Exec.stub(:popen) { |cmd| Vgrnt::Util::Exec.popen3(cmd) }
33
+
31
34
  capture_in_vagrant_env(:stderr, &block)
32
35
  end
33
36
 
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Vgrnt::App do
4
+ describe "#np" do
5
+ it 'executes correctly' do
6
+ Vgrnt::Util::Exec.stub(:popen) { |arg| arg }
7
+ output = Vgrnt::App.start(%w{np ssh default -- whoami})
8
+ expect(output).to eq "VAGRANT_NO_PLUGINS=1 vagrant ssh default -- whoami"
9
+ end
10
+ end
11
+ end
12
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vgrnt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dergachev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -85,6 +85,8 @@ files:
85
85
  - docs/vboxmanage-irregular-commands.txt
86
86
  - lib/vgrnt.rb
87
87
  - lib/vgrnt/base.rb
88
+ - lib/vgrnt/util/exec.rb
89
+ - lib/vgrnt/util/logger.rb
88
90
  - lib/vgrnt/util/vagrantfile.rb
89
91
  - lib/vgrnt/util/virtualbox.rb
90
92
  - lib/vgrnt/version.rb
@@ -95,6 +97,7 @@ files:
95
97
  - spec/acceptance/support/acceptance_helper.rb
96
98
  - spec/acceptance/util_spec.rb
97
99
  - spec/spec_helper.rb
100
+ - spec/unit/app_spec.rb
98
101
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-misc1
99
102
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-multi
100
103
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-plugins
@@ -133,6 +136,7 @@ test_files:
133
136
  - spec/acceptance/support/acceptance_helper.rb
134
137
  - spec/acceptance/util_spec.rb
135
138
  - spec/spec_helper.rb
139
+ - spec/unit/app_spec.rb
136
140
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-misc1
137
141
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-multi
138
142
  - spec/unit/fixtures/util_vagrantfile/Vagrantfile-plugins