file-find 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/CHANGES +7 -0
  2. data/README +5 -0
  3. data/lib/file/find.rb +51 -22
  4. data/test/test_file_find.rb +23 -4
  5. metadata +7 -7
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.3.1 - 9-Jan-2008
2
+ * Now defaults to using Etc instead of Sys::Admin for implementations
3
+ that don't support building C extensions, e.g. JRuby.
4
+ * Updated the test suite to work with JRuby.
5
+ * Minor optimizations for symbolic perms and atime/ctime/mtime checks.
6
+ Thanks go in part to Ryan Davis' flay library.
7
+
1
8
  == 0.3.0 - 30-Dec-2008
2
9
  * Added support for FileTest operations. All options passed to the constructor
3
10
  that end with '?' are now validated and treated as FileTest operations.
data/README CHANGED
@@ -87,6 +87,11 @@ The 'user' and 'group' options are not currently supported on MS Windows.
87
87
  This can be supported, but will require changes in the win32-file and
88
88
  win32-file-stat libraries (which would then become dependencies).
89
89
 
90
+ There are 3 test failures with JRuby, all related to the 'perm' option. I
91
+ have not been able to reduce them to a simple test case and discern the
92
+ exact cause of the failures, though I suspect a bug in the JRuby
93
+ implementation of File.chmod.
94
+
90
95
  = Bugs
91
96
  None that I'm aware of. Please log any bug reports on the project page at
92
97
  http://www.rubyforge.org/projects/shards.
data/lib/file/find.rb CHANGED
@@ -1,12 +1,17 @@
1
1
  require 'date'
2
2
  require 'rbconfig'
3
- require 'sys/admin'
4
- include Config
5
- include Sys
3
+
4
+ # For alternate implementations of Ruby, such as JRuby, that cannot
5
+ # build C extensions fall back to the Etc module.
6
+ begin
7
+ require 'sys/admin'
8
+ rescue LoadError
9
+ require 'etc'
10
+ end
6
11
 
7
12
  class File::Find
8
13
  # The version of this library
9
- VERSION = '0.3.0'
14
+ VERSION = '0.3.1'
10
15
 
11
16
  # :stopdoc:
12
17
  VALID_OPTIONS = %w/
@@ -226,7 +231,7 @@ class File::Find
226
231
  next
227
232
  rescue Errno::ELOOP
228
233
  stat_method = :lstat # Handle recursive symlinks
229
- retry
234
+ retry if stat_method.to_s != 'lstat'
230
235
  end
231
236
 
232
237
  glob = File.join(File.dirname(file), @name)
@@ -288,22 +293,23 @@ class File::Find
288
293
  next unless file_test
289
294
  end
290
295
 
291
- if @atime
296
+ if @atime || @ctime || @mtime
292
297
  date1 = Date.parse(Time.now.to_s)
293
- date2 = Date.parse(stat_info.atime.to_s)
294
- next unless (date1 - date2).numerator == @atime
295
- end
296
298
 
297
- if @ctime
298
- date1 = Date.parse(Time.now.to_s)
299
- date2 = Date.parse(stat_info.ctime.to_s)
300
- next unless (date1 - date2).numerator == @ctime
301
- end
299
+ if @atime
300
+ date2 = Date.parse(stat_info.atime.to_s)
301
+ next unless (date1 - date2).numerator == @atime
302
+ end
302
303
 
303
- if @mtime
304
- date1 = Date.parse(Time.now.to_s)
305
- date2 = Date.parse(stat_info.mtime.to_s)
306
- next unless (date1 - date2).numerator == @mtime
304
+ if @ctime
305
+ date2 = Date.parse(stat_info.ctime.to_s)
306
+ next unless (date1 - date2).numerator == @ctime
307
+ end
308
+
309
+ if @mtime
310
+ date2 = Date.parse(stat_info.mtime.to_s)
311
+ next unless (date1 - date2).numerator == @mtime
312
+ end
307
313
  end
308
314
 
309
315
  if @ftype
@@ -312,13 +318,13 @@ class File::Find
312
318
 
313
319
  if @group
314
320
  if @group.is_a?(String)
315
- next unless Admin.get_group(stat_info.gid).name == @group
321
+ next unless get_group(stat_info.gid).name == @group
316
322
  else
317
323
  next unless stat_info.gid == @group
318
324
  end
319
325
  end
320
326
 
321
- unless CONFIG['host_os'] =~ /windows|mswin/i
327
+ unless Config::CONFIG['host_os'] =~ /windows|mswin/i
322
328
  if @inum
323
329
  next unless stat_info.ino == @inum
324
330
  end
@@ -330,7 +336,8 @@ class File::Find
330
336
  #
331
337
  if @perm
332
338
  if @perm.is_a?(String)
