caelum-git_reports 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,10 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ .project
7
+ .loadpath
8
+ *~
9
+ *.html
10
+ *.gem
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Caue Guerra
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,7 @@
1
+ = caelum-git-reports
2
+
3
+ Description goes here.
4
+
5
+ == Copyright
6
+
7
+ Copyright (c) 2009 Caue Guerra. See LICENSE for details.
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "git_reports"
8
+ gem.summary = "Git report tool"
9
+ gem.email = "caue.guerra@gmail.com"
10
+ gem.homepage = "http://github.com/caelum/git-reports"
11
+ gem.authors = ["Caue Guerra", "Pedro Matiello"]
12
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
+ end
14
+
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
17
+ end
18
+
19
+ require 'spec/rake/spectask'
20
+ Spec::Rake::SpecTask.new(:spec) do |spec|
21
+ spec.libs << 'lib' << 'spec'
22
+ spec.spec_files = FileList['spec/**/*_spec.rb']
23
+ spec.spec_opts = ["--colour --format specdoc"]
24
+ end
25
+
26
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
27
+ spec.libs << 'lib' << 'spec'
28
+ spec.pattern = 'spec/**/*_spec.rb'
29
+ spec.rcov = true
30
+ end
31
+
32
+
33
+ task :default => :spec
34
+
35
+ require 'rake/rdoctask'
36
+ Rake::RDocTask.new do |rdoc|
37
+ if File.exist?('VERSION.yml')
38
+ config = YAML.load(File.read('VERSION.yml'))
39
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
40
+ else
41
+ version = ""
42
+ end
43
+
44
+ rdoc.rdoc_dir = 'rdoc'
45
+ rdoc.title = "caelum-git-reports #{version}"
46
+ rdoc.rdoc_files.include('README*')
47
+ rdoc.rdoc_files.include('lib/**/*.rb')
48
+ end
49
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Load path
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+
7
+ # Requires
8
+ require 'reporter'
9
+ require 'date'
10
+ require 'html_report'
11
+ require 'html_summary'
12
+
13
+ # Command line arguments
14
+ workdir = ARGV[0]
15
+ days = ARGV[1].to_i
16
+ max_commits = ARGV[2].to_i
17
+ if (max_commits <= 0)
18
+ max_commits = 50
19
+ end
20
+
21
+ # Action!
22
+ if (workdir and days > 0)
23
+ puts "Git stats for repositories under #{workdir}"
24
+
25
+ reporter = Reporter.new(workdir)
26
+ reporter.extract_all_stats(Date.new - days) do |name|
27
+ puts "Checking #{name}..."
28
+ end
29
+
30
+ now = Time.now.strftime("%Y.%m.%d")
31
+
32
+ # Repository stats
33
+ repository_html = File.new("repositories-#{now}-#{days}.html", "w")
34
+ repository_html.puts HtmlReport.new(reporter.repository_stats, "Statistics for repositories", days).generate
35
+ repository_html.close
36
+
37
+ # Commiter stats
38
+ commiter_html = File.new("commiters-#{now}-#{days}.html", "w")
39
+ commiter_html.puts HtmlReport.new(reporter.commiter_stats, "Statistics for commiters", days).generate
40
+ commiter_html.close
41
+
42
+ # Commit summary
43
+ summary_html = File.new("summary-#{now}-#{days}.html", "w")
44
+ summary_html.puts HtmlSummary.new(reporter.repository_summaries, "Summary", days, max_commits).generate
45
+ summary_html.close
46
+ else
47
+ puts "Usage: git-report.rb <path to repositories> <number of days to look back> [<number of commits in summary>]"
48
+ end
@@ -0,0 +1,59 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{git_reports}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Caue Guerra", "Pedro Matiello"]
9
+ s.date = %q{2009-06-30}
10
+ s.default_executable = %q{git-report.rb}
11
+ s.email = %q{caue.guerra@gmail.com}
12
+ s.executables = ["git-report.rb"]
13
+ s.extra_rdoc_files = [
14
+ "LICENSE",
15
+ "README.rdoc"
16
+ ]
17
+ s.files = [
18
+ ".document",
19
+ ".gitignore",
20
+ "LICENSE",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "bin/git-report.rb",
25
+ "git_reports.gemspec",
26
+ "lib/html_report.rb",
27
+ "lib/html_summary.rb",
28
+ "lib/reporter.rb",
29
+ "lib/repository.rb",
30
+ "lib/template.rb",
31
+ "spec/html_report_spec.rb",
32
+ "spec/html_summary_spec.rb",
33
+ "spec/reporter_spec.rb",
34
+ "spec/repository_spec.rb",
35
+ "spec/spec_helper.rb"
36
+ ]
37
+ s.homepage = %q{http://github.com/caelum/git-reports}
38
+ s.rdoc_options = ["--charset=UTF-8"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = %q{1.3.3}
41
+ s.summary = %q{Git report tool}
42
+ s.test_files = [
43
+ "spec/html_report_spec.rb",
44
+ "spec/html_summary_spec.rb",
45
+ "spec/reporter_spec.rb",
46
+ "spec/repository_spec.rb",
47
+ "spec/spec_helper.rb"
48
+ ]
49
+
50
+ if s.respond_to? :specification_version then
51
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
52
+ s.specification_version = 3
53
+
54
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
55
+ else
56
+ end
57
+ else
58
+ end
59
+ end
@@ -0,0 +1,34 @@
1
+ require 'template'
2
+ require 'time'
3
+
4
+ class HtmlReport
5
+
6
+ include Template
7
+
8
+ def initialize(stats, title, days)
9
+ @stats = stats
10
+ @title = title
11
+ @days = days
12
+ end
13
+
14
+ def generate
15
+ report = ''
16
+
17
+ from = (Time.now - @days*60*60*24).strftime("%Y.%m.%d")
18
+ to = Time.now.strftime("%Y.%m.%d")
19
+
20
+ report << Template::HEAD.gsub('%TITLE%', @title).gsub("%FROM%", from).gsub('%TO%', to)
21
+ for major in @stats.keys
22
+ report << Template::MAJOR_HEAD.gsub('%MAJOR%', major)
23
+ sum = 0
24
+ for minor, lines in @stats[major]
25
+ report << Template::MINOR.gsub('%MINOR%', minor).gsub('%LINES%', lines.to_s)
26
+ sum += lines
27
+ end
28
+ report << Template::MINOR.gsub('%MINOR%', '.').gsub('%LINES%', sum.to_s)
29
+ report << Template::MAJOR_TAIL
30
+ end
31
+ report << Template::TAIL
32
+ end
33
+
34
+ end
@@ -0,0 +1,63 @@
1
+ require 'template'
2
+ require 'time'
3
+
4
+ class HtmlSummary
5
+
6
+ include Template
7
+
8
+ def initialize(summaries, title, days, max_commits)
9
+ @summaries = summaries
10
+ @title = title
11
+ @days = days
12
+ @summary = Hash.new
13
+ @max_commits = max_commits
14
+ end
15
+
16
+ def generate
17
+ report = ''
18
+
19
+ from = (Time.now - @days*60*60*24).strftime("%Y.%m.%d")
20
+ to = Time.now.strftime("%Y.%m.%d")
21
+
22
+ report << Template::HEAD.gsub('%TITLE%', @title).gsub("%FROM%", from).gsub('%TO%', to)
23
+ merge
24
+
25
+ for commit in @summary.keys.sort.reverse[0..@max_commits-1]
26
+ report << Template::COMMIT.gsub("%REPOSITORY%", @summary[commit][:repository] || "nil").
27
+ gsub("%MESSAGE%", @summary[commit][:message] || "nil").
28
+ gsub("%COMMITER%", @summary[commit][:commiter] || "nil").
29
+ gsub("%TIMEDATE%", @summary[commit][:time].to_s || "nil")
30
+ end
31
+
32
+ report << Template::TAIL
33
+
34
+ return report
35
+ end
36
+
37
+ def merge
38
+ # List all timestamps and sort
39
+ timestamps = []
40
+ for repository in @summaries.keys
41
+ for timestamp in @summaries[repository].keys
42
+ timestamps.push timestamp
43
+ end
44
+ end
45
+ timestamps.sort!
46
+
47
+ # Put commits from all repositories together, ordered by their timestamps
48
+ i = 0
49
+ for timestamp in timestamps
50
+ for repository in @summaries.keys
51
+ if (@summaries[repository][timestamp])
52
+ @summary[i] = Hash.new
53
+ @summary[i][:repository] = repository
54
+ @summary[i][:message] = @summaries[repository][timestamp][:message]
55
+ @summary[i][:commiter] = @summaries[repository][timestamp][:commiter]
56
+ @summary[i][:time] = @summaries[repository][timestamp][:time]
57
+ i = i + 1
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,58 @@
1
+ require 'repository'
2
+ require 'date'
3
+
4
+ class Reporter
5
+ attr_accessor :work_dir
6
+ attr_reader :repositories
7
+ attr_accessor :repository_stats, :commiter_stats, :repository_summaries
8
+
9
+ def initialize(work_dir)
10
+ @work_dir = work_dir
11
+ @repositories = Hash.new
12
+ @repository_stats = Hash.new
13
+ @commiter_stats = Hash.new
14
+ @repository_summaries = Hash.new
15
+ discover_repositories
16
+ initialize_repositories
17
+ end
18
+
19
+ def extract_stats(repository_name, from = Date.new, to = Date.new)
20
+ @repository_stats[repository_name] = Hash.new
21
+ repository = @repositories[repository_name]
22
+ repository.pull
23
+ repository.calculate_stats(from, to)
24
+ repository.generate_summary(from, to)
25
+ @repository_summaries[repository_name] = repository.summary
26
+ for commiter in repository.commiters.keys
27
+ @repository_stats[repository_name][commiter] = repository.commiters[commiter]
28
+ end
29
+ extract_stats_for_commiters(repository_name)
30
+ end
31
+
32
+ def extract_all_stats(from = Date.new, to = Date.new)
33
+ for repository in @repositories.values
34
+ yield repository.name if block_given?
35
+ extract_stats(repository.name, from, to)
36
+ end
37
+ end
38
+
39
+ private
40
+ def extract_stats_for_commiters(repository_name)
41
+ for commiter, lines in @repository_stats[repository_name]
42
+ @commiter_stats[commiter] = Hash.new unless @commiter_stats[commiter].instance_of? Hash
43
+ @commiter_stats[commiter][repository_name] = lines
44
+ end
45
+ end
46
+
47
+ private
48
+ def discover_repositories
49
+ @repositories_names = `cd #{work_dir} && ls`.split("\n")
50
+ end
51
+
52
+ def initialize_repositories
53
+ for repository_name in @repositories_names
54
+ repository = Repository.new(repository_name, @work_dir + "/#{repository_name}")
55
+ @repositories[repository_name] = repository
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,72 @@
1
+ require 'date'
2
+ require 'time'
3
+
4
+ class Repository
5
+ attr_accessor :name, :dir, :url
6
+ attr_reader :commiters, :summary
7
+
8
+ def initialize(name, dir)
9
+ @name = name
10
+ @dir = dir
11
+ @delimiter = "#{200.chr}@@@"
12
+ end
13
+
14
+ def clone
15
+ `cd #{dir} && git clone #{url} > /dev/null 2>&1`
16
+ end
17
+
18
+ def pull
19
+ `cd #{dir} && git pull`
20
+ end
21
+
22
+ def extract_log(from = Date.new, to = Date.new)
23
+ start_date = "#{Date.new - from} days ago"
24
+ end_date = "#{Date.new - to} days ago"
25
+ log = `cd #{dir} && git log --since="#{start_date}" --until="#{end_date} days ago" --pretty=tformat:"%n%an" --numstat --ignore-space-change`
26
+ return log
27
+ end
28
+
29
+ def extract_log_with_messages(from = Date.new, to = Date.new)
30
+ start_date = "#{Date.new - from} days ago"
31
+ end_date = "#{Date.new - to} days ago"
32
+ log = `cd #{dir} && git log --since="#{start_date}" --until="#{end_date} days ago" --pretty=tformat:"%an%n%at%n%s#{@delimiter}"`
33
+ return log
34
+ end
35
+
36
+ def generate_summary(from = Date.new, to = Date.new)
37
+ log = self.extract_log_with_messages(from, to)
38
+ @summary = Hash.new
39
+ for commit in log.split(@delimiter)
40
+ temp = []
41
+ for info in commit.split("\n")
42
+ temp.push info unless info == ""
43
+ end
44
+ @summary[temp[1]] = {:commiter => temp[0], :time => Time.at(temp[1].to_i), :message => temp[2]} if temp[1]
45
+ end
46
+ end
47
+
48
+ def calculate_stats(from = Date.new, to = Date.new)
49
+ regexp = Regexp.new('\A((\w+\s?)+)\s*((([\d-]+\s+[\d-]+.*)*\s)*)')
50
+ log = self.extract_log(from, to)
51
+ log[0] = '' unless log == ""
52
+
53
+ match = regexp.match(log)
54
+ @commiters = Hash.new
55
+ while !match.nil?
56
+ email = match[1].gsub("\n", "")
57
+
58
+ if @commiters[email].nil?
59
+ @commiters[email] = 0
60
+ end
61
+
62
+ commit_informations = match[3]
63
+ commit_informations.split("\n")
64
+ for commit_information in commit_informations
65
+ item = commit_information.split(/\s+/)
66
+ @commiters[email] += item[0].to_i + item[1].to_i
67
+ end
68
+ log.gsub!(regexp,"")
69
+ match = regexp.match(log)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,46 @@
1
+ module Template
2
+
3
+ HEAD = <<-HEADER
4
+ <html>
5
+ <head>
6
+ <title>%TITLE%</title>
7
+ </head>
8
+ <body>
9
+ <h2>%TITLE%</h2>
10
+ <p>From %FROM% to %TO%</p>
11
+ HEADER
12
+
13
+ TAIL = <<-TAIL
14
+ </body>
15
+ </html>
16
+ TAIL
17
+
18
+ MAJOR_HEAD = <<-MAJOR
19
+ <br>
20
+ <table border=1; width="600px">
21
+ <tr>
22
+ <td width="450px"><strong>%MAJOR%</strong></td>
23
+ <td width="150px"><strong>Lines</strong></td>
24
+ </tr>
25
+ MAJOR
26
+
27
+ MAJOR_TAIL = <<-MAJOR
28
+ </table>
29
+ MAJOR
30
+
31
+ MINOR = <<-MINOR
32
+ <tr>
33
+ <td>%MINOR%</td>
34
+ <td>%LINES%</td>
35
+ </tr>
36
+ MINOR
37
+
38
+ COMMIT = <<-COMMIT
39
+ <br>
40
+ <table border=1; width="600px">
41
+ <tr><td><strong>%REPOSITORY%</strong></td></tr>
42
+ <tr><td>%MESSAGE%</td></tr>
43
+ <tr><td><strong>by</strong> %COMMITER% <strong>at</strong> %TIMEDATE%</td></tr>
44
+ </table>
45
+ COMMIT
46
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'repository'
4
+ require 'html_report'
5
+ require 'time'
6
+
7
+ describe "HtmlReport" do
8
+
9
+ before :each do
10
+ stats = Hash.new
11
+ stats['Major1'] = Hash.new
12
+ stats['Major1']['Minor1'] = 100
13
+ stats['Major1']['Minor2'] = 200
14
+ stats['Major2'] = Hash.new
15
+ stats['Major2']['Minor2'] = 222
16
+ stats['Major2']['Minor3'] = 333
17
+ @report = HtmlReport.new(stats, "Statistics for repositories!", 123).generate
18
+ end
19
+
20
+ it "should have a title" do
21
+ @report.should include("Statistics for repositories!")
22
+ end
23
+
24
+ it "should specify the considered date" do
25
+ from = (Time.now - 123*60*60*24).strftime("%Y.%m.%d")
26
+ to = Time.now.strftime("%Y.%m.%d")
27
+ @report.should include("From #{from} to #{to}")
28
+ end
29
+
30
+ it "should include all majors" do
31
+ @report.should include("Major1")
32
+ @report.should include("Major2")
33
+ end
34
+
35
+ it "should include all minors" do
36
+ @report.should include("Minor1")
37
+ @report.should include("Minor2")
38
+ @report.should include("Minor3")
39
+ end
40
+
41
+ it "should include the line impact for each minor in each major" do
42
+ @report.should include("100")
43
+ @report.should include("200")
44
+ @report.should include("222")
45
+ @report.should include("333")
46
+ end
47
+
48
+ it "should include the sum of all minors for each major" do
49
+ @report.should include("300")
50
+ @report.should include("555")
51
+ end
52
+
53
+ end
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'repository'
4
+ require 'html_summary'
5
+ require 'time'
6
+
7
+ describe "HtmlSummary" do
8
+
9
+ before :each do
10
+ stats = Hash.new
11
+ stats['Repo1'] = Hash.new
12
+ stats['Repo1']['1'] = {:commiter => "Commiter 1", :time => "Time 1", :message => "Message 1"}
13
+ stats['Repo1']['3'] = {:commiter => "Commiter 2", :time => "Time 3", :message => "Message 3"}
14
+ stats['Repo1']['5'] = {:commiter => "Commiter 3", :time => "Time 5", :message => "Message 5"}
15
+ stats['Repo2'] = Hash.new
16
+ stats['Repo2']['2'] = {:commiter => "Commiter 3", :time => "Time 2", :message => "Message 2"}
17
+ stats['Repo2']['4'] = {:commiter => "Commiter 3", :time => "Time 4", :message => "Message 4"}
18
+ @report = HtmlSummary.new(stats, "Summary!", 123, 4).generate
19
+ end
20
+
21
+ it "should have a title" do
22
+ @report.should include("Summary!")
23
+ end
24
+
25
+ it "should specify the considered date" do
26
+ from = (Time.now - 123*60*60*24).strftime("%Y.%m.%d")
27
+ to = Time.now.strftime("%Y.%m.%d")
28
+ @report.should include("From #{from} to #{to}")
29
+ end
30
+
31
+ it "should include the repository name" do
32
+ @report.should include("Repo1")
33
+ @report.should include("Repo2")
34
+ end
35
+
36
+ it "should include the commit message" do
37
+ @report.should_not include("Message 1")
38
+ @report.should include("Message 2")
39
+ @report.should include("Message 3")
40
+ @report.should include("Message 4")
41
+ @report.should include("Message 5")
42
+ end
43
+
44
+ it "should include commiter's name" do
45
+ @report.should_not include("Commiter 1")
46
+ @report.should include("Commiter 2")
47
+ @report.should include("Commiter 3")
48
+ end
49
+
50
+ it "should include the time and date for each commit" do
51
+ @report.should_not include("Time 1")
52
+ @report.should include("Time 2")
53
+ @report.should include("Time 3")
54
+ @report.should include("Time 4")
55
+ @report.should include("Time 5")
56
+ end
57
+
58
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "CaelumGitReports" do
4
+
5
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'repository'
4
+
5
+ describe "Repository" do
6
+
7
+ it "should calculate stats" do
8
+ log = "
9
+ User1
10
+
11
+ 5 3 File1
12
+ 2 2 File2
13
+
14
+ User1
15
+
16
+ 1 1 File1
17
+ 2 2 File3
18
+
19
+ User2
20
+
21
+ 7 0 File1
22
+ 0 3 File2
23
+ "
24
+
25
+ repository = Repository.new("SampleRepository","ArbitraryDirectory")
26
+ repository.stub(:extract_log).and_return(log)
27
+ repository.calculate_stats
28
+ repository.commiters['User1'].should be(18)
29
+ repository.commiters['User2'].should be(10)
30
+ end
31
+
32
+ it "should generate a summary" do
33
+ delimiter = "#{200.chr}@@@"
34
+ log = "User 1
35
+ 12345
36
+ Message number 1#{delimiter}
37
+ User 2
38
+ 12344
39
+ Message number 2#{delimiter}
40
+ "
41
+ repository = Repository.new("SampleRepository","ArbitraryDirectory")
42
+ repository.stub(:extract_log_with_messages).and_return(log)
43
+ repository.generate_summary
44
+ repository.summary['12345'][:commiter].should eql("User 1")
45
+ repository.summary['12345'][:time].should eql(Time.at(12345))
46
+ repository.summary['12345'][:message].should eql("Message number 1")
47
+ repository.summary['12344'][:commiter].should eql("User 2")
48
+ repository.summary['12344'][:time].should eql(Time.at(12344))
49
+ repository.summary['12344'][:message].should eql("Message number 2")
50
+ end
51
+
52
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec'
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+ Spec::Runner.configure do |config|
7
+
8
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: caelum-git_reports
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Caue Guerra
8
+ - Pedro Matiello
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-06-30 00:00:00 -07:00
14
+ default_executable: git-report.rb
15
+ dependencies: []
16
+
17
+ description:
18
+ email: caue.guerra@gmail.com
19
+ executables:
20
+ - git-report.rb
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - LICENSE
25
+ - README.rdoc
26
+ files:
27
+ - .document
28
+ - .gitignore
29
+ - LICENSE
30
+ - README.rdoc
31
+ - Rakefile
32
+ - VERSION
33
+ - bin/git-report.rb
34
+ - git_reports.gemspec
35
+ - lib/html_report.rb
36
+ - lib/html_summary.rb
37
+ - lib/reporter.rb
38
+ - lib/repository.rb
39
+ - lib/template.rb
40
+ - spec/html_report_spec.rb
41
+ - spec/html_summary_spec.rb
42
+ - spec/reporter_spec.rb
43
+ - spec/repository_spec.rb
44
+ - spec/spec_helper.rb
45
+ has_rdoc: false
46
+ homepage: http://github.com/caelum/git-reports
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --charset=UTF-8
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.2.0
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Git report tool
71
+ test_files:
72
+ - spec/html_report_spec.rb
73
+ - spec/html_summary_spec.rb
74
+ - spec/reporter_spec.rb
75
+ - spec/repository_spec.rb
76
+ - spec/spec_helper.rb