pathological 0.2.6 → 0.3.0
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/lib/pathological/base.rb +9 -6
- data/lib/pathological/version.rb +1 -1
- data/pathological.gemspec +1 -0
- data/test/unit/pathological/base_test.rb +53 -24
- metadata +101 -53
data/lib/pathological/base.rb
CHANGED
@@ -89,20 +89,23 @@ module Pathological
|
|
89
89
|
#
|
90
90
|
# @param [String] copy_outside_paths the directory to stage dependencies in
|
91
91
|
# @param [String] dependency_directory the subdir within destination to put dependencies in
|
92
|
+
# @param [String] pathfile_search_path the directory at which to begin the search for the Pathfile by
|
93
|
+
# walking up the directory tree
|
92
94
|
#
|
93
95
|
# TODO(ev): Break this function up into a set of more functional primitives
|
94
|
-
def self.copy_outside_paths!(destination,
|
96
|
+
def self.copy_outside_paths!(destination, options = {})
|
97
|
+
options = { :dependency_directory => "pathological_dependencies" }.merge(options)
|
95
98
|
saved_exclude_root = @@exclude_root
|
96
99
|
begin
|
97
100
|
self.excluderoot_mode
|
98
|
-
pathfile = self.find_pathfile
|
101
|
+
pathfile = self.find_pathfile(options[:pathfile_search_path])
|
99
102
|
# Nothing to do if there's no Pathfile
|
100
103
|
return unless pathfile && File.file?(pathfile)
|
101
104
|
|
102
105
|
foreign_paths = self.find_load_paths(pathfile).uniq
|
103
106
|
return if foreign_paths.empty?
|
104
107
|
|
105
|
-
path_root = File.join(destination, dependency_directory)
|
108
|
+
path_root = File.join(destination, options[:dependency_directory])
|
106
109
|
FileUtils.mkdir_p path_root
|
107
110
|
|
108
111
|
# Copy in each path and save the relative paths to write to the rewritten Pathfile. We copy each unique
|
@@ -116,7 +119,7 @@ module Pathological
|
|
116
119
|
FileUtils.mkdir_p File.split(symlinked_name)[0]
|
117
120
|
debug "About to move #{foreign_path} to #{symlinked_name}..."
|
118
121
|
copy_directory(foreign_path, symlinked_name)
|
119
|
-
File.join(dependency_directory, path_short_name)
|
122
|
+
File.join(options[:dependency_directory], path_short_name)
|
120
123
|
end
|
121
124
|
# Overwrite the Pathfile with the new relative paths.
|
122
125
|
File.open(File.join(destination, "Pathfile"), "w") do |file|
|
@@ -131,7 +134,7 @@ module Pathological
|
|
131
134
|
|
132
135
|
def self.debug_mode; @@debug = true; end
|
133
136
|
def self.bundlerize_mode
|
134
|
-
pathfile =
|
137
|
+
pathfile = self.find_pathfile
|
135
138
|
raise NoPathfileException unless pathfile
|
136
139
|
bundle_gemfile = File.join(File.dirname(pathfile), "Gemfile")
|
137
140
|
unless File.file? bundle_gemfile
|
@@ -187,7 +190,7 @@ module Pathological
|
|
187
190
|
# Trim comments
|
188
191
|
line = line.split(/#/, 2)[0].strip
|
189
192
|
next if line.empty?
|
190
|
-
raw_path = File.expand_path(File.join(root, line
|
193
|
+
raw_path = Pathname.new(line).absolute? ? line : File.expand_path(File.join(root, line))
|
191
194
|
raw_paths << (@@add_parents ? File.dirname(raw_path) : raw_path)
|
192
195
|
end
|
193
196
|
|
data/lib/pathological/version.rb
CHANGED
data/pathological.gemspec
CHANGED
@@ -4,6 +4,7 @@ require "rr"
|
|
4
4
|
require "minitest/autorun"
|
5
5
|
require "stringio"
|
6
6
|
require "fakefs/safe"
|
7
|
+
require "dedent"
|
7
8
|
|
8
9
|
# It's kind of funny that we need to do this hack, given that Pathological is intended to work around it...
|
9
10
|
$:.unshift(File.join(File.dirname(__FILE__), "../../lib"))
|
@@ -102,29 +103,29 @@ module Pathological
|
|
102
103
|
|
103
104
|
context "#requiring_filename" do
|
104
105
|
setup do
|
105
|
-
@full_19_stacktrace =
|
106
|
-
/Users/test/ruby/gems/1.9.1/gems/pathological-0.2.2.1/lib/pathological/base.rb:61:in `find_pathfile'
|
107
|
-
/Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:36:in `find_load_paths'
|
108
|
-
/Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:15:in `add_paths!'
|
109
|
-
/Users/test/gems/pathological-0.2.2.1/lib/pathological.rb:3:in `<top (required)>'
|
110
|
-
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:59:in `require'
|
111
|
-
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
|
112
|
-
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
|
113
|
-
/Users/test/repos/pathological/test/rackup/app.rb:1:in `<top (required)>'
|
114
|
-
/Users/test/.rubies/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
|
115
|
-
|
116
|
-
@full_18_stacktrace =
|
117
|
-
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:61:in `find_pathfile'
|
118
|
-
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:36:in `find_load_paths'
|
119
|
-
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:15:in `add_paths!'
|
120
|
-
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological.rb:3
|
121
|
-
/Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `gem_original_require'
|
122
|
-
/Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `require'
|
123
|
-
app.rb:2
|
124
|
-
|
125
|
-
@bad_stacktrace =
|
126
|
-
/Users/test/repos/pathological/test/rackup/app.rb !!! `<top (required)>'
|
127
|
-
|
106
|
+
@full_19_stacktrace = <<-EOS.dedent.split("\n").reject(&:empty?)
|
107
|
+
/Users/test/ruby/gems/1.9.1/gems/pathological-0.2.2.1/lib/pathological/base.rb:61:in `find_pathfile'
|
108
|
+
/Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:36:in `find_load_paths'
|
109
|
+
/Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:15:in `add_paths!'
|
110
|
+
/Users/test/gems/pathological-0.2.2.1/lib/pathological.rb:3:in `<top (required)>'
|
111
|
+
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:59:in `require'
|
112
|
+
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
|
113
|
+
/Users/test/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
|
114
|
+
/Users/test/repos/pathological/test/rackup/app.rb:1:in `<top (required)>'
|
115
|
+
/Users/test/.rubies/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
|
116
|
+
EOS
|
117
|
+
@full_18_stacktrace = <<-EOS.dedent.split("\n").reject(&:empty?)
|
118
|
+
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:61:in `find_pathfile'
|
119
|
+
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:36:in `find_load_paths'
|
120
|
+
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:15:in `add_paths!'
|
121
|
+
/Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological.rb:3
|
122
|
+
/Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `gem_original_require'
|
123
|
+
/Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `require'
|
124
|
+
app.rb:2
|
125
|
+
EOS
|
126
|
+
@bad_stacktrace = <<-EOS.dedent.split("\n").reject(&:empty?)
|
127
|
+
/Users/test/repos/pathological/test/rackup/app.rb !!! `<top (required)>'
|
128
|
+
EOS
|
128
129
|
@empty_stacktrace = []
|
129
130
|
end
|
130
131
|
|
@@ -184,6 +185,16 @@ app.rb:2
|
|
184
185
|
assert_raises(PathologicalException) { load_and_run! }
|
185
186
|
end
|
186
187
|
|
188
|
+
should "respect absolute paths" do
|
189
|
+
other = "/a/b"
|
190
|
+
@pathfile = "/src/Pathfile"
|
191
|
+
FileUtils.mkdir "/src"
|
192
|
+
FileUtils.mkdir_p other
|
193
|
+
FileUtils.touch @pathfile
|
194
|
+
File.open(@pathfile, "w") { |f| f.write(other) }
|
195
|
+
assert Pathological.find_load_paths("/src/Pathfile").include? other
|
196
|
+
end
|
197
|
+
|
187
198
|
should "print some debug info in debug mode" do
|
188
199
|
Pathological.debug_mode
|
189
200
|
mock(Pathological).puts(anything).at_least(3)
|
@@ -235,7 +246,7 @@ app.rb:2
|
|
235
246
|
end
|
236
247
|
|
237
248
|
should "return immediately if there is no Pathfile" do
|
238
|
-
mock(Pathological).find_pathfile { nil }
|
249
|
+
mock(Pathological).find_pathfile(nil) { nil }
|
239
250
|
Pathological.copy_outside_paths! @destination
|
240
251
|
refute File.directory?(File.join(@destination, "pathological_dependencies"))
|
241
252
|
end
|
@@ -261,6 +272,24 @@ app.rb:2
|
|
261
272
|
end
|
262
273
|
assert_equal destination_paths, File.read(File.join(@destination, "Pathfile")).split("\n")
|
263
274
|
end
|
275
|
+
|
276
|
+
should "copy source dirs as links and rewrite Pathfile in a different directory" do
|
277
|
+
other = "other/dir"
|
278
|
+
FileUtils.mkdir_p other
|
279
|
+
File.open(File.join(other, "Pathfile"), "w") { |f| f.puts @source_paths.join("\n") }
|
280
|
+
|
281
|
+
final_path = File.join(@destination, "pathological_dependencies")
|
282
|
+
@source_paths.each do |source_path|
|
283
|
+
mock(Pathological).copy_directory(source_path, final_path + source_path.gsub("/src", "")).once
|
284
|
+
end
|
285
|
+
Pathological.copy_outside_paths! @destination, :pathfile_search_path => other
|
286
|
+
|
287
|
+
assert File.directory?(final_path)
|
288
|
+
destination_paths = @source_paths.map do |source_path|
|
289
|
+
"pathological_dependencies#{source_path.gsub("/src", "")}"
|
290
|
+
end
|
291
|
+
assert_equal destination_paths, File.read(File.join(@destination, "Pathfile")).split("\n")
|
292
|
+
end
|
264
293
|
end
|
265
294
|
end
|
266
295
|
end
|
metadata
CHANGED
@@ -1,73 +1,111 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pathological
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Daniel MacDougall
|
9
14
|
- Caleb Spare
|
10
15
|
- Evan Chan
|
11
16
|
autorequire:
|
12
17
|
bindir: bin
|
13
18
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
|
20
|
+
date: 2012-09-20 00:00:00 -07:00
|
21
|
+
default_executable:
|
22
|
+
dependencies:
|
23
|
+
- !ruby/object:Gem::Dependency
|
17
24
|
name: rr
|
18
|
-
|
25
|
+
prerelease: false
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
27
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
hash: 17
|
32
|
+
segments:
|
33
|
+
- 1
|
34
|
+
- 0
|
35
|
+
- 3
|
23
36
|
version: 1.0.3
|
24
37
|
type: :development
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
28
40
|
name: scope
|
29
|
-
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
43
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 17
|
48
|
+
segments:
|
49
|
+
- 0
|
50
|
+
- 2
|
51
|
+
- 3
|
34
52
|
version: 0.2.3
|
35
53
|
type: :development
|
36
|
-
|
37
|
-
|
38
|
-
- !ruby/object:Gem::Dependency
|
54
|
+
version_requirements: *id002
|
55
|
+
- !ruby/object:Gem::Dependency
|
39
56
|
name: fakefs
|
40
|
-
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
59
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
46
67
|
type: :development
|
47
|
-
|
48
|
-
|
49
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
50
70
|
name: rake
|
51
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
73
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
57
81
|
type: :development
|
82
|
+
version_requirements: *id004
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: dedent
|
58
85
|
prerelease: false
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
type: :development
|
96
|
+
version_requirements: *id005
|
97
|
+
description: " Pathological provides a way to manage a project's require paths by using a small config file that\n indicates all directories to include in the load path.\n"
|
98
|
+
email:
|
64
99
|
- dmac@ooyala.com
|
65
100
|
- caleb@ooyala.com
|
66
101
|
- ev@ooyala.com
|
67
102
|
executables: []
|
103
|
+
|
68
104
|
extensions: []
|
105
|
+
|
69
106
|
extra_rdoc_files: []
|
70
|
-
|
107
|
+
|
108
|
+
files:
|
71
109
|
- .travis.yml
|
72
110
|
- .yardopts
|
73
111
|
- Gemfile
|
@@ -85,29 +123,39 @@ files:
|
|
85
123
|
- lib/pathological/version.rb
|
86
124
|
- pathological.gemspec
|
87
125
|
- test/unit/pathological/base_test.rb
|
126
|
+
has_rdoc: true
|
88
127
|
homepage: http://www.ooyala.com
|
89
128
|
licenses: []
|
129
|
+
|
90
130
|
post_install_message:
|
91
131
|
rdoc_options: []
|
92
|
-
|
132
|
+
|
133
|
+
require_paths:
|
93
134
|
- lib
|
94
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
136
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
version: "0"
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
145
|
none: false
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
106
153
|
requirements: []
|
154
|
+
|
107
155
|
rubyforge_project: pathological
|
108
|
-
rubygems_version: 1.
|
156
|
+
rubygems_version: 1.6.2
|
109
157
|
signing_key:
|
110
158
|
specification_version: 2
|
111
159
|
summary: A nice way to manage your project's require paths.
|
112
160
|
test_files: []
|
113
|
-
|
161
|
+
|