pathname2 1.5.1 → 1.5.2
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/CHANGES +12 -0
- data/MANIFEST +1 -0
- data/README +12 -12
- data/Rakefile +74 -0
- data/lib/pathname2.rb +21 -15
- data/test/tc_pathname.rb +11 -19
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 1.5.2 - 9-Mar-2007
|
2
|
+
* Bug fix for the Pathname#realpath method where it was not handling recursive
|
3
|
+
symlinks. The C version was also fixed, but it only affected platforms that
|
4
|
+
don't have the realpath() function.
|
5
|
+
* Added a test for recursive symlinks (for Solaris, anyway).
|
6
|
+
* Updated the docs for Pathname#realpath.
|
7
|
+
* Minor speed enhancements for the C version and the elimination of one
|
8
|
+
(potential) segfault.
|
9
|
+
* Added a 'Future Plans' section to the README.
|
10
|
+
* Added a Rakefile. You can now build, clean, and test and install (both the
|
11
|
+
pure Ruby and C versions).
|
12
|
+
|
1
13
|
== 1.5.1 - 28-Aug-2006
|
2
14
|
* Added the Kernel#pn method as a shortcut for Pathname.new.
|
3
15
|
* The Pathname#readlink now properly handles symbolic links. The 'fix'
|
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
== Description
|
2
|
-
A drop
|
2
|
+
A drop-in replacement for the current Pathname class.
|
3
3
|
|
4
4
|
== Prerequisites
|
5
5
|
* Ruby 1.8.0 or later
|
@@ -10,21 +10,16 @@
|
|
10
10
|
|
11
11
|
== Installation, pure Ruby
|
12
12
|
=== Manual Installation
|
13
|
-
|
14
|
-
|
15
|
-
ruby install.rb
|
13
|
+
rake test (optional)
|
14
|
+
rake install
|
16
15
|
|
17
16
|
=== Gem Installation
|
18
|
-
|
19
|
-
ruby test/tc_pathname_win.rb (Windows, optional)
|
17
|
+
rake test (optional)
|
20
18
|
gem install pathname2-<version>.gem
|
21
19
|
|
22
20
|
== Installation, C extension
|
23
|
-
|
24
|
-
|
25
|
-
make
|
26
|
-
run appropriate test (optional)
|
27
|
-
make install
|
21
|
+
rake test_c (optional)
|
22
|
+
rake install_c
|
28
23
|
|
29
24
|
== Synopsis
|
30
25
|
require "pathname2"
|
@@ -98,9 +93,14 @@
|
|
98
93
|
Pathname#glob is not yet implemented in the C version.
|
99
94
|
Pathname#find is not implemented properly in the C version.
|
100
95
|
|
101
|
-
In Ruby 1.8.3 and
|
96
|
+
In Ruby 1.8.3 and 1.8.4 you will see a failure in the test suite regarding
|
102
97
|
'fu_world_writable?' from FileUtils. You can ignore this. That method is
|
103
98
|
supposed to be private. See ruby-core:7383.
|
99
|
+
|
100
|
+
== Future Plans
|
101
|
+
Because ftools is more or less deprecated, and FileUtils can generally do
|
102
|
+
everything ftools can do, and better, I'm going to remove ftools in the
|
103
|
+
1.6.0 release.
|
104
104
|
|
105
105
|
== License
|
106
106
|
Ruby's
|
data/Rakefile
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
desc "Clean the build files from the pathname2 source"
|
6
|
+
task :clean do
|
7
|
+
Dir.chdir('ext') do
|
8
|
+
if RUBY_PLATFORM.match('mswin')
|
9
|
+
sh 'nmake distclean' if File.exists?('pathname2.so')
|
10
|
+
else
|
11
|
+
sh 'make distclean' if File.exists?('pathname2.so')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Build the pathname2 package on UNIX systems (but don't install it)"
|
17
|
+
task :build => [:clean] do
|
18
|
+
Dir.chdir('ext') do
|
19
|
+
ruby 'extconf.rb'
|
20
|
+
if RUBY_PLATFORM.match('mswin')
|
21
|
+
sh 'nmake'
|
22
|
+
else
|
23
|
+
sh 'make'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Install the pure Ruby version of the pathname2 package"
|
29
|
+
task :install do
|
30
|
+
cp 'lib/pathname2.rb', Config::CONFIG['sitelibdir']
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "Install the C version of the pathname2 package"
|
34
|
+
task :install_c => [:build] do
|
35
|
+
Dir.chdir('ext') do
|
36
|
+
if RUBY_PLATFORM.match('mswin')
|
37
|
+
sh 'nmake install'
|
38
|
+
else
|
39
|
+
sh 'make install'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "Run the test suite for the pure Ruby version"
|
45
|
+
Rake::TestTask.new('test') do |t|
|
46
|
+
t.libs << 'lib'
|
47
|
+
if RUBY_PLATFORM.match('mswin')
|
48
|
+
t.test_files = FileList['test/tc_pathname_win.rb']
|
49
|
+
else
|
50
|
+
t.test_files = FileList['test/tc_pathname.rb']
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Run the test suite for the C version."
|
55
|
+
Rake::TestTask.new('test_c') do |t|
|
56
|
+
task :test_c => :build
|
57
|
+
t.libs << 'ext'
|
58
|
+
t.libs.delete('lib')
|
59
|
+
if RUBY_PLATFORM.match('mswin')
|
60
|
+
t.test_files = FileList['test/tc_pathname_win.rb']
|
61
|
+
else
|
62
|
+
t.test_files = FileList['test/tc_pathname.rb']
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "Run the benchmark suite for the pure Ruby version"
|
67
|
+
task :benchmark do
|
68
|
+
sh 'ruby -Ilib examples/bench_pathname.rb'
|
69
|
+
end
|
70
|
+
|
71
|
+
desc "Run the benchmark suite for the C version"
|
72
|
+
task :benchmark_c => [:build] do
|
73
|
+
sh 'ruby -Iext examples/bench_pathname.rb c'
|
74
|
+
end
|
data/lib/pathname2.rb
CHANGED
@@ -57,7 +57,7 @@ class Pathname < String
|
|
57
57
|
include Windows::File
|
58
58
|
end
|
59
59
|
|
60
|
-
VERSION = '1.5.
|
60
|
+
VERSION = '1.5.2'
|
61
61
|
MAX_PATH = 260
|
62
62
|
|
63
63
|
# Creates and returns a new Pathname object.
|
@@ -107,24 +107,21 @@ class Pathname < String
|
|
107
107
|
# Returns a real (absolute) pathname of +self+ in the actual filesystem.
|
108
108
|
#
|
109
109
|
# Unlike most Pathname methods, this one assumes that the path actually
|
110
|
-
# exists on your filesystem.
|
110
|
+
# exists on your filesystem. If it doesn't, an error is raised. If a
|
111
|
+
# circular symlink is encountered a system error will be raised.
|
111
112
|
#
|
112
113
|
def realpath
|
113
|
-
File.stat(self)
|
114
|
+
File.stat(self) # Check to ensure that the path exists
|
115
|
+
|
114
116
|
if File.symlink?(self)
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
else
|
121
|
-
path = self.class.new(File.readlink(path))
|
122
|
-
end
|
123
|
-
end
|
124
|
-
else
|
125
|
-
path = self.class.new(File.dirname(self)) + path
|
117
|
+
file = self.dup
|
118
|
+
|
119
|
+
while true
|
120
|
+
file = File.join(File.dirname(file), File.readlink(file))
|
121
|
+
break unless File.symlink?(file)
|
126
122
|
end
|
127
|
-
|
123
|
+
|
124
|
+
self.class.new(file).clean
|
128
125
|
else
|
129
126
|
self.class.new(Dir.pwd) + self
|
130
127
|
end
|
@@ -861,3 +858,12 @@ module Kernel
|
|
861
858
|
instance_eval{ Pathname.new(yield) }
|
862
859
|
end
|
863
860
|
end
|
861
|
+
|
862
|
+
if $0 == __FILE__
|
863
|
+
path1 = '/dev/fd0'
|
864
|
+
path2 = 'link2'
|
865
|
+
|
866
|
+
path = Pathname.new(path1)
|
867
|
+
path = path.realpath
|
868
|
+
p path
|
869
|
+
end
|
data/test/tc_pathname.rb
CHANGED
@@ -1,24 +1,10 @@
|
|
1
1
|
##############################################################################
|
2
2
|
# tc_pathname.rb
|
3
3
|
#
|
4
|
-
# Test suite for the pathname package (Unix).
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Test suite for the pathname package (Unix). This test suite should be run
|
5
|
+
# via the Rake tasks, i.e. 'rake test_pr' to test the pure Ruby version, or
|
6
|
+
# 'rake test_c' to test the C version.
|
7
7
|
##############################################################################
|
8
|
-
Dir.chdir '..' if File.basename(Dir.pwd) == 'test'
|
9
|
-
|
10
|
-
# Test against the C extension if a 'c' is provided as an argument.
|
11
|
-
if ARGV[0] && ARGV[0].chomp.downcase == 'c'
|
12
|
-
$LOAD_PATH.unshift Dir.pwd + '/ext'
|
13
|
-
else
|
14
|
-
$LOAD_PATH.unshift Dir.pwd + '/lib'
|
15
|
-
end
|
16
|
-
|
17
|
-
if PLATFORM.match('mswin')
|
18
|
-
STDERR.puts("Please run 'tc_pathname_win.rb' instead.")
|
19
|
-
exit
|
20
|
-
end
|
21
|
-
|
22
8
|
require 'pathname2'
|
23
9
|
require 'test/unit'
|
24
10
|
|
@@ -77,7 +63,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
77
63
|
end
|
78
64
|
|
79
65
|
def test_version
|
80
|
-
assert_equal('1.5.
|
66
|
+
assert_equal('1.5.2', Pathname::VERSION)
|
81
67
|
end
|
82
68
|
|
83
69
|
def test_file_url_path
|
@@ -100,8 +86,13 @@ class TC_Pathname < Test::Unit::TestCase
|
|
100
86
|
when /sunos|solaris/i
|
101
87
|
path1 = '/dev/null'
|
102
88
|
path2 = '/dev/stdin'
|
89
|
+
path3 = '/dev/fd0' # Multiple symlinks
|
90
|
+
|
103
91
|
assert_equal('/devices/pseudo/mm@0:null', Pathname.new(path1).realpath)
|
104
92
|
assert_equal('/dev/fd/0', Pathname.new(path2).realpath)
|
93
|
+
assert_equal('/devices/pci@1f,0/isa@7/dma@0,0/floppy@0,3f0:c',
|
94
|
+
Pathname.new(path3).realpath
|
95
|
+
)
|
105
96
|
end
|
106
97
|
end
|
107
98
|
|
@@ -231,6 +222,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
231
222
|
Dir.pwd + '/CHANGES',
|
232
223
|
Dir.pwd + '/MANIFEST',
|
233
224
|
Dir.pwd + '/README',
|
225
|
+
Dir.pwd + '/Rakefile',
|
234
226
|
Dir.pwd + '/examples',
|
235
227
|
Dir.pwd + '/ext',
|
236
228
|
Dir.pwd + '/install.rb',
|
@@ -249,7 +241,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
249
241
|
|
250
242
|
assert_equal(
|
251
243
|
[
|
252
|
-
'CHANGES', 'MANIFEST', 'README', 'examples', 'ext',
|
244
|
+
'CHANGES', 'MANIFEST', 'README', 'Rakefile', 'examples', 'ext',
|
253
245
|
'install.rb', 'lib', 'pathname2.gemspec', 'test'
|
254
246
|
],
|
255
247
|
children.sort
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: pathname2
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.5.
|
7
|
-
date:
|
6
|
+
version: 1.5.2
|
7
|
+
date: 2007-03-09 00:00:00 -07:00
|
8
8
|
summary: An alternate implementation of the Pathname class
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- CHANGES
|
34
34
|
- MANIFEST
|
35
35
|
- README
|
36
|
+
- Rakefile
|
36
37
|
- test/tc_pathname.rb
|
37
38
|
- test/tc_pathname_win.rb
|
38
39
|
test_files:
|