Cache globbed paths in front matter defaults (#7345)
Merge pull request 7345
This commit is contained in:
		
							parent
							
								
									46be718ef6
								
							
						
					
					
						commit
						b4dcdd42f8
					
				| 
						 | 
				
			
			@ -10,6 +10,11 @@ module Jekyll
 | 
			
		|||
    # Initializes a new instance.
 | 
			
		||||
    def initialize(site)
 | 
			
		||||
      @site = site
 | 
			
		||||
      reset
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def reset
 | 
			
		||||
      @glob_cache = {}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def update_deprecated_types(set)
 | 
			
		||||
| 
						 | 
				
			
			@ -98,28 +103,35 @@ module Jekyll
 | 
			
		|||
      applies_type?(scope, type) && applies_path?(scope, path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # rubocop:disable Metrics/AbcSize
 | 
			
		||||
    def applies_path?(scope, path)
 | 
			
		||||
      return true if !scope.key?("path") || scope["path"].empty?
 | 
			
		||||
 | 
			
		||||
      sanitized_path = Pathname.new(sanitize_path(path))
 | 
			
		||||
      site_path      = Pathname.new(@site.source)
 | 
			
		||||
      rel_scope_path = Pathname.new(scope["path"])
 | 
			
		||||
      abs_scope_path = File.join(@site.source, rel_scope_path)
 | 
			
		||||
 | 
			
		||||
      if scope["path"].to_s.include?("*")
 | 
			
		||||
        Dir.glob(abs_scope_path).each do |scope_path|
 | 
			
		||||
          scope_path = Pathname.new(scope_path).relative_path_from(site_path)
 | 
			
		||||
          scope_path = strip_collections_dir(scope_path)
 | 
			
		||||
          Jekyll.logger.debug "Globbed Scope Path:", scope_path
 | 
			
		||||
          return true if path_is_subpath?(sanitized_path, scope_path)
 | 
			
		||||
        end
 | 
			
		||||
        false
 | 
			
		||||
        glob_scope(sanitized_path, rel_scope_path)
 | 
			
		||||
      else
 | 
			
		||||
        path_is_subpath?(sanitized_path, strip_collections_dir(rel_scope_path))
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    # rubocop:enable Metrics/AbcSize
 | 
			
		||||
 | 
			
		||||
    def glob_scope(sanitized_path, rel_scope_path)
 | 
			
		||||
      site_source    = Pathname.new(@site.source)
 | 
			
		||||
      abs_scope_path = site_source.join(rel_scope_path).to_s
 | 
			
		||||
 | 
			
		||||
      glob_cache(abs_scope_path).each do |scope_path|
 | 
			
		||||
        scope_path = Pathname.new(scope_path).relative_path_from(site_source)
 | 
			
		||||
        scope_path = strip_collections_dir(scope_path)
 | 
			
		||||
        Jekyll.logger.debug "Globbed Scope Path:", scope_path
 | 
			
		||||
        return true if path_is_subpath?(sanitized_path, scope_path)
 | 
			
		||||
      end
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def glob_cache(path)
 | 
			
		||||
      @glob_cache[path] ||= Dir.glob(path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def path_is_subpath?(path, parent_path)
 | 
			
		||||
      path.ascend do |ascended_path|
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,8 @@ module Jekyll
 | 
			
		|||
      Jekyll.logger.info @liquid_renderer.stats_table
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # rubocop:disable Metrics/MethodLength
 | 
			
		||||
    #
 | 
			
		||||
    # Reset Site details.
 | 
			
		||||
    #
 | 
			
		||||
    # Returns nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -104,12 +106,14 @@ module Jekyll
 | 
			
		|||
      @regenerator.clear_cache
 | 
			
		||||
      @liquid_renderer.reset
 | 
			
		||||
      @site_cleaner = nil
 | 
			
		||||
      frontmatter_defaults.reset
 | 
			
		||||
 | 
			
		||||
      raise ArgumentError, "limit_posts must be a non-negative number" if limit_posts.negative?
 | 
			
		||||
 | 
			
		||||
      Jekyll::Cache.clear_if_config_changed config
 | 
			
		||||
      Jekyll::Hooks.trigger :site, :after_reset, self
 | 
			
		||||
    end
 | 
			
		||||
    # rubocop:enable Metrics/MethodLength
 | 
			
		||||
 | 
			
		||||
    # Load necessary libraries, plugins, converters, and generators.
 | 
			
		||||
    #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue