@@ -112,11 +112,17 @@ def gather_files files
112112
113113 file_list = normalized_file_list files , true , @options . exclude
114114
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
120126 end
121127
122128 ##
@@ -254,11 +260,11 @@ def parse_dot_doc_file in_dir, filename
254260 # read and strip comments
255261 patterns = File . read ( filename ) . gsub ( /#.*/ , '' )
256262
257- result = [ ]
263+ result = { }
258264
259265 patterns . split ( ' ' ) . each do |patt |
260266 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 )
262268 end
263269
264270 result
@@ -278,21 +284,21 @@ def parse_dot_doc_file in_dir, filename
278284
279285 def normalized_file_list ( relative_files , force_doc = false ,
280286 exclude_pattern = nil )
281- file_list = [ ]
287+ file_list = { }
282288
283289 relative_files . each do |rel_file_name |
290+ rel_file_name = rel_file_name . sub ( /^\. \/ / , '' )
284291 next if rel_file_name . end_with? 'created.rid'
285292 next if exclude_pattern && exclude_pattern =~ rel_file_name
286293 stat = File . stat rel_file_name rescue next
287294
288295 case type = stat . ftype
289296 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 ) )
292299
293300 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
296302 end
297303 when "directory" then
298304 next if rel_file_name == "CVS" || rel_file_name == ".svn"
@@ -303,16 +309,16 @@ def normalized_file_list(relative_files, force_doc = false,
303309 dot_doc = File . join rel_file_name , RDoc ::DOT_DOC_FILENAME
304310
305311 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 ) )
307313 else
308- file_list << list_files_in_directory ( rel_file_name )
314+ file_list . update ( list_files_in_directory ( rel_file_name ) )
309315 end
310316 else
311317 warn "rdoc can't parse the #{ type } #{ rel_file_name } "
312318 end
313319 end
314320
315- file_list . flatten
321+ file_list
316322 end
317323
318324 ##
@@ -427,7 +433,7 @@ def parse_files files
427433 # files for emacs and vim.
428434
429435 def remove_unparseable files
430- files . reject do |file |
436+ files . reject do |file , * |
431437 file =~ /\. (?:class|eps|erb|scpt\. txt|svg|ttf|yml)$/i or
432438 ( file =~ /tags$/i and
433439 open ( file , 'rb' ) { |io |
0 commit comments