Skip to content

Commit f24bd38

Browse files
committed
Include grit_ext inside gitlab-grit
1 parent c4e5bef commit f24bd38

18 files changed

+238
-198
lines changed

.travis.yml

+4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
env:
22
- TRAVIS=true
3+
before_install:
4+
- sudo apt-get install libicu-dev -y
35
branches:
46
only:
57
- 'master'
68
rvm:
79
- 1.9.3
810
- 2.0.0
11+
before_script:
12+
- "bundle install"
913
script: "bundle exec rake test"

Gemfile

+4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
source "http://rubygems.org"
22

3+
gemspec
4+
35
group :development, :test do
6+
gem 'pry'
47
gem 'rake'
58
gem 'posix-spawn', "~> 0.3.6"
69
gem 'mime-types', "~> 1.15"
710
gem 'diff-lcs', "~> 1.1"
811
gem 'mocha', "~> 0.13.2"
912
gem 'coveralls', require: false
13+
gem 'rspec', '~> 2.11'
1014
end

Gemfile.lock

+28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
1+
PATH
2+
remote: .
3+
specs:
4+
gitlab-grit (2.5.0)
5+
charlock_holmes (~> 0.6.9)
6+
diff-lcs (~> 1.1)
7+
mime-types (~> 1.15)
8+
posix-spawn (~> 0.3.6)
9+
110
GEM
211
remote: http://rubygems.org/
312
specs:
13+
charlock_holmes (0.6.9.4)
14+
coderay (1.0.9)
415
colorize (0.5.8)
516
coveralls (0.6.2)
617
colorize
@@ -10,18 +21,32 @@ GEM
1021
thor
1122
diff-lcs (1.1.3)
1223
metaclass (0.0.1)
24+
method_source (0.8.1)
1325
mime-types (1.18)
1426
mocha (0.13.2)
1527
metaclass (~> 0.0.1)
1628
multi_json (1.7.2)
1729
posix-spawn (0.3.6)
30+
pry (0.9.12.2)
31+
coderay (~> 1.0.5)
32+
method_source (~> 0.8)
33+
slop (~> 3.4)
1834
rake (0.9.2.2)
1935
rest-client (1.6.7)
2036
mime-types (>= 1.16)
37+
rspec (2.13.0)
38+
rspec-core (~> 2.13.0)
39+
rspec-expectations (~> 2.13.0)
40+
rspec-mocks (~> 2.13.0)
41+
rspec-core (2.13.1)
42+
rspec-expectations (2.13.0)
43+
diff-lcs (>= 1.1.3, < 2.0)
44+
rspec-mocks (2.13.1)
2145
simplecov (0.7.1)
2246
multi_json (~> 1.0)
2347
simplecov-html (~> 0.7.1)
2448
simplecov-html (0.7.1)
49+
slop (3.4.4)
2550
thor (0.18.0)
2651

2752
PLATFORMS
@@ -30,7 +55,10 @@ PLATFORMS
3055
DEPENDENCIES
3156
coveralls
3257
diff-lcs (~> 1.1)
58+
gitlab-grit!
3359
mime-types (~> 1.15)
3460
mocha (~> 0.13.2)
3561
posix-spawn (~> 0.3.6)
62+
pry
3663
rake
64+
rspec (~> 2.11)

Rakefile

+1-133
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,7 @@ require 'rubygems'
22
require 'rake'
33
require 'date'
44

5-
#############################################################################
6-
#
7-
# Helper functions
8-
#
9-
#############################################################################
10-
11-
def name
12-
@name ||= Dir['*.gemspec'].first.split('.').first
13-
end
14-
15-
def version
16-
line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
17-
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
18-
end
19-
20-
def date
21-
Date.today.to_s
22-
end
23-
24-
def rubyforge_project
25-
name
26-
end
27-
28-
def gemspec_file
29-
"#{name}.gemspec"
30-
end
31-
32-
def gem_file
33-
"#{name}-#{version}.gem"
34-
end
35-
36-
def replace_header(head, header_name)
37-
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
38-
end
39-
40-
#############################################################################
41-
#
42-
# Standard tasks
43-
#
44-
#############################################################################
45-
46-
task :default => :test
5+
task default: :test
476

487
require 'rake/testtask'
498
Rake::TestTask.new(:test) do |test|
@@ -52,98 +11,7 @@ Rake::TestTask.new(:test) do |test|
5211
test.verbose = true
5312
end
5413

