foreman 0.37.2 → 0.38.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/foreman/cli.rb CHANGED
@@ -10,7 +10,7 @@ class Foreman::CLI < Thor
10
10
 
11
11
  class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
12
12
 
13
- desc "start", "Start the application"
13
+ desc "start [PROCESS]", "Start the application (or a specific PROCESS)"
14
14
 
15
15
  class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
16
16
  class_option :app_root, :type => :string, :aliases => "-d", :desc => "Default: Procfile directory"
@@ -27,8 +27,9 @@ class Foreman::CLI < Thor
27
27
  end
28
28
  end
29
29
 
30
- def start
30
+ def start(process=nil)
31
31
  check_procfile!
32
+ engine.options[:concurrency] = "#{process}=1" if process
32
33
  engine.start
33
34
  end
34
35
 
@@ -23,7 +23,7 @@ class Foreman::Engine
23
23
  def initialize(procfile, options={})
24
24
  @procfile = Foreman::Procfile.new(procfile)
25
25
  @directory = options[:app_root] || File.expand_path(File.dirname(procfile))
26
- @options = options
26
+ @options = options.dup
27
27
  @environment = read_environment_files(options[:env])
28
28
  @output_mutex = Mutex.new
29
29
  end
@@ -99,6 +99,7 @@ private ######################################################################
99
99
  (rs || []).each do |r|
100
100
  data = r.gets
101
101
  next unless data
102
+ data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
102
103
  ps, message = data.split(",", 2)
103
104
  color = colors[ps.split(".").first]
104
105
  info message, ps, color
@@ -1,5 +1,5 @@
1
1
  module Foreman
2
2
 
3
- VERSION = "0.37.2"
3
+ VERSION = "0.38.0"
4
4
 
5
5
  end
@@ -3,6 +3,8 @@ require "foreman/cli"
3
3
 
4
4
  describe "Foreman::CLI", :fakefs do
5
5
  subject { Foreman::CLI.new }
6
+ let(:engine) { subject.send(:engine) }
7
+ let(:entries) { engine.procfile.entries.inject({}) { |h,e| h.update(e.name => e) } }
6
8
 
7
9
  describe "start" do
8
10
  describe "with a non-existent Procfile" do
@@ -22,6 +24,15 @@ describe "Foreman::CLI", :fakefs do
22
24
  mock.instance_of(Foreman::Engine).start
23
25
  subject.start
24
26
  end
27
+
28
+ it "can run a single process" do
29
+ dont_allow(subject).error
30
+ stub(engine).watch_for_output
31
+ stub(engine).watch_for_termination
32
+ mock(entries["alpha"]).spawn(1, is_a(IO), engine.directory, {}, 5000) { [] }
33
+ mock(entries["bravo"]).spawn(0, is_a(IO), engine.directory, {}, 5100) { [] }
34
+ subject.start("alpha")
35
+ end
25
36
  end
26
37
  end
27
38
 
@@ -4,6 +4,13 @@ require "foreman/engine"
4
4
  describe "Foreman::Engine", :fakefs do
5
5
  subject { Foreman::Engine.new("Procfile", {}) }
6
6
 
7
+ before do
8
+ any_instance_of(Foreman::Engine) do |engine|
9
+ stub(engine).proctitle
10
+ stub(engine).termtitle
11
+ end
12
+ end
13
+
7
14
  describe "initialize" do
8
15
  describe "without an existing Procfile" do
9
16
  it "raises an error" do
@@ -95,7 +102,7 @@ describe "Foreman::Engine", :fakefs do
95
102
  stub(subject).watch_for_output
96
103
  stub(subject).watch_for_termination
97
104
  subject.start
98
- sleep 1
105
+ Process.waitall
99
106
  mock(subject).info(/started with pid \d+/, "utf8.1", anything)
100
107
  mock(subject).info("\xff\x03\n", "utf8.1", anything)
101
108
  subject.send(:poll_readers)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.2
4
+ version: 0.38.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-30 00:00:00.000000000Z
12
+ date: 2012-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70287283568800 !ruby/object:Gem::Requirement
16
+ requirement: &70157364076040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70287283568800
24
+ version_requirements: *70157364076040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &70287283568240 !ruby/object:Gem::Requirement
27
+ requirement: &70157364075220 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.13.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70287283568240
35
+ version_requirements: *70157364075220
36
36
  description: Process manager for applications with multiple components
37
37
  email: ddollar@gmail.com
38
38
  executables:
@@ -114,15 +114,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
114
  - - ! '>='
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
+ segments:
118
+ - 0
119
+ hash: -2171581925377059315
117
120
  required_rubygems_version: !ruby/object:Gem::Requirement
118
121
  none: false
119
122
  requirements:
120
123
  - - ! '>='
121
124
  - !ruby/object:Gem::Version
122
125
  version: '0'
126
+ segments:
127
+ - 0
128
+ hash: -2171581925377059315
123
129
  requirements: []
124
130
  rubyforge_project:
125
- rubygems_version: 1.8.10
131
+ rubygems_version: 1.8.11
126
132
  signing_key:
127
133
  specification_version: 3
128
134
  summary: Process manager for applications with multiple components