333
- next unless stat_info.mode & sym2oct(@perm) == sym2oct(@perm)
339
+ octal_perm = sym2oct(@perm)
340
+ next unless stat_info.mode & octal_perm == octal_perm
334
341
  else
335
342
  next unless sprintf("%o", stat_info.mode & 07777) == @perm.to_s
336
343
  end
@@ -357,7 +364,7 @@ class File::Find
357
364
 
358
365
  if @user
359
366
  if @user.is_a?(String)
360
- next unless Admin.get_user(stat_info.uid).name == @user
367
+ next unless get_user(stat_info.uid).name == @user
361
368
  else
362
369
  next unless stat_info.uid == @user
363
370
  end
@@ -442,4 +449,26 @@ class File::Find
442
449
 
443
450
  perm
444
451
  end
452
+
453
+ # Returns the group object based on the group id. Implemented for the
454
+ # sake of platforms that cannot build extensions, such as JRuby.
455
+ #
456
+ def get_group(gid)
457
+ if defined? Sys::Admin
458
+ Sys::Admin.get_group(gid)
459
+ else
460
+ Etc.getgrgid(gid)
461
+ end
462
+ end
463
+
464
+ # Returns the user object based on the group id. Implemented for the
465
+ # sake of platforms that cannot build extensions, such as JRuby.
466
+ #
467
+ def get_user(uid)
468
+ if defined? Sys::Admin
469
+ Sys::Admin.get_user(uid)
470
+ else
471
+ Etc.getpwuid(uid)
472
+ end
473
+ end
445
474
  end
@@ -11,16 +11,32 @@ require 'test/unit'
11
11
  require 'fileutils'
12
12
  require 'file/find'
13
13
  require 'rbconfig'
14
- require 'sys/admin'
14
+
15
+ begin
16
+ require 'sys/admin'
17
+ rescue LoadError
18
+ require 'etc'
19
+ end
20
+
15
21
  include Config
16
22
  include FileUtils
17
23
 
18
24
  class TC_File_Find < Test::Unit::TestCase
19
25
  def self.startup
20
26
  Dir.chdir('test') unless File.basename(Dir.pwd) == 'test'
27
+
21
28
  @@windows = CONFIG['host_os'] =~ /windows|mswin/i
22
- @@loguser = Sys::Admin.get_user(Admin.get_login) unless @@windows
23
- @@logroup = Sys::Admin.get_group(@@loguser.gid) unless @@windows
29
+ @@jruby = RUBY_PLATFORM.match('java')
30
+
31
+ unless @@windows
32
+ if @@jruby
33
+ @@loguser = Etc.getpwnam(Etc.getlogin)
34
+ @@logroup = Etc.getgrgid(@@loguser.gid)
35
+ else
36
+ @@loguser = Sys::Admin.get_user(Sys::Admin.get_login)
37
+ @@logroup = Sys::Admin.get_group(@@loguser.gid)
38
+ end
39
+ end
24
40
  end
25
41
 
26
42
  def setup
@@ -52,7 +68,7 @@ class TC_File_Find < Test::Unit::TestCase
52
68
  end
53
69
 
54
70
  def test_version
55
- assert_equal('0.3.0', File::Find::VERSION)
71
+ assert_equal('0.3.1', File::Find::VERSION)
56
72
  end
57
73
 
58
74
  def test_path
@@ -118,6 +134,8 @@ class TC_File_Find < Test::Unit::TestCase
118
134
  end
119
135
 
120
136
  def test_filetest
137
+ omit_if(@@windows && @@jruby, "Skipping file test on JRuby/Windows")
138
+
121
139
  rule = File::Find.new(:name => "*.doc", :writable? => true)
122
140
  File.chmod(0644, @file4)
123
141
 
@@ -406,6 +424,7 @@ class TC_File_Find < Test::Unit::TestCase
406
424
 
407
425
  def self.shutdown
408
426
  @@windows = nil
427
+ @@jruby = nil
409
428
  @@loguser = nil unless @@windows
410
429
  @@logroup = nil unless @@windows
411
430
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file-find
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Berger
@@ -9,28 +9,28 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-30 00:00:00 -07:00
12
+ date: 2009-01-09 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: sys-admin
16
+ name: test-unit
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.4.4
23
+ version: 2.0.2
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: test-unit
26
+ name: sys-admin
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.2
33
+ version: 1.4.4
34
34
  version:
35
35
  description: A better way to find files
36
36
  email: djberg96@gmail.com
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  requirements: []
72
72
 
73
73
  rubyforge_project: shards
74
- rubygems_version: 1.2.0
74
+ rubygems_version: 1.3.1
75
75
  signing_key:
76
76
  specification_version: 2
77
77
  summary: A better way to find files