55-
desc "Generate RCov test coverage and open in your browser"
56-
task :coverage do
57-
require 'rcov'
58-
sh "rm -fr coverage"
59-
sh "rcov test/test_*.rb"
60-
sh "open coverage/index.html"
61-
end
62-
63-
require 'rdoc/task'
64-
Rake::RDocTask.new do |rdoc|
65-
rdoc.rdoc_dir = 'rdoc'
66-
rdoc.title = "#{name} #{version}"
67-
rdoc.rdoc_files.include('README*')
68-
rdoc.rdoc_files.include('lib/**/*.rb')
69-
end
70-
7114
desc "Open an irb session preloaded with this library"
7215
task :console do
7316
sh "irb -rubygems -r ./lib/#{name}.rb"
7417
end
75-
76-
#############################################################################
77-
#
78-
# Custom tasks (add your own tasks here)
79-
#
80-
#############################################################################
81-
82-
desc "Upload site to Rubyforge"
83-
task :site do
84-
sh "scp -r doc/* [email protected]:/var/www/gforge-projects/grit"
85-
end
86-
87-
#############################################################################
88-
#
89-
# Packaging tasks
90-
#
91-
#############################################################################
92-
93-
task :release => :build do
94-
unless `git branch` =~ /^\* master$/
95-
puts "You must be on the master branch to release!"
96-
exit!
97-
end
98-
sh "git commit --allow-empty -a -m 'Release #{version}'"
99-
sh "git tag v#{version}"
100-
sh "git push origin master"
101-
sh "git push origin v#{version}"
102-
sh "gem push pkg/#{name}-#{version}.gem"
103-
end
104-
105-
task :build => :gemspec do
106-
sh "mkdir -p pkg"
107-
sh "gem build #{gemspec_file}"
108-
sh "mv #{gem_file} pkg"
109-
end
110-
111-
task :gemspec => :validate do
112-
# read spec file and split out manifest section
113-
spec = File.read(gemspec_file)
114-
head, manifest, tail = spec.split(" # = MANIFEST =\n")
115-
116-
# replace name version and date
117-
replace_header(head, :name)
118-
replace_header(head, :version)
119-
replace_header(head, :date)
120-
#comment this out if your rubyforge_project has a different name
121-
replace_header(head, :rubyforge_project)
122-
123-
# determine file list from git ls-files
124-
files = `git ls-files`.
125-
split("\n").
126-
sort.
127-
reject { |file| file =~ /^\./ }.
128-
reject { |file| file =~ /^(rdoc|pkg|test)/ }.
129-
map { |file| " #{file}" }.
130-
join("\n")
131-
132-
# piece file back together and write
133-
manifest = " s.files = %w[\n#{files}\n ]\n"
134-
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
135-
File.open(gemspec_file, 'w') { |io| io.write(spec) }
136-
puts "Updated #{gemspec_file}"
137-
end
138-
139-
task :validate do
140-
libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
141-
unless libfiles.empty?
142-
puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
143-
exit!
144-
end
145-
unless Dir['VERSION*'].empty?
146-
puts "A `VERSION` file at root level violates Gem best practices."
147-
exit!
148-
end
149-
end

grit.gemspec

+9-61
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,22 @@
11
Gem::Specification.new do |s|
2-
s.specification_version = 2 if s.respond_to? :specification_version=
3-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4-
s.rubygems_version = '1.3.5'
5-
6-
s.name = 'gitlab-grit'
7-
s.version = '2.5.0'
8-
s.date = '2013-05-06'
2+
s.name = 'gitlab-grit'
3+
s.version = '2.5.0'
4+
s.date = '2013-05-06'
95
s.license = 'MIT'
10-
116
s.summary = "Ruby Git bindings."
127
s.description = "Grit is a Ruby library for extracting information from a git repository in an object oriented manner. GitLab fork"
13-
14-
s.authors = ["Tom Preston-Werner", "Scott Chacon", "Dmitriy Zaporozhets"]
15-
s.email = '[email protected]'
16-
s.homepage = 'http://github.com/gitlabhq/grit'
17-
8+
s.authors = ["Tom Preston-Werner", "Scott Chacon", "Dmitriy Zaporozhets"]
9+
s.email = '[email protected]'
10+
s.homepage = 'http://github.com/gitlabhq/grit'
1811
s.require_paths = %w[lib]
19-
2012
s.rdoc_options = ["--charset=UTF-8"]
2113
s.extra_rdoc_files = %w[README.md LICENSE]
14+
s.files = `git ls-files lib/`.split("\n")
15+
s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
2216

