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 'rugged'
|
||||
|
||||
@@ -11,23 +10,53 @@ module Linguist
|
||||
class 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
|
||||
def initialize(repo, commit_oid, existing_stats = nil)
|
||||
def initialize(repo, commit_oid)
|
||||
@repository = repo
|
||||
@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
|
||||
|
||||
# Public: Returns a breakdown of language stats.
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => { Language['Ruby'] => 46319,
|
||||
# Language['JavaScript'] => 258 }
|
||||
# # => { 'Ruby' => 46319,
|
||||
# 'JavaScript' => 258 }
|
||||
#
|
||||
# Returns a Hash of Language keys and Integer size values.
|
||||
# Returns a Hash of language names and Integer size values.
|
||||
def languages
|
||||
@sizes ||= begin
|
||||
sizes = Hash.new { 0 }
|
||||
@@ -40,7 +69,7 @@ module Linguist
|
||||
|
||||
# Public: Get primary Language of repository.
|
||||
#
|
||||
# Returns a Language
|
||||
# Returns a language name
|
||||
def language
|
||||
@language ||= begin
|
||||
primary = languages.max_by { |(_, size)| size }
|
||||
@@ -56,6 +85,8 @@ module Linguist
|
||||
end
|
||||
|
||||
# Public: Return the language breakdown of this repository by file
|
||||
#
|
||||
# Returns a map of language names => [filenames...]
|
||||
def breakdown_by_file
|
||||
@file_breakdown ||= begin
|
||||
breakdown = Hash.new { |h,k| h[k] = Array.new }
|
||||
@@ -66,6 +97,23 @@ module Linguist
|
||||
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)
|
||||
file_map = cache ? cache.dup : {}
|
||||
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
|
||||
@@ -96,15 +144,5 @@ module Linguist
|
||||
|
||||
file_map
|
||||
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
|
||||
|
||||
@@ -40,8 +40,7 @@ class TestRepository < Test::Unit::TestCase
|
||||
assert old_repo.languages['Ruby'] > 10_000
|
||||
assert old_repo.size > 30_000
|
||||
|
||||
old_cache = [old_commit, old_repo.cache]
|
||||
new_repo = Linguist::Repository.new(rugged_repository, master_oid, old_cache)
|
||||
new_repo = Linguist::Repository.incremental(rugged_repository, master_oid, old_commit, old_repo.cache)
|
||||
|
||||
assert new_repo.languages['Ruby'] > old_repo.languages['Ruby']
|
||||
assert new_repo.size > old_repo.size
|
||||
|
||||
Reference in New Issue
Block a user