zerg_support 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.
- data/CHANGELOG +2 -0
- data/Manifest +2 -0
- data/lib/zerg_support/spawn.rb +126 -0
- data/zerg_support.gemspec +6 -8
- metadata +6 -3
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -0,0 +1,126 @@
|
|
1
|
+
#:nodoc:
|
2
|
+
module Zerg::Support::Process
|
3
|
+
# perhaps this should be merged in process
|
4
|
+
end
|
5
|
+
|
6
|
+
if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
|
7
|
+
require 'win32-process'
|
8
|
+
|
9
|
+
#:nodoc: all
|
10
|
+
module Zerg::Support::Process
|
11
|
+
def self.spawn(binary, args = [], options = {})
|
12
|
+
info = Process.create :app_name => binary,
|
13
|
+
:cwd => options[:chdir] || Dir.pwd,
|
14
|
+
:environment => options[:env],
|
15
|
+
:creation_flags => 0
|
16
|
+
return info[:process_id]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
else
|
21
|
+
|
22
|
+
#:nodoc:
|
23
|
+
module Zerg::Support::Process
|
24
|
+
# Spawns a new process and returns its pid immediately.
|
25
|
+
# Like Kernel.spawn in ruby1.9, except that the environment is passed
|
26
|
+
# as an option with the key :env
|
27
|
+
def self.spawn(binary, args = [], options = {})
|
28
|
+
if Kernel.respond_to? :spawn
|
29
|
+
# ruby1.9+: spawn!
|
30
|
+
options = options.dup
|
31
|
+
env = options.delete(:env)
|
32
|
+
Kernel.spawn *([env, binary] + args + [options])
|
33
|
+
else
|
34
|
+
# below 1.9: emulate
|
35
|
+
|
36
|
+
# chdir option
|
37
|
+
Dir.chdir options[:chdir] if options[:chdir]
|
38
|
+
|
39
|
+
child_pid = fork do
|
40
|
+
Helpers.do_redirects options
|
41
|
+
Helpers.close_fds options
|
42
|
+
Helpers.set_process_group options
|
43
|
+
Helpers.set_environment options
|
44
|
+
Helpers.set_rlimits options
|
45
|
+
|
46
|
+
Kernel.exec *([binary] + args)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
return child_pid
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Helpers for spawning processes.
|
56
|
+
module Zerg::Support::Process::Helpers
|
57
|
+
# Closes all open file descriptors except for stdin/stdout/stderr
|
58
|
+
def self.close_fds(options)
|
59
|
+
return if options[:close_others] == false
|
60
|
+
|
61
|
+
ObjectSpace.each_object(IO) do |io|
|
62
|
+
next if [STDIN, STDOUT, STDERR].include? io
|
63
|
+
|
64
|
+
begin
|
65
|
+
io.close unless io.closed?
|
66
|
+
rescue Exception
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Sets process limits (rlimits) according to the given options. The options
|
72
|
+
# follow the convention of Kernel.spawn in ruby1.9
|
73
|
+
def self.set_rlimits(options)
|
74
|
+
# rlimit options
|
75
|
+
options.each do |k, v|
|
76
|
+
next unless k.kind_of? Symbol and k.to_s[0, 7] == 'rlimit_'
|
77
|
+
rconst = Process.const_get k.to_s.upcase.to_sym
|
78
|
+
if v.kind_of? Enumerable
|
79
|
+
Process.setrlimit rconst, v.first, v.last
|
80
|
+
else
|
81
|
+
Process.setrlimit rconst, v
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Sets the process' group according to the given options. The options
|
87
|
+
# follow the convention of Kernel.spawn in ruby1.9
|
88
|
+
def self.set_process_group(options)
|
89
|
+
return unless options[:pgroup]
|
90
|
+
|
91
|
+
if options[:pgroup].kind_of? Numeric and options[:pgroup] > 0
|
92
|
+
Process.setpgid 0, options[:pgroup]
|
93
|
+
else
|
94
|
+
Process.setsid
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Sets the process' environment according to the given options. The options
|
99
|
+
# follow the convention of Kernel.spawn in ruby1.9
|
100
|
+
def self.set_environment(options)
|
101
|
+
return unless options[:env]
|
102
|
+
|
103
|
+
ENV.clear if options[:unsetenv_others]
|
104
|
+
options[:env].each do |key, value|
|
105
|
+
ENV[key] = value
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Performs IO redirections according to the given options. The options
|
110
|
+
# follow the convention of Kernel.spawn in ruby1.9
|
111
|
+
def self.do_redirects(options)
|
112
|
+
file_redirects = []
|
113
|
+
fd_redirects = []
|
114
|
+
options.each do |key, value|
|
115
|
+
next unless key.kind_of? IO
|
116
|
+
if value.kind_of? String
|
117
|
+
file_redirects << [key, value]
|
118
|
+
else
|
119
|
+
fd_redirects << [key, value]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
(file_redirects + fd_redirects).each do |r|
|
123
|
+
r.first.reopen r.last
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/zerg_support.gemspec
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
Gem::Specification.new do |s|
|
4
2
|
s.name = %q{zerg_support}
|
5
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.5"
|
6
4
|
|
7
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
6
|
s.authors = ["Victor Costan"]
|
9
|
-
s.date = %q{2008-11-
|
7
|
+
s.date = %q{2008-11-19}
|
10
8
|
s.description = %q{Support libraries used by the Zerg system.}
|
11
9
|
s.email = %q{victor@zergling.net}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "lib/zerg_support/gems.rb", "lib/zerg_support/process.rb", "lib/zerg_support.rb", "LICENSE", "README"]
|
13
|
-
s.files = ["CHANGELOG", "lib/zerg_support/gems.rb", "lib/zerg_support/process.rb", "lib/zerg_support.rb", "LICENSE", "Manifest", "Rakefile", "README", "test/test_gems.rb", "test/test_process.rb", "
|
10
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/zerg_support/gems.rb", "lib/zerg_support/process.rb", "lib/zerg_support/spawn.rb", "lib/zerg_support.rb", "LICENSE", "README"]
|
11
|
+
s.files = ["CHANGELOG", "lib/zerg_support/gems.rb", "lib/zerg_support/process.rb", "lib/zerg_support/spawn.rb", "lib/zerg_support.rb", "LICENSE", "Manifest", "Rakefile", "README", "test/test_gems.rb", "test/test_process.rb", "test/test_spawn.rb", "zerg_support.gemspec"]
|
14
12
|
s.has_rdoc = true
|
15
13
|
s.homepage = %q{http://www.zergling.net}
|
16
14
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Zerg_support", "--main", "README"]
|
17
15
|
s.require_paths = ["lib"]
|
18
16
|
s.rubyforge_project = %q{rails-pwnage}
|
19
|
-
s.rubygems_version = %q{1.
|
17
|
+
s.rubygems_version = %q{1.2.0}
|
20
18
|
s.summary = %q{Support libraries used by the Zerg system.}
|
21
19
|
s.test_files = ["test/test_gems.rb", "test/test_process.rb", "test/test_spawn.rb"]
|
22
20
|
|
@@ -24,7 +22,7 @@ Gem::Specification.new do |s|
|
|
24
22
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
23
|
s.specification_version = 2
|
26
24
|
|
27
|
-
if
|
25
|
+
if current_version >= 3 then
|
28
26
|
s.add_development_dependency(%q<flexmock>, [">= 0.8.3"])
|
29
27
|
else
|
30
28
|
s.add_dependency(%q<flexmock>, [">= 0.8.3"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zerg_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-11-
|
12
|
+
date: 2008-11-19 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,6 +32,7 @@ extra_rdoc_files:
|
|
32
32
|
- CHANGELOG
|
33
33
|
- lib/zerg_support/gems.rb
|
34
34
|
- lib/zerg_support/process.rb
|
35
|
+
- lib/zerg_support/spawn.rb
|
35
36
|
- lib/zerg_support.rb
|
36
37
|
- LICENSE
|
37
38
|
- README
|
@@ -39,6 +40,7 @@ files:
|
|
39
40
|
- CHANGELOG
|
40
41
|
- lib/zerg_support/gems.rb
|
41
42
|
- lib/zerg_support/process.rb
|
43
|
+
- lib/zerg_support/spawn.rb
|
42
44
|
- lib/zerg_support.rb
|
43
45
|
- LICENSE
|
44
46
|
- Manifest
|
@@ -46,6 +48,7 @@ files:
|
|
46
48
|
- README
|
47
49
|
- test/test_gems.rb
|
48
50
|
- test/test_process.rb
|
51
|
+
- test/test_spawn.rb
|
49
52
|
- zerg_support.gemspec
|
50
53
|
has_rdoc: true
|
51
54
|
homepage: http://www.zergling.net
|
@@ -74,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
77
|
requirements: []
|
75
78
|
|
76
79
|
rubyforge_project: rails-pwnage
|
77
|
-
rubygems_version: 1.
|
80
|
+
rubygems_version: 1.2.0
|
78
81
|
signing_key:
|
79
82
|
specification_version: 2
|
80
83
|
summary: Support libraries used by the Zerg system.
|