17+
s.add_dependency("charlock_holmes", "~> 0.6.9")
2318
s.add_dependency('posix-spawn', "~> 0.3.6")
2419
s.add_dependency('mime-types', "~> 1.15")
2520
s.add_dependency('diff-lcs', "~> 1.1")
26-
2721
s.add_development_dependency('mocha')
28-
29-
# = MANIFEST =
30-
s.files = %w[
31-
API.txt
32-
History.txt
33-
LICENSE
34-
PURE_TODO
35-
README.md
36-
Rakefile
37-
benchmarks.rb
38-
benchmarks.txt
39-
examples/ex_add_commit.rb
40-
examples/ex_index.rb
41-
grit.gemspec
42-
lib/grit.rb
43-
lib/grit/actor.rb
44-
lib/grit/blame.rb
45-
lib/grit/blob.rb
46-
lib/grit/commit.rb
47-
lib/grit/commit_stats.rb
48-
lib/grit/config.rb
49-
lib/grit/diff.rb
50-
lib/grit/errors.rb
51-
lib/grit/git-ruby.rb
52-
lib/grit/git-ruby/commit_db.rb
53-
lib/grit/git-ruby/git_object.rb
54-
lib/grit/git-ruby/internal/file_window.rb
55-
lib/grit/git-ruby/internal/loose.rb
56-
lib/grit/git-ruby/internal/pack.rb
57-
lib/grit/git-ruby/internal/raw_object.rb
58-
lib/grit/git-ruby/repository.rb
59-
lib/grit/git.rb
60-
lib/grit/index.rb
61-
lib/grit/lazy.rb
62-
lib/grit/merge.rb
63-
lib/grit/ref.rb
64-
lib/grit/repo.rb
65-
lib/grit/ruby1.9.rb
66-
lib/grit/status.rb
67-
lib/grit/submodule.rb
68-
lib/grit/tag.rb
69-
lib/grit/tree.rb
70-
]
71-
# = MANIFEST =
72-
73-
s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
7422
end

lib/grit.rb

+4
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,7 @@ def self.version
7474
VERSION
7575
end
7676
end
77+
78+
# Include grit_ext
79+
require 'charlock_holmes'
80+
require 'grit_ext'

lib/grit_ext.rb

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
require "charlock_holmes"
2+
require "grit_ext/actor"
3+
require "grit_ext/blob"
4+
require "grit_ext/commit"
5+
require "grit_ext/tree"
6+
require "grit_ext/diff"
7+
require "grit_ext/version"
8+
9+
module GritExt
10+
extend self
11+
12+
def encode!(message)
13+
return nil unless message.respond_to? :force_encoding
14+
15+
# if message is utf-8 encoding, just return it
16+
message.force_encoding("UTF-8")
17+
return message if message.valid_encoding?
18+
19+
# return message if message type is binary
20+
detect = CharlockHolmes::EncodingDetector.detect(message)
21+
return message.force_encoding("BINARY") if detect && detect[:type] == :binary
22+
23+
# encoding message to detect encoding
24+
if detect && detect[:encoding]
25+
message.force_encoding(detect[:encoding])
26+
end
27+
28+
# encode and clean the bad chars
29+
message.replace clean(message)
30+
rescue
31+
encoding = detect ? detect[:encoding] : "unknown"
32+
"--broken encoding: #{encoding}"
33+
end
34+
35+
private
36+
def clean(message)
37+
message.encode("UTF-16BE", :undef => :replace, :invalid => :replace, :replace => "")
38+
.encode("UTF-8")
39+
.gsub("\0".encode("UTF-8"), "")
40+
end
41+
end

lib/grit_ext/actor.rb

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module Grit
2+
class Actor
3+
4+
alias_method :old_name, :name
5+
alias_method :old_email, :email
6+
7+
def name
8+
GritExt.encode! old_name
9+
end
10+
11+
def email
12+
GritExt.encode! old_email
13+
end
14+
end
15+
end

0 commit comments

Comments
 (0)