50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # Gitaly note: JV: not sure what to make of this class. Why does it use
 | |
| # the full disk path of the repository to look up attributes This is
 | |
| # problematic in Gitaly, because Gitaly hides the full disk path to the
 | |
| # repository from gitlab-ce.
 | |
| 
 | |
| module Gitlab
 | |
|   module Git
 | |
|     # Parses gitattributes at `$GIT_DIR/info/attributes`
 | |
|     #
 | |
|     # Unlike Rugged this parser only needs a single IO call (a call to `open`),
 | |
|     # vastly reducing the time spent in extracting attributes.
 | |
|     #
 | |
|     # This class _only_ supports parsing the attributes file located at
 | |
|     # `$GIT_DIR/info/attributes` as GitLab doesn't use any other files
 | |
|     # (`.gitattributes` is copied to this particular path).
 | |
|     #
 | |
|     # Basic usage:
 | |
|     #
 | |
|     #     attributes = Gitlab::Git::InfoAttributes.new(some_repo.path)
 | |
|     #
 | |
|     #     attributes.attributes('README.md') # => { "eol" => "lf }
 | |
|     class InfoAttributes
 | |
|       delegate :attributes, :patterns, to: :parser
 | |
| 
 | |
|       # path - The path to the Git repository.
 | |
|       def initialize(path)
 | |
|         @repo_path = File.expand_path(path)
 | |
|       end
 | |
| 
 | |
|       def parser
 | |
|         @parser ||= begin
 | |
|           if File.exist?(attributes_path)
 | |
|             File.open(attributes_path, 'r') do |file_handle|
 | |
|               AttributesParser.new(file_handle)
 | |
|             end
 | |
|           else
 | |
|             AttributesParser.new("")
 | |
|           end
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def attributes_path
 | |
|         @attributes_path ||= File.join(@repo_path, 'info/attributes')
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |