From d0cf88355828d78a59d29101e4f01e35aec2900e Mon Sep 17 00:00:00 2001 From: The rugged tests are fragile Date: Thu, 11 Sep 2014 13:22:24 +0200 Subject: [PATCH 1/4] Use rugged 0.21.1b0 --- Gemfile | 1 + github-linguist.gemspec | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 851fabc2..ac877cb6 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,3 @@ source 'https://rubygems.org' gemspec +gem 'rugged', '0.21.1b0' diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 936550f3..d4c2337a 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -17,7 +17,6 @@ Gem::Specification.new do |s| s.add_dependency 'escape_utils', '~> 1.0.1' s.add_dependency 'mime-types', '~> 1.19' s.add_dependency 'pygments.rb', '~> 0.6.0' - s.add_dependency 'rugged', '~> 0.21.0' s.add_development_dependency 'json' s.add_development_dependency 'mocha' From 16c1aa2845106b439cd10e6e0c1232112be087af Mon Sep 17 00:00:00 2001 From: The rugged tests are fragile Date: Thu, 11 Sep 2014 13:39:53 +0200 Subject: [PATCH 2/4] Fetch the attributes test branch in Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3a5791da..17274d17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ before_install: - git fetch origin master:master - git fetch origin v2.0.0:v2.0.0 + - git fetch origin test/attributes:test/attributes - sudo apt-get install libicu-dev -y - gem update --system 2.1.11 rvm: From 3d39e842eca0913ba5ec385429496ceacc3699f8 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 10 Sep 2014 16:59:43 +0200 Subject: [PATCH 3/4] Load Git Attributes for Linguist-specific overrides --- lib/linguist/lazy_blob.rb | 24 ++++++++++++++++++++++++ lib/linguist/repository.rb | 6 +++++- test/test_repository.rb | 14 ++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index bb262241..c7031283 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -1,8 +1,13 @@ require 'linguist/blob_helper' +require 'linguist/language' require 'rugged' module Linguist class LazyBlob + GIT_ATTR = ['linguist-ignore', 'linguist-lang'] + GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true } + GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS) + include BlobHelper MAX_SIZE = 128 * 1024 @@ -19,6 +24,25 @@ module Linguist @mode = mode end + def git_attributes + @git_attributes ||= repository.fetch_attributes( + name, GIT_ATTR, GIT_ATTR_FLAGS) + end + + def ignored? + !!git_attributes['linguist-ignore'] + end + + def overriden_language + if lang = git_attributes['linguist-lang'] + Language.find_by_name(lang) + end + end + + def language + @language ||= (overriden_language || Language.detect(self)) + end + def data load_blob! @data diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index a89c81e6..9e0b7f1e 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -123,6 +123,10 @@ module Linguist diff = Rugged::Tree.diff(repository, old_tree, new_tree) + attr_index = Rugged::Index.new + attr_index.read_tree(new_tree) + repository.index = attr_index + diff.each_delta do |delta| old = delta.old_file[:path] new = delta.new_file[:path] @@ -138,7 +142,7 @@ module Linguist blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8)) # Skip vendored or generated blobs - next if blob.vendored? || blob.generated? || blob.language.nil? + next if blob.ignored? || blob.vendored? || blob.generated? || blob.language.nil? # Only include programming languages and acceptable markup languages if blob.language.type == :programming || Language.detectable_markup.include?(blob.language.name) diff --git a/test/test_repository.rb b/test/test_repository.rb index f4c5ad70..4f7b938e 100644 --- a/test/test_repository.rb +++ b/test/test_repository.rb @@ -47,4 +47,18 @@ class TestRepository < Test::Unit::TestCase assert_equal linguist_repo.cache, new_repo.cache end + + def test_git_attributes + attr_commit = '525304738ebdb7ab3b7d2bf9a7514cc428faa273' + repo = linguist_repo(attr_commit) + + assert repo.breakdown_by_file.has_key?("Java") + assert repo.breakdown_by_file["Java"].include?("lib/linguist.rb") + + assert repo.breakdown_by_file.has_key?("Ruby") + assert !repo.breakdown_by_file["Ruby"].empty? + repo.breakdown_by_file["Ruby"].each do |file| + assert !file.start_with?("test/") + end + end end From 9d4b5416a5b77f80e2ae3a0f6b5e52b1e853e81f Mon Sep 17 00:00:00 2001 From: The rugged tests are fragile Date: Wed, 17 Sep 2014 15:48:14 +0200 Subject: [PATCH 4/4] Bump Rugged --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ac877cb6..4d7b99c2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org' gemspec -gem 'rugged', '0.21.1b0' +gem 'rugged', '0.21.1b1'