Compare commits

...
13 Commits
9 changed files with 29 additions and 9 deletions
+1
View File
@@ -1,4 +1,5 @@
/.bundle /.bundle
/.rbenv-version
/coverage /coverage
/example/log/* /example/log/*
/man/*.html /man/*.html
-3
View File
@@ -1,12 +1,9 @@
script: bundle exec rake spec script: bundle exec rake spec
env: JRUBY_OPTS="--debug -X+O"
rvm: rvm:
- 1.8.7 - 1.8.7
- 1.9.2 - 1.9.2
- 1.9.3 - 1.9.3
- jruby-head
notifications: notifications:
email: false email: false
+1 -1
View File
@@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
foreman (0.37.2) foreman (0.38.0)
term-ansicolor (~> 1.0.7) term-ansicolor (~> 1.0.7)
thor (>= 0.13.6) thor (>= 0.13.6)
+2
View File
@@ -1,6 +1,8 @@
$:.unshift File.expand_path("../lib", __FILE__) $:.unshift File.expand_path("../lib", __FILE__)
require "foreman" require "foreman"
require "bundler/setup"
Dir[File.expand_path("../tasks/*.rake", __FILE__)].each do |task| Dir[File.expand_path("../tasks/*.rake", __FILE__)].each do |task|
load task load task
end end
+3 -2
View File
@@ -10,7 +10,7 @@ class Foreman::CLI < Thor
class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile" class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
desc "start", "Start the application" desc "start [PROCESS]", "Start the application (or a specific PROCESS)"
class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile" class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
class_option :app_root, :type => :string, :aliases => "-d", :desc => "Default: Procfile directory" class_option :app_root, :type => :string, :aliases => "-d", :desc => "Default: Procfile directory"
@@ -27,8 +27,9 @@ class Foreman::CLI < Thor
end end
end end
def start def start(process=nil)
check_procfile! check_procfile!
engine.options[:concurrency] = "#{process}=1" if process
engine.start engine.start
end end
+2 -1
View File
@@ -23,7 +23,7 @@ class Foreman::Engine
def initialize(procfile, options={}) def initialize(procfile, options={})
@procfile = Foreman::Procfile.new(procfile) @procfile = Foreman::Procfile.new(procfile)
@directory = options[:app_root] || File.expand_path(File.dirname(procfile)) @directory = options[:app_root] || File.expand_path(File.dirname(procfile))
@options = options @options = options.dup
@environment = read_environment_files(options[:env]) @environment = read_environment_files(options[:env])
@output_mutex = Mutex.new @output_mutex = Mutex.new
end end
@@ -99,6 +99,7 @@ private ######################################################################
(rs || []).each do |r| (rs || []).each do |r|
data = r.gets data = r.gets
next unless data next unless data
data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
ps, message = data.split(",", 2) ps, message = data.split(",", 2)
color = colors[ps.split(".").first] color = colors[ps.split(".").first]
info message, ps, color info message, ps, color
+1 -1
View File
@@ -1,5 +1,5 @@
module Foreman module Foreman
VERSION = "0.37.2" VERSION = "0.38.0"
end end
+11
View File
@@ -3,6 +3,8 @@ require "foreman/cli"
describe "Foreman::CLI", :fakefs do describe "Foreman::CLI", :fakefs do
subject { Foreman::CLI.new } subject { Foreman::CLI.new }
let(:engine) { subject.send(:engine) }
let(:entries) { engine.procfile.entries.inject({}) { |h,e| h.update(e.name => e) } }
describe "start" do describe "start" do
describe "with a non-existent Procfile" do describe "with a non-existent Procfile" do
@@ -22,6 +24,15 @@ describe "Foreman::CLI", :fakefs do
mock.instance_of(Foreman::Engine).start mock.instance_of(Foreman::Engine).start
subject.start subject.start
end end
it "can run a single process" do
dont_allow(subject).error
stub(engine).watch_for_output
stub(engine).watch_for_termination
mock(entries["alpha"]).spawn(1, is_a(IO), engine.directory, {}, 5000) { [] }
mock(entries["bravo"]).spawn(0, is_a(IO), engine.directory, {}, 5100) { [] }
subject.start("alpha")
end
end end
end end
+8 -1
View File
@@ -4,6 +4,13 @@ require "foreman/engine"
describe "Foreman::Engine", :fakefs do describe "Foreman::Engine", :fakefs do
subject { Foreman::Engine.new("Procfile", {}) } subject { Foreman::Engine.new("Procfile", {}) }
before do
any_instance_of(Foreman::Engine) do |engine|
stub(engine).proctitle
stub(engine).termtitle
end
end
describe "initialize" do describe "initialize" do
describe "without an existing Procfile" do describe "without an existing Procfile" do
it "raises an error" do it "raises an error" do
@@ -95,7 +102,7 @@ describe "Foreman::Engine", :fakefs do
stub(subject).watch_for_output stub(subject).watch_for_output
stub(subject).watch_for_termination stub(subject).watch_for_termination
subject.start subject.start
sleep 1 Process.waitall
mock(subject).info(/started with pid \d+/, "utf8.1", anything) mock(subject).info(/started with pid \d+/, "utf8.1", anything)
mock(subject).info("\xff\x03\n", "utf8.1", anything) mock(subject).info("\xff\x03\n", "utf8.1", anything)
subject.send(:poll_readers) subject.send(:poll_readers)