docker-sync 0.4.6 → 0.5.0.pre.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/console +6 -0
  4. data/lib/docker-sync.rb +2 -1
  5. data/lib/docker-sync/config/project_config.rb +13 -12
  6. data/lib/docker-sync/dependencies.rb +39 -0
  7. data/lib/docker-sync/dependencies/docker.rb +23 -0
  8. data/lib/docker-sync/dependencies/docker_driver.rb +20 -0
  9. data/lib/docker-sync/dependencies/fswatch.rb +14 -0
  10. data/lib/docker-sync/dependencies/package_manager.rb +24 -0
  11. data/lib/docker-sync/dependencies/package_managers/apt.rb +24 -0
  12. data/lib/docker-sync/dependencies/package_managers/base.rb +47 -0
  13. data/lib/docker-sync/dependencies/package_managers/brew.rb +24 -0
  14. data/lib/docker-sync/dependencies/package_managers/none.rb +23 -0
  15. data/lib/docker-sync/dependencies/package_managers/pkg.rb +24 -0
  16. data/lib/docker-sync/dependencies/package_managers/yum.rb +24 -0
  17. data/lib/docker-sync/dependencies/rsync.rb +14 -0
  18. data/lib/docker-sync/dependencies/unison.rb +15 -0
  19. data/lib/docker-sync/dependencies/unox.rb +40 -0
  20. data/lib/docker-sync/environment.rb +19 -0
  21. data/lib/docker-sync/execution.rb +11 -35
  22. data/lib/docker-sync/sync_manager.rb +10 -3
  23. data/lib/docker-sync/sync_process.rb +16 -18
  24. data/lib/docker-sync/sync_strategy/native.rb +3 -4
  25. data/lib/docker-sync/sync_strategy/native_osx.rb +11 -11
  26. data/lib/docker-sync/sync_strategy/rsync.rb +15 -7
  27. data/lib/docker-sync/sync_strategy/unison.rb +13 -12
  28. data/lib/docker-sync/update_check.rb +5 -0
  29. data/lib/docker-sync/upgrade_check.rb +2 -1
  30. data/lib/docker-sync/watch_strategy/dummy.rb +1 -1
  31. data/lib/docker-sync/watch_strategy/fswatch.rb +4 -5
  32. data/lib/docker-sync/watch_strategy/remotelogs.rb +3 -3
  33. data/lib/docker-sync/watch_strategy/unison.rb +2 -2
  34. data/tasks/daemon/daemon.thor +0 -1
  35. data/tasks/stack/stack.thor +8 -9
  36. data/tasks/sync/sync.thor +16 -19
  37. metadata +21 -9
  38. data/lib/docker-sync/preconditions/preconditions_linux.rb +0 -51
  39. data/lib/docker-sync/preconditions/preconditions_osx.rb +0 -174
  40. data/lib/docker-sync/preconditions/strategy.rb +0 -65
@@ -11,6 +11,7 @@ class UpgradeChecker
11
11
  end
12
12
 
13
13
  def run
14
+ return if ENV['DOCKER_SYNC_SKIP_UPGRADE']
14
15
  unless should_run
15
16
  return
16
17
  end
@@ -50,6 +51,7 @@ class UpgradeChecker
50
51
  end
51
52
 
52
53
  def check_and_warn
54
+ return if ENV['DOCKER_SYNC_SKIP_UPGRADE']
53
55
  # this is the upgrade hook for the unison-unox introduction / rename of unison
54
56
  if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.1.0')
55
57
  Thor::Shell::Basic.new.say_status 'warning', 'Please be aware that with the strategy "unison" is now called unison-onesided and you might need to migrate. See https://github.com/EugenMayer/docker-sync/wiki/Migration-Guide for more informations', :red
@@ -75,7 +77,6 @@ class UpgradeChecker
75
77
  system cmd1
76
78
  else
77
79
  raise('Please reinstall docker-sync yourself')
78
- exit 1
79
80
  end
80
81
  end
81
82
 
@@ -1,7 +1,7 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
3
 
4
- module Docker_Sync
4
+ module DockerSync
5
5
  module WatchStrategy
6
6
  class Dummy
