@@ -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