@@ -384,16 +384,23 @@ impl Source {
384384}
385385
386386impl ExternalPlugin {
387- fn match_globs ( dir : & Path , pattern : & str , files : & mut Vec < PathBuf > ) -> Result < bool > {
387+ fn match_globs ( dir : & Path , patterns : & [ String ] , files : & mut Vec < PathBuf > ) -> Result < bool > {
388+ let debug = || {
389+ patterns
390+ . iter ( )
391+ . map ( |p| format ! ( "`{}`" , p) )
392+ . collect :: < Vec < _ > > ( )
393+ . join ( ", " )
394+ } ;
388395 let mut matched = false ;
389- for entry in globwalk:: GlobWalkerBuilder :: new ( dir, & pattern )
396+ for entry in globwalk:: GlobWalkerBuilder :: from_patterns ( dir, patterns )
390397 . sort_by ( |a, b| a. file_name ( ) . cmp ( b. file_name ( ) ) )
391398 . build ( )
392- . with_context ( s ! ( "failed to parse glob pattern `{}` " , pattern ) ) ?
399+ . with_context ( s ! ( "failed to parse glob patterns: {} " , debug ( ) ) ) ?
393400 {
394401 files. push (
395402 entry
396- . with_context ( s ! ( "failed to read path matched by pattern `{}` " , & pattern ) ) ?
403+ . with_context ( s ! ( "failed to read path matched by patterns: {} " , debug ( ) ) ) ?
397404 . into_path ( ) ,
398405 ) ;
399406 matched = true ;
@@ -462,21 +469,23 @@ impl ExternalPlugin {
462469
463470 // If the plugin defined what files to use, we do all of them.
464471 if let Some ( uses) = & uses {
465- for u in uses {
466- let pattern = hbs
467- . render_template ( u, & data)
468- . with_context ( s ! ( "failed to render template `{}`" , u) ) ?;
469- if !Self :: match_globs ( dir, & pattern, & mut files) ? {
470- bail ! ( "failed to find any files matching `{}`" , & pattern) ;
471- } ;
472+ let patterns = uses
473+ . iter ( )
474+ . map ( |u| {
475+ hbs. render_template ( u, & data)
476+ . with_context ( s ! ( "failed to render template `{}`" , u) )
477+ } )
478+ . collect :: < Result < Vec < _ > > > ( ) ?;
479+ if !Self :: match_globs ( dir, & patterns, & mut files) ? {
480+ bail ! ( "failed to find any files matching any of `{:?}`" , patterns) ;
472481 }
473482 // Otherwise we try to figure out which files to use...
474483 } else {
475484 for g in global_matches {
476485 let pattern = hbs
477486 . render_template ( g, & data)
478487 . with_context ( s ! ( "failed to render template `{}`" , g) ) ?;
479- if Self :: match_globs ( dir, & pattern, & mut files) ? {
488+ if Self :: match_globs ( dir, & [ pattern] , & mut files) ? {
480489 break ;
481490 }
482491 }
0 commit comments