7
7
  include Thor::Shell
@@ -1,9 +1,8 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
- require 'docker-sync/preconditions/strategy'
4
3
  require 'pathname'
5
4
 
6
- module Docker_Sync
5
+ module DockerSync
7
6
  module WatchStrategy
8
7
  class Fswatch
9
8
  include Thor::Shell
@@ -19,8 +18,8 @@ module Docker_Sync
19
18
  @events_to_watch = %w(AttributeModified Created Link MovedFrom MovedTo Renamed Removed Updated)
20
19
 
21
20
  begin
22
- DockerSync::Preconditions::Strategy.instance.fswatch_available
23
- rescue Exception => e
21
+ Dependencies::Fswatch.ensure!
22
+ rescue StandardError => e
24
23
  say_status 'error', e.message, :red
25
24
  exit 1
26
25
  end
@@ -43,7 +42,7 @@ module Docker_Sync
43
42
  say_status 'command', cmd, :white if @options['verbose']
44
43
 
45
44
  # run a thread here, since it is blocking
46
- @watch_thread = threadexec(cmd, "Sync #{@sync_name}", :blue)
45
+ @watch_thread = thread_exec(cmd, "Sync #{@sync_name}", :blue)
47
46
  end
48
47
 
49
48
  def watch_options
@@ -1,7 +1,7 @@
1
1
  require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
3
 
4
- module Docker_Sync
4
+ module DockerSync
5
5
  module WatchStrategy
6
6
  class Remote_logs
7
7
  include Thor::Shell
@@ -17,13 +17,13 @@ module Docker_Sync
17
17
  @sync_name = sync_name
18
18
  @watch_fork = nil
19
19
  @watch_thread = nil
20
- @unison = Docker_Sync::SyncStrategy::NativeOsx.new(@sync_name, @options)
20
+ @unison = DockerSync::SyncStrategy::NativeOsx.new(@sync_name, @options)
21
21
  end
22
22
 
23
23
  def run
24
24
  say_status 'success', "Showing unison logs from your sync container: #{@unison.get_container_name}", :green
25
25
  cmd = "docker exec #{@unison.get_container_name} tail -F /tmp/unison.log"
26
- @watch_thread = threadexec(cmd, 'Sync Log:')
26
+ @watch_thread = thread_exec(cmd, 'Sync Log:')
27
27
  end
28
28
 
29
29
  def stop
@@ -2,7 +2,7 @@ require 'thor/shell'
2
2
  require 'docker-sync/execution'
3
3
  require 'docker-sync/sync_strategy/unison'
4
4
 
5
- module Docker_Sync
5
+ module DockerSync
6
6
  module WatchStrategy
7
7
  class Unison
8
8
  include Execution
@@ -19,7 +19,7 @@ module Docker_Sync
19
19
  # unison sync and watch
20
20
  # basically unison watch is the command with the additionnal -repeat watch option
21
21
  # note: this doesn't run a sync
22
- @unison = Docker_Sync::SyncStrategy::Unison.new(@sync_name, @options)
22
+ @unison = DockerSync::SyncStrategy::Unison.new(@sync_name, @options)
23
23
  end
24
24
 
25
25
  def run
@@ -1,6 +1,5 @@
1
1
  require 'docker-sync'
2
2
  require 'docker-sync/sync_manager'
3
- require 'docker-sync/preconditions/strategy'
4
3
  require 'docker-sync/update_check'
5
4
  require 'docker-sync/upgrade_check'
6
5
  require 'daemons'
@@ -1,6 +1,5 @@
1
1
  require 'docker-sync'
2
2
  require 'docker-sync/sync_manager'
3
- require 'docker-sync/preconditions/strategy'
4
3
  require 'docker-sync/update_check'
5
4
  require 'docker-sync/upgrade_check'
6
5
  require 'docker/compose'
@@ -35,15 +34,15 @@ class Stack < Thor
35
34
 
36
35
  begin
37
36
  config = DockerSync::ProjectConfig.new(config_path: options[:config])
38
- DockerSync::Preconditions::Strategy.instance.check_all_preconditions(config)
39
- rescue Exception => e
37
+ DockerSync::Dependencies.ensure_all!(config)
38
+ rescue StandardError => e
40
39
  say_status 'error', e.message, :red
