mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	DOCS
This commit is contained in:
		@@ -1,4 +1,3 @@
 | 
				
			|||||||
require 'linguist/file_blob'
 | 
					 | 
				
			||||||
require 'linguist/lazy_blob'
 | 
					require 'linguist/lazy_blob'
 | 
				
			||||||
require 'rugged'
 | 
					require 'rugged'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11,23 +10,53 @@ module Linguist
 | 
				
			|||||||
  class Repository
 | 
					  class Repository
 | 
				
			||||||
    attr_reader :repository
 | 
					    attr_reader :repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: Initialize a new Repository
 | 
					    # Public: Create a new Repository based on the stats of
 | 
				
			||||||
 | 
					    # an existing one
 | 
				
			||||||
 | 
					    def self.incremental(repo, commit_oid, old_commit_oid, old_stats)
 | 
				
			||||||
 | 
					      repo = self.new(repo, commit_oid)
 | 
				
			||||||
 | 
					      repo.load_existing_stats(old_commit_oid, old_stats)
 | 
				
			||||||
 | 
					      repo
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Initialize a new Repository to be analyzed for language
 | 
				
			||||||
 | 
					    # data
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # repo - a Rugged::Repository object
 | 
				
			||||||
 | 
					    # commit_oid - the sha1 of the commit that will be analyzed;
 | 
				
			||||||
 | 
					    #              this is usually the master branch
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns a Repository
 | 
					    # Returns a Repository
 | 
				
			||||||
    def initialize(repo, commit_oid, existing_stats = nil)
 | 
					    def initialize(repo, commit_oid)
 | 
				
			||||||
      @repository = repo
 | 
					      @repository = repo
 | 
				
			||||||
      @commit_oid = commit_oid
 | 
					      @commit_oid = commit_oid
 | 
				
			||||||
      @old_commit_oid, @old_stats = existing_stats if existing_stats
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Load the results of a previous analysis on this repository
 | 
				
			||||||
 | 
					    # to speed up the new scan.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # The new analysis will be performed incrementally as to only take
 | 
				
			||||||
 | 
					    # into account the file changes since the last time the repository
 | 
				
			||||||
 | 
					    # was scanned
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # old_commit_oid - the sha1 of the commit that was previously analyzed
 | 
				
			||||||
 | 
					    # old_stats - the result of the previous analysis, obtained by calling
 | 
				
			||||||
 | 
					    #             Repository#cache on the old repository
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns nothing
 | 
				
			||||||
 | 
					    def load_existing_stats(old_commit_oid, old_stats)
 | 
				
			||||||
 | 
					      @old_commit_oid = old_commit_oid
 | 
				
			||||||
 | 
					      @old_stats = old_stats
 | 
				
			||||||
 | 
					      nil
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: Returns a breakdown of language stats.
 | 
					    # Public: Returns a breakdown of language stats.
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Examples
 | 
					    # Examples
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    #   # => { Language['Ruby'] => 46319,
 | 
					    #   # => { 'Ruby' => 46319,
 | 
				
			||||||
    #          Language['JavaScript'] => 258 }
 | 
					    #          'JavaScript' => 258 }
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns a Hash of Language keys and Integer size values.
 | 
					    # Returns a Hash of language names and Integer size values.
 | 
				
			||||||
    def languages
 | 
					    def languages
 | 
				
			||||||
      @sizes ||= begin
 | 
					      @sizes ||= begin
 | 
				
			||||||
        sizes = Hash.new { 0 }
 | 
					        sizes = Hash.new { 0 }
 | 
				
			||||||
@@ -40,7 +69,7 @@ module Linguist
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Public: Get primary Language of repository.
 | 
					    # Public: Get primary Language of repository.
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns a Language
 | 
					    # Returns a language name
 | 
				
			||||||
    def language
 | 
					    def language
 | 
				
			||||||
      @language ||= begin
 | 
					      @language ||= begin
 | 
				
			||||||
        primary = languages.max_by { |(_, size)| size }
 | 
					        primary = languages.max_by { |(_, size)| size }
 | 
				
			||||||
@@ -56,6 +85,8 @@ module Linguist
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: Return the language breakdown of this repository by file
 | 
					    # Public: Return the language breakdown of this repository by file
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a map of language names => [filenames...]
 | 
				
			||||||
    def breakdown_by_file
 | 
					    def breakdown_by_file
 | 
				
			||||||
      @file_breakdown ||= begin
 | 
					      @file_breakdown ||= begin
 | 
				
			||||||
        breakdown = Hash.new { |h,k| h[k] = Array.new }
 | 
					        breakdown = Hash.new { |h,k| h[k] = Array.new }
 | 
				
			||||||
@@ -66,6 +97,23 @@ module Linguist
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Return the cached results of the analysis
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # This is a per-file breakdown that can be passed to other instances
 | 
				
			||||||
 | 
					    # of Linguist::Repository to perform incremental scans
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a map of filename => [language, size]
 | 
				
			||||||
 | 
					    def cache
 | 
				
			||||||
 | 
					      @cache ||= begin
 | 
				
			||||||
 | 
					        if @old_commit_oid == @commit_oid
 | 
				
			||||||
 | 
					          @old_stats
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          compute_stats(@old_commit_oid, @commit_oid, @old_stats)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected
 | 
				
			||||||
    def compute_stats(old_commit_oid, commit_oid, cache = nil)
 | 
					    def compute_stats(old_commit_oid, commit_oid, cache = nil)
 | 
				
			||||||
      file_map = cache ? cache.dup : {}
 | 
					      file_map = cache ? cache.dup : {}
 | 
				
			||||||
      old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
 | 
					      old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
 | 
				
			||||||
@@ -96,15 +144,5 @@ module Linguist
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      file_map
 | 
					      file_map
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					 | 
				
			||||||
    def cache
 | 
					 | 
				
			||||||
      @cache ||= begin
 | 
					 | 
				
			||||||
        if @old_commit_oid == @commit_oid
 | 
					 | 
				
			||||||
          @old_stats
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          compute_stats(@old_commit_oid, @commit_oid, @old_stats)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,8 +40,7 @@ class TestRepository < Test::Unit::TestCase
 | 
				
			|||||||
    assert old_repo.languages['Ruby'] > 10_000
 | 
					    assert old_repo.languages['Ruby'] > 10_000
 | 
				
			||||||
    assert old_repo.size > 30_000
 | 
					    assert old_repo.size > 30_000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    old_cache = [old_commit, old_repo.cache]
 | 
					    new_repo = Linguist::Repository.incremental(rugged_repository, master_oid, old_commit, old_repo.cache)
 | 
				
			||||||
    new_repo = Linguist::Repository.new(rugged_repository, master_oid, old_cache)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert new_repo.languages['Ruby'] > old_repo.languages['Ruby']
 | 
					    assert new_repo.languages['Ruby'] > old_repo.languages['Ruby']
 | 
				
			||||||
    assert new_repo.size > old_repo.size
 | 
					    assert new_repo.size > old_repo.size
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user