@@ -112,11 +112,17 @@ def gather_files files
112
112
113
113
file_list = normalized_file_list files , true , @options . exclude
114
114
115
- file_list = file_list . uniq
116
-
117
- file_list = remove_unparseable file_list
118
-
119
- file_list . sort
115
+ file_list = remove_unparseable ( file_list )
116
+
117
+ if file_list . count { |name , mtime |
118
+ file_list [ name ] = @last_modified [ name ] unless mtime
119
+ mtime
120
+ } > 0
121
+ @last_modified . replace file_list
122
+ file_list . keys . sort
123
+ else
124
+ [ ]
125
+ end
120
126
end
121
127
122
128
##
@@ -254,11 +260,11 @@ def parse_dot_doc_file in_dir, filename
254
260
# read and strip comments
255
261
patterns = File . read ( filename ) . gsub ( /#.*/ , '' )
256
262
257
- result = [ ]
263
+ result = { }
258
264
259
265
patterns . split . each do |patt |
260
266
candidates = Dir . glob ( File . join ( in_dir , patt ) )
261
- result . concat normalized_file_list ( candidates , false , @options . exclude )
267
+ result . update normalized_file_list ( candidates , false , @options . exclude )
262
268
end
263
269
264
270
result
@@ -278,21 +284,21 @@ def parse_dot_doc_file in_dir, filename
278
284
279
285
def normalized_file_list ( relative_files , force_doc = false ,
280
286
exclude_pattern = nil )
281
- file_list = [ ]
287
+ file_list = { }
282
288
283
289
relative_files . each do |rel_file_name |
290
+ rel_file_name = rel_file_name . sub ( /^\. \/ / , '' )
284
291
next if rel_file_name . end_with? 'created.rid'
285
292
next if exclude_pattern && exclude_pattern =~ rel_file_name
286
293
stat = File . stat rel_file_name rescue next
287
294
288
295
case type = stat . ftype
289
296
when "file" then
290
- next if last_modified = @last_modified [ rel_file_name ] and
291
- stat . mtime . to_i <= last_modified . to_i
297
+ mtime = ( stat . mtime unless ( last_modified = @last_modified [ rel_file_name ] and
298
+ stat . mtime . to_i <= last_modified . to_i ) )
292
299
293
300
if force_doc or RDoc ::Parser . can_parse ( rel_file_name ) then
294
- file_list << rel_file_name . sub ( /^\. \/ / , '' )
295
- @last_modified [ rel_file_name ] = stat . mtime
301
+ file_list [ rel_file_name ] = mtime
296
302
end
297
303
when "directory" then
298
304
next if rel_file_name == "CVS" || rel_file_name == ".svn"
@@ -303,16 +309,16 @@ def normalized_file_list(relative_files, force_doc = false,
303
309
dot_doc = File . join rel_file_name , RDoc ::DOT_DOC_FILENAME
304
310
305
311
if File . file? dot_doc then
306
- file_list << parse_dot_doc_file ( rel_file_name , dot_doc )
312
+ file_list . update ( parse_dot_doc_file ( rel_file_name , dot_doc ) )
307
313
else
308
- file_list << list_files_in_directory ( rel_file_name )
314
+ file_list . update ( list_files_in_directory ( rel_file_name ) )
309
315
end
310
316
else
311
317
warn "rdoc can't parse the #{ type } #{ rel_file_name } "
312
318
end
313
319
end
314
320
315
- file_list . flatten
321
+ file_list
316
322
end
317
323
318
324
##
@@ -427,7 +433,7 @@ def parse_files files
427
433
# files for emacs and vim.
428
434
429
435
def remove_unparseable files
430
- files . reject do |file |
436
+ files . reject do |file , * |
431
437
file =~ /\. (?:class|eps|erb|scpt\. txt|svg|ttf|yml)$/i or
432
438
( file =~ /tags$/i and
433
439
open ( file , 'rb' ) { |io |
0 commit comments