41
40
  exit(1)
42
41
  end
43
42
 
44
- say_status 'note:', 'You can also run docker-sync in the background with docker-sync --daemon'
43
+ say_status 'note:', 'You can also run docker-sync in the background with docker-sync start'
45
44
 
46
- @sync_manager = Docker_sync::SyncManager.new(config: config)
45
+ @sync_manager = DockerSync::SyncManager.new(config: config)
47
46
  @sync_manager.run(options[:sync_name])
48
47
  global_options = @sync_manager.global_options
49
48
  @compose_manager = ComposeManager.new(global_options)
@@ -60,7 +59,7 @@ class Stack < Thor
60
59
 
61
60
  @sync_manager.stop
62
61
  @compose_manager.stop
63
- rescue Exception => e
62
+ rescue StandardError => e
64
63
  puts "EXCEPTION: #{e.inspect}"
65
64
  puts "MESSAGE: #{e.message}"
66
65
  end
@@ -76,13 +75,13 @@ class Stack < Thor
76
75
 
77
76
  begin
78
77
  config = DockerSync::ProjectConfig.new(config_path: options[:config])
79
- DockerSync::Preconditions::Strategy.instance.check_all_preconditions(config)
80
- rescue Exception => e
78
+ DockerSync::Dependencies.ensure_all!(config)
79
+ rescue StandardError => e
81
80
  say_status 'error', e.message, :red
82
81
  exit(1)
83
82
  end
84
83
 
85
- @sync_manager = Docker_sync::SyncManager.new(config: config)
84
+ @sync_manager = DockerSync::SyncManager.new(config: config)
86
85
  global_options = @sync_manager.global_options
87
86
  # shutdown compose first
88
87
  @compose_manager = ComposeManager.new(global_options)
data/tasks/sync/sync.thor CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'docker-sync'
2
2
  require 'docker-sync/sync_manager'
3
- require 'docker-sync/preconditions/strategy'
4
3
  require 'docker-sync/update_check'
5
4
  require 'docker-sync/upgrade_check'
6
5
  require 'daemons'
@@ -34,7 +33,7 @@ class Sync < Thor
34
33
  UpgradeChecker.new.run
35
34
 
36
35
  config = config_preconditions
37
- @sync_manager = Docker_sync::SyncManager.new(config: config)
36
+ @sync_manager = DockerSync::SyncManager.new(config: config)
38
37
 
39
38
  start_dir = Dir.pwd # Set start_dir variable to be equal to pre-daemonized folder, since daemonizing will change dir to '/'
40
39
 
@@ -61,7 +60,7 @@ class Sync < Thor
61
60
  print_version if options[:version]
62
61
 
63
62
  config = config_preconditions
64
- sync_manager = Docker_sync::SyncManager.new(config: config)
63
+ sync_manager = DockerSync::SyncManager.new(config: config)
65
64
  sync_manager.stop
66
65
  pid_file_path="#{options['dir']}/#{options['app_name']}.pid"
67
66
  if File.exist?(pid_file_path)
@@ -86,7 +85,7 @@ class Sync < Thor
86
85
 
87
86
  config = config_preconditions
88
87
 
89
- @sync_manager = Docker_sync::SyncManager.new(config: config)
88
+ @sync_manager = DockerSync::SyncManager.new(config: config)
90
89
  @sync_manager.sync(options[:sync_name])
91
90
  end
92
91
 
@@ -107,7 +106,7 @@ class Sync < Thor
107
106
  # Remove the .docker-sync directory
108
107
  FileUtils.rm_r dir if File.directory?(dir)
109
108
 
110
- @sync_manager = Docker_sync::SyncManager.new(config: config)
109
+ @sync_manager = DockerSync::SyncManager.new(config: config)
111
110
  @sync_manager.clean(options[:sync_name])
112
111
  say_status 'success', 'Finished cleanup. Removed stopped, removed sync container and removed their volumes', :green
113
112
  end
@@ -129,27 +128,25 @@ class Sync < Thor
129
128
  def list
130
129
  print_version if options[:version]
