From b4cab083276dc9c1aa85533b8eda66bc355cb9b2 Mon Sep 17 00:00:00 2001 From: jc00ke Date: Sun, 22 Jan 2012 12:27:25 -0800 Subject: [PATCH 1/2] Using spoon for JRuby support --- Gemfile.lock | 5 +++++ foreman.gemspec | 1 + lib/foreman/process.rb | 25 ++++++++++++++++++------- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8d5dd78..1e17e51 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,6 +2,7 @@ PATH remote: . specs: foreman (0.36.1) + spoon (~> 0.0.1) term-ansicolor (~> 1.0.7) thor (>= 0.13.6) @@ -17,6 +18,7 @@ GEM diff-lcs (1.1.3) fakefs (0.3.2) hpricot (0.8.2) + hpricot (0.8.2-java) mime-types (1.16) mustache (0.11.2) parka (0.6.2) @@ -25,6 +27,7 @@ GEM thor rake (0.9.2.2) rcov (0.9.8) + rcov (0.9.8-java) rdiscount (1.6.5) rest-client (1.6.1) mime-types (>= 1.16) @@ -42,11 +45,13 @@ GEM diff-lcs (~> 1.1.2) rspec-mocks (2.8.0) rubyzip (0.9.4) + spoon (0.0.1) term-ansicolor (1.0.7) thor (0.14.6) xml-simple (1.0.15) PLATFORMS + java ruby DEPENDENCIES diff --git a/foreman.gemspec b/foreman.gemspec index 0333f2e..ee20980 100644 --- a/foreman.gemspec +++ b/foreman.gemspec @@ -18,4 +18,5 @@ Gem::Specification.new do |gem| gem.add_dependency 'term-ansicolor', '~> 1.0.7' gem.add_dependency 'thor', '>= 0.13.6' + gem.add_dependency 'spoon', '~> 0.0.1' end diff --git a/lib/foreman/process.rb b/lib/foreman/process.rb index ac929fa..0ed4214 100644 --- a/lib/foreman/process.rb +++ b/lib/foreman/process.rb @@ -1,4 +1,6 @@ require "foreman" +require "rubygems" +require "spoon" if RUBY_PLATFORM == "java" class Foreman::Process @@ -27,15 +29,24 @@ class Foreman::Process private + def jruby? + defined?(RUBY_PLATFORM) and RUBY_PLATFORM == "java" + end + def fork_with_io(command) reader, writer = IO.pipe - pid = fork do - trap("INT", "IGNORE") - writer.sync = true - $stdout.reopen writer - $stderr.reopen writer - reader.close - exec Foreman.runner, replace_command_env(command) + command = replace_command_env(command) + pid = if jruby? + Spoon.spawnp Foreman.runner, command + else + fork do + trap("INT", "IGNORE") + writer.sync = true + $stdout.reopen writer + $stderr.reopen writer + reader.close + exec Foreman.runner, command + end end [ reader, pid ] end From 853a88dfbf36f9f8ae36b5268197e38b6b5e2300 Mon Sep 17 00:00:00 2001 From: jc00ke Date: Sun, 22 Jan 2012 13:43:37 -0800 Subject: [PATCH 2/2] Move spoon dep to Gemfile By moving it to the Gemfile & using platform we're able avoid installing spoon for other Ruby implementations. --- Gemfile | 4 ++++ Gemfile.lock | 2 +- foreman.gemspec | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 73adc42..dd5881f 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,10 @@ source "http://rubygems.org" gemspec +platform :jruby do + gem 'spoon', '~> 0.0.1' +end + group :development do gem 'parka' gem 'rake' diff --git a/Gemfile.lock b/Gemfile.lock index 1e17e51..b90f459 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,6 @@ PATH remote: . specs: foreman (0.36.1) - spoon (~> 0.0.1) term-ansicolor (~> 1.0.7) thor (>= 0.13.6) @@ -65,3 +64,4 @@ DEPENDENCIES rr (~> 1.0.2) rspec (~> 2.0) rubyzip + spoon (~> 0.0.1) diff --git a/foreman.gemspec b/foreman.gemspec index ee20980..0333f2e 100644 --- a/foreman.gemspec +++ b/foreman.gemspec @@ -18,5 +18,4 @@ Gem::Specification.new do |gem| gem.add_dependency 'term-ansicolor', '~> 1.0.7' gem.add_dependency 'thor', '>= 0.13.6' - gem.add_dependency 'spoon', '~> 0.0.1' end