131
130
 
132
- config = config_preconditions
131
+ project_config = config_preconditions
133
132
 
134
- say_status 'ok',"Found configuration at #{config.config_path}"
135
- @sync_manager = Docker_sync::SyncManager.new(config: config)
136
- @sync_manager.get_sync_points.each do |name, config|
137
- say_status name, "On address #{config['sync_host_ip']}:#{config['sync_host_port']}",:white unless options['verbose']
138
- puts "\n---------------[#{name}] #{config['sync_host_ip']}:#{config['sync_host_port']} ---------------\n" if options['verbose']
139
- print_table(config) if options['verbose']
133
+ say_status 'ok',"Found configuration at #{project_config.config_path}"
134
+ @sync_manager = DockerSync::SyncManager.new(config: project_config)
135
+ @sync_manager.get_sync_points.each do |name, sync_config|
136
+ say_status name, "On address #{sync_config['sync_host_ip']}:#{sync_config['sync_host_port']}",:white unless options['verbose']
137
+ puts "\n---------------[#{name}] #{sync_config['sync_host_ip']}:#{sync_config['sync_host_port']} ---------------\n" if options['verbose']
138
+ print_table(sync_config) if options['verbose']
140
139
  end
141
140
  end
142
141
 
143
142
  no_tasks do
144
143
  def config_preconditions # Moved shared preconditions block into separate method to have less/cleaner code
145
- begin
146
- DockerSync::ProjectConfig.new(config_path: options[:config]).tap do |config|
147
- DockerSync::Preconditions::Strategy.instance.check_all_preconditions(config)
148
- end
149
- rescue Exception => e
150
- say_status 'error', e.message, :red
151
- exit 1
144
+ DockerSync::ProjectConfig.new(config_path: options[:config]).tap do |config|
145
+ DockerSync::Dependencies.ensure_all!(config)
152
146
  end
147
+ rescue StandardError => e
148
+ say_status 'error', e.message, :red
149
+ exit 1
153
150
  end
154
151
 
155
152
  def daemonize
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.5.0.pre.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugen Mayer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
11
+ date: 2017-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -174,10 +174,22 @@ files:
174
174
  - lib/docker-sync/config/config_serializer.rb
175
175
  - lib/docker-sync/config/global_config.rb
176
176
  - lib/docker-sync/config/project_config.rb
177
+ - lib/docker-sync/dependencies.rb
178
+ - lib/docker-sync/dependencies/docker.rb
179
+ - lib/docker-sync/dependencies/docker_driver.rb
180
+ - lib/docker-sync/dependencies/fswatch.rb
181
+ - lib/docker-sync/dependencies/package_manager.rb
182
+ - lib/docker-sync/dependencies/package_managers/apt.rb
183
+ - lib/docker-sync/dependencies/package_managers/base.rb
184
+ - lib/docker-sync/dependencies/package_managers/brew.rb
185
+ - lib/docker-sync/dependencies/package_managers/none.rb
186
+ - lib/docker-sync/dependencies/package_managers/pkg.rb
187
+ - lib/docker-sync/dependencies/package_managers/yum.rb
188
+ - lib/docker-sync/dependencies/rsync.rb
189
+ - lib/docker-sync/dependencies/unison.rb
190
+ - lib/docker-sync/dependencies/unox.rb
191
+ - lib/docker-sync/environment.rb
177
192
  - lib/docker-sync/execution.rb
178
- - lib/docker-sync/preconditions/preconditions_linux.rb
179
- - lib/docker-sync/preconditions/preconditions_osx.rb
180
- - lib/docker-sync/preconditions/strategy.rb
181
193
  - lib/docker-sync/sync_manager.rb
182
194
  - lib/docker-sync/sync_process.rb
183
195
  - lib/docker-sync/sync_strategy/native.rb
@@ -195,7 +207,7 @@ files:
195
207
  - tasks/sync/sync.thor
196
208
  homepage: https://github.com/EugenMayer/docker_sync
197
209
  licenses:
198
- - GPL
210
+ - GPL-3.0
199
211
  metadata: {}
200
212
  post_install_message:
201
213
  rdoc_options: []
@@ -208,12 +220,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
220
  version: '2.0'
209
221
  required_rubygems_version: !ruby/object:Gem::Requirement
210
222
  requirements:
211
- - - ">="
223
+ - - ">"
212
224
  - !ruby/object:Gem::Version
213
- version: '0'
225
+ version: 1.3.1
214
226
  requirements: []
215
227
  rubyforge_project:
216
- rubygems_version: 2.4.5.1
228
+ rubygems_version: 2.5.2
217
229
  signing_key:
218
230
  specification_version: 4
219
231
  summary: Docker Sync - Fast and efficient way to sync code to docker-containers
@@ -1,51 +0,0 @@
1
- module DockerSync
2
- module Preconditions
3
- class Linux
4
- def check_all_preconditions(config)
5
- return unless should_run_precondition?
6
-
7
- docker_available
8
- docker_running
9
-
10
- if config.unison_required?
11
- unison_available
12
- end
13
-
14
- if config.rsync_required?
15
- rsync_available
16
- fswatch_available
17
- end
18
- end
19
-
20
- def docker_available
21
- end
22
-
23
- def docker_running
24
- end
25
-
26
- def fswatch_available
27
- end
28
-
29
- def rsync_available
30
- end
31
-
32
- def unison_available
33
- end
34
-
35
- def is_driver_docker_for_mac?
36
- return false
37
- end
38
-
39
- def is_driver_docker_toolbox?
40
- return false
41
- end
42
- private
43
-
44
- def should_run_precondition?(silent: false)
45
- true
46
- end
47
-
48
-
49
- end
50
- end
51
- end
@@ -1,174 +0,0 @@
1
- require 'mkmf'
2
- module DockerSync
3
- module Preconditions
4
- class Osx
5
- def check_all_preconditions(config)
6
- return unless should_run_precondition?
7
-
8
- docker_available
9
- docker_running
10
-
11
- if config.unison_required?
12
- unison_available
13
- end
14
-
15
- if config.rsync_required?
16
- rsync_available
17
- fswatch_available
18
- end
19
- end
20
-
21
- def docker_available
22
- if (find_executable0 'docker').nil?
23
- raise('Could not find docker binary in path. Please install it, e.g. using "brew install docker" or install docker-for-mac')
24
- end
25
- end
26
-
27
- def docker_running
28
- `docker ps`
29
- if $?.exitstatus > 0
30
- raise('No docker daemon seems to be running. Did you start your docker-for-mac / docker-machine?')
31
- end
32
- end
33
-
34
- def rsync_available
35
- if should_run_precondition?
36
- if (find_executable0 'rsync').nil?
37
- raise('Could not find rsync binary in path. Please install it, e.g. using "brew install rsync"')
38
- end
39
- end
40
- end
41
-
42
- def unison_available
43
- if should_run_precondition?
44
- if (find_executable0 'unison').nil?
45
- cmd1 = 'brew install unison'
46
-
47
- Thor::Shell::Basic.new.say_status 'warning', 'Could not find unison binary in $PATH. Trying to install now', :red
48
- Thor::Shell::Basic.new.say_status 'command', cmd1, :white
49
- if Thor::Shell::Basic.new.yes?('I will install unison using brew for you? (y/N)')
50
- system cmd1
51
- else
52
- raise('Please install it yourself using: brew install unison')
53
- end
54
- end
55
-
56
- unox_available
57
- end
58
- end
59
-
60
- def fswatch_available
61
- if should_run_precondition?
62
- if (find_executable0 'fswatch').nil?
63
- cmd1 = 'brew install fswatch'
64
-
65
- Thor::Shell::Basic.new.say_status 'warning', 'No fswatch available. Install it by "brew install fswatch Trying to install now', :red
66
- if Thor::Shell::Basic.new.yes?('I will install fswatch using brew for you? (y/N)')
67
- system cmd1
68
- else
69
- raise('Please install it yourself using: brew install fswatch')
70
- end
71
- end
72
- end
73
-
74
- end
75
-
76
- def is_driver_docker_for_mac?
77
- `docker info | grep 'Docker Root Dir: /var/lib/docker' && docker info | grep 'Operating System: Alpine Linux'`
78
- $?.success?
79
- end
80
-
81
- def is_driver_docker_toolbox?
82
- return false unless find_executable0('docker-machine')
83
- `docker info | grep 'Operating System: Boot2Docker'`
84
- $?.success?
85
- end
86
-
87
- private
88
-
89
- def should_run_precondition?(silent = false)
90
- unless has_brew?
91
- Thor::Shell::Basic.new.say_status 'info', 'Not running any precondition checks since you have no brew and that is unsupported. Is all up to you know.', :white unless silent
92
- return false
93
- end
94
- return true
95
- end
96
-
97
- def has_brew?
98
- return find_executable0 'brew'
99
- end
100
-
101
-
102
- def unox_available
103
- if should_run_precondition?
104
- if defined? Bundler
105
- Bundler.with_clean_env { `brew list unox` }
106
- else
107
- `brew list unox`
108
- end
109
-
110
- unless $?.success?
111
- # unox installed, but not using brew, we do not allow that anymore
112
- if File.exist?('/usr/local/bin/unison-fsmonitor')
113
- Thor::Shell::Basic.new.say_status 'error', 'You installed unison-fsmonitor (unox) not using brew-method - the old legacy way. We need to fix that.', :red
114
-
115
- uninstall_cmd='sudo rm /usr/local/bin/unison-fsmonitor'
116
- Thor::Shell::Basic.new.say_status 'command', uninstall_cmd, :white
117
- if Thor::Shell::Basic.new.yes?('Should i uninstall the legacy /usr/local/bin/unison-fsmonitor for you ? (y/N)')
118
- system uninstall_cmd
119
- else
120
- Thor::Shell::Basic.new.say_status 'error', 'Uninstall /usr/local/bin/unison-fsmonitor manually please', :white
121
- exit 1
122
- end
123
- end
124
-
125
- cmd1 = 'brew tap eugenmayer/dockersync && brew install eugenmayer/dockersync/unox'
126
- Thor::Shell::Basic.new.say_status 'warning', 'Could not find unison-fsmonitor (unox) binary in $PATH. Trying to install now', :red
127
- Thor::Shell::Basic.new.say_status 'command', cmd1, :white
128
- if Thor::Shell::Basic.new.yes?('I will install unox through brew for you? (y/N)')
129
- system cmd1
130
- else
131
- raise("Please install it yourself using: #{cmd1}")
132
- end
133
- end
134
- end
135
- end
136
-
137
- def install_pip(package, test = nil)
138
- test ? `python -c 'import #{test}'` : `python -c 'import #{package}'`
139
-
140
- unless $?.success?
141
- Thor::Shell::Basic.new.say_status 'warning', "Could not find #{package}. Will try to install it using pip", :red
142
- if find_executable0('python') == '/usr/bin/python'
143
- Thor::Shell::Basic.new.say_status 'ok', 'You seem to use the system python, we will need sudo below'
144
- sudo = true
145
- cmd2 = "sudo easy_install pip && sudo pip install #{package}"
146
- else
147
- Thor::Shell::Basic.new.say_status 'ok', 'You seem to have a custom python, using non-sudo commands'
148
- sudo = false
149
- cmd2 = "easy_install pip && pip install #{package}"
150
- end
151
- if sudo
152
- question = "I will ask you for you root password to install #{package} by running (This will ask for sudo, since we use the system python)"
153
- else
154
- question = "I will now install #{package} for you by running"
155
- end
156
-
157
- Thor::Shell::Basic.new.say_status 'info', "#{question}: `#{cmd2}\n\n"
158
- if Thor::Shell::Basic.new.yes?('Shall I continue? (y/N)')
159
- system cmd2
160
- if $?.exitstatus > 0
161
- raise("Failed to install #{package}, please file an issue with the output of the error")
162
- end
163
- test ? `python -c 'import #{test}'` : `python -c 'import #{package}'`
164
- unless $?.success?
165
- raise("Somehow I could not successfully install #{package} even though I tried. Please report this issue.")
166
- end
167
- else
168
- raise("Please install #{package} manually, see https://github.com/EugenMayer/docker-sync/wiki/1.-Installation")
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end