git_fame 1.5.0 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8bb9724458ff2755921443d6d9ac63cbeec1d1f
4
- data.tar.gz: a39b694ad844e5020bc062b39dcbd744d3ac57c9
3
+ metadata.gz: 0b26bdf2f4da7bdd079f978625dd588c62129595
4
+ data.tar.gz: f0f316759efda81f61fdee295afe76e1cac9dc7f
5
5
  SHA512:
6
- metadata.gz: c0499b7494115af787d7cd64a07e2ae8276e18a7b2141d7ce33d5bd14b2b426c56bf85488fae4ed00195e50273d9fb3df479e6b6e3aa2a6f7dc17b715c600788
7
- data.tar.gz: 0b740f88d34139fc9f1be37fdf30313889a0148ebdd3710d0c53c265b8782017666cb5bf246ee21e86e3ce6322b6c86f58836964c4e3474fea43538cc7db911b
6
+ metadata.gz: e646b20e3fca5711245540a3c2d1996adbfbeeeed14e59ff9c1a26324d5cbbf5b8c303c87fb8b9aed287884d19be85d9ab2d67379d1a2992fd7046e77096b9a2
7
+ data.tar.gz: 4105beaa8b3e8d0000a6dbe00ce6a434012345e1f204f579344ce80c58a2dbf6cd744856e95b46eca4c17057457e6dfee7e577f5c0ae5089879f257e8854b564
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.3.1
3
4
  - 2.2.0
4
5
  - 2.1.0
5
6
  - 2.0.0
data/README.md CHANGED
@@ -49,7 +49,7 @@ Run `git fame` to generate output as above.
49
49
 
50
50
  - `git fame --bytype` Should a breakout of line counts by file type be output? Default is `false`.
51
51
  - `git fame --exclude=paths/to/files,paths/to/other/files` Comma separated, realtive paths to exclude from the counts. Note that you should not start the paths with a dot. Default is none.
52
- - `git fame --order=loc` Order table by `loc`. Available options are: `loc`, `commits` and `files`. Default is `loc`.
52
+ - `git fame --sort=loc` Order table by `loc`. Available options are: `loc`, `commits` and `files`. Default is `loc`.
53
53
  - `git fame --progressbar=1` Should a progressbar be visible during the calculation? Default is `1`.
54
54
  - `git fame --whitespace` Ignore whitespace changes when blaming files. Default is `false`.
55
55
  - `git fame --repository=/path/to/repo` Git repository to be used. Default is the current folder.
@@ -90,7 +90,7 @@ repository = GitFame::Base.new({
90
90
 
91
91
  #### Print csv table to console
92
92
 
93
- `repository.csv_puts
93
+ `repository.csv_puts`
94
94
 
95
95
  ### Statistics
96
96
 
@@ -139,4 +139,4 @@ The list of authors may include duplicate people. If a git user's configured nam
139
139
 
140
140
  ## License
141
141
 
142
- *GitFame* is released under the *MIT license*.
142
+ *GitFame* is released under the *MIT license*.
@@ -5,7 +5,7 @@ require "trollop"
5
5
 
6
6
  sort = ["name", "commits", "loc", "files"]
7
7
  opts = Trollop::options do
8
- version "git-fame #{GitFame::VERSION} (c) 2015 Linus Oleander"
8
+ version "git-fame #{GitFame::VERSION} (c) 2012-#{Date.today.year} Linus Oleander"
9
9
  opt :repository, "What git repository should be used?", default: "."
10
10
  opt :sort, "What should the printed table be sorted by? #{sort.join(", ")}", default: "loc", type: String
11
11
  opt :progressbar, "Show progressbar during calculation", default: 1, type: Integer
@@ -13,6 +13,7 @@ opts = Trollop::options do
13
13
  opt :bytype, "Group line counts by file extension (i.e. .rb, .erb, .yml)", default: false
14
14
  opt :include, "Paths to include in git ls-files", default: "", type: String
15
15
  opt :exclude, "Paths to exclude (comma separated)", default: "", type: String
16
+ opt :extension, "Comma-separated list of extensions to consider, leave blank for all", default: "", type: String
16
17
  opt :branch, "Branch to run on", default: "master", type: String
17
18
  opt :format, "Format (pretty/csv)", default: "pretty", type: String
18
19
  end
@@ -27,6 +28,7 @@ fame = GitFame::Base.new({
27
28
  bytype: opts[:bytype],
28
29
  include: opts[:include],
29
30
  exclude: opts[:exclude],
31
+ extensions: opts[:extension],
30
32
  branch: opts[:branch]
31
33
  })
32
34
  opts[:format] == "csv" ? fame.csv_puts : fame.pretty_puts
@@ -4,9 +4,9 @@ require File.expand_path('../lib/git_fame/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Linus Oleander"]
6
6
  gem.email = ["linus@oleander.nu"]
7
- gem.description = %q{Generates some awesome stats from git-blame}
7
+ gem.description = %q{Generates awesome stats from git-blame}
8
8
  gem.summary = %q{
9
- Generates some awesome stats from git-blame
9
+ Generates awesome stats from git-blame
10
10
 
11
11
  A Ruby wrapper for git-blame.
12
12
  Generates data like:
@@ -14,7 +14,7 @@ Generates data like:
14
14
  - Number of commits by user
15
15
  - Lines of code by a user
16
16
  }
17
-
17
+
18
18
  gem.homepage = "https://github.com/oleander/git-fame-rb"
19
19
 
20
20
  gem.files = `git ls-files`.split($\)
@@ -28,10 +28,14 @@ Generates data like:
28
28
  gem.add_dependency("trollop")
29
29
  gem.add_dependency("hirb")
30
30
  gem.add_dependency("mimer_plus")
31
- gem.add_dependency("string-scrub")
31
+
32
+ if RUBY_VERSION.to_f < 2.1
33
+ gem.add_dependency("scrub_rb")
34
+ end
32
35
 
33
36
  gem.add_development_dependency("rspec", "2.10.0")
34
37
  gem.add_development_dependency("rake")
35
38
  gem.add_development_dependency("coveralls")
39
+
36
40
  gem.required_ruby_version = ">= 1.9.2"
37
41
  end
@@ -1,6 +1,8 @@
1
- require "string-scrub"
2
1
  require "csv"
3
2
  require_relative "./errors"
3
+ if RUBY_VERSION.to_f < 2.1
4
+ require "scrub_rb"
5
+ end
4
6
 
5
7
  module GitFame
6
8
  class Base
@@ -19,6 +21,7 @@ module GitFame
19
21
  @progressbar = false
20
22
  @whitespace = false
21
23
  @bytype = false
24
+ @extensions = ""
22
25
  @exclude = ""
23
26
  @include = ""
24
27
  @authors = {}
@@ -27,7 +30,19 @@ module GitFame
27
30
  instance_variable_set "@" + name.to_s, args[name]
28
31
  end
29
32
  @exclude = convert_exclude_paths_to_array
33
+ @extensions = convert_extensions_to_array
30
34
  @branch = (@branch.nil? or @branch.empty?) ? "master" : @branch
35
+
36
+ # Fields that should be visible in the final table
37
+ # Used by #csv_puts, #to_csv and #pretty_puts
38
+ # Format: [ [:method_on_author, "custom column name"] ]
39
+ @visible_fields = [
40
+ :name,
41
+ :loc,
42
+ :commits,
43
+ :files,
44
+ [:distribution, "distribution (%)"]
45
+ ]
31
46
  end
32
47
 
33
48
  #
@@ -66,7 +81,7 @@ module GitFame
66
81
  #
67
82
  def to_csv
68
83
  CSV.generate do |csv|
69
- csv << fields
84
+ csv << printable_fields
70
85
  authors.each do |author|
71
86
  csv << fields.map do |f|
72
87
  author.send(f)
@@ -75,19 +90,6 @@ module GitFame
75
90
  end
76
91
  end
77
92
 
78
- #
79
- # Calculate columns to show
80
- #
81
- def fields
82
- @_fields ||= begin
83
- fields = [:name, :loc, :commits, :files, :distribution]
84
- if @bytype
85
- fields += populate.instance_variable_get("@file_extensions")
86
- end
87
- fields.uniq
88
- end
89
- end
90
-
91
93
  #
92
94
  # @return Fixnum Total number of files
93
95
  #
@@ -148,6 +150,25 @@ module GitFame
148
150
 
149
151
  private
150
152
 
153
+ def printable_fields
154
+ @_printable_fields ||= raw_fields.map do |field|
155
+ field.is_a?(Array) ? field.last : field
156
+ end
157
+ end
158
+
159
+ def raw_fields
160
+ return @visible_fields unless @bytype
161
+ @_raw_fields ||= (
162
+ @visible_fields + populate.instance_variable_get("@file_extensions")
163
+ ).uniq
164
+ end
165
+
166
+ def fields
167
+ @_fields ||= raw_fields.map do |field|
168
+ field.is_a?(Array) ? field.first : field
169
+ end
170
+ end
171
+
151
172
  #
152
173
  # @command String Command to be executed inside the @repository path
153
174
  #
@@ -185,8 +206,9 @@ module GitFame
185
206
  raise BranchNotFound.new("Does '#{@branch}' exist?")
186
207
  end
187
208
 
188
- @files = execute("git ls-tree -r #{@branch} --name-only #{@include}").
189
- split("\n")
209
+ command = "git ls-tree -r #{@branch} --name-only #{@include}"
210
+ command += " | grep \"\\.\\(#{@extensions.join("\\|")}\\)$\"" unless @extensions.empty?
211
+ @files = execute(command).split("\n")
190
212
  @file_extensions = []
191
213
  remove_excluded_files
192
214
  progressbar = SilentProgressbar.new(
@@ -260,13 +282,20 @@ module GitFame
260
282
  @exclude.split(",").map{|path| path.strip.sub(/\A\//, "") }
261
283
  end
262
284
 
285
+ #
286
+ # Converts @extensions argument to an array
287
+ #
288
+ def convert_extensions_to_array
289
+ @extensions.split(",")
290
+ end
291
+
263
292
  #
264
293
  # Removes files matching paths in @exclude from @files instance variable
265
294
  #
266
295
  def remove_excluded_files
267
296
  return if @exclude.empty?
268
297
  @files = @files.map do |path|
269
- next if path =~ /\A(#{@exclude.join("|")})/
298
+ next if path =~ /\A(#{@exclude.join("|")})/
270
299
  path
271
300
  end.compact
272
301
  end
@@ -1,3 +1,3 @@
1
1
  module GitFame
2
- VERSION = "1.5.0"
2
+ VERSION = "1.6.0"
3
3
  end
@@ -28,10 +28,10 @@ describe GitFame::Base do
28
28
  end
29
29
  end
30
30
  describe "format" do
31
- let(:author) do
31
+ let(:author) do
32
32
  GitFame::Author.new({
33
- raw_commits: 12345,
34
- raw_files: 6789,
33
+ raw_commits: 12345,
34
+ raw_files: 6789,
35
35
  raw_loc: 1234
36
36
  })
37
37
  end
@@ -61,7 +61,7 @@ describe GitFame::Base do
61
61
  describe "sort" do
62
62
  it "should be able to sort #authors by name" do
63
63
  authors = GitFame::Base.new({
64
- repository: @repository,
64
+ repository: @repository,
65
65
  sort: "name"
66
66
  }).authors
67
67
  authors.map(&:name).
@@ -70,7 +70,7 @@ describe GitFame::Base do
70
70
 
71
71
  it "should be able to sort #authors by commits" do
72
72
  authors = GitFame::Base.new({
73
- repository: @repository,
73
+ repository: @repository,
74
74
  sort: "commits"
75
75
  }).authors
76
76
  authors.map(&:name).
@@ -79,7 +79,7 @@ describe GitFame::Base do
79
79
 
80
80
  it "should be able to sort #authors by files" do
81
81
  authors = GitFame::Base.new({
82
- repository: @repository,
82
+ repository: @repository,
83
83
  sort: "files"
84
84
  }).authors
85
85
  authors.map(&:name).
@@ -88,19 +88,24 @@ describe GitFame::Base do
88
88
  end
89
89
 
90
90
  describe "#command_line_arguments" do
91
- let(:subject) do
91
+ let(:subject) do
92
92
  GitFame::Base.new({
93
- repository: @repository,
94
- exclude: "lib",
95
- bytype: true
96
- })
93
+ repository: @repository,
94
+ exclude: "lib",
95
+ bytype: true,
96
+ extensions: "rb,rdoc"
97
+ })
97
98
  end
98
99
 
99
100
  it "should exclude the lib folder" do
100
101
  subject.file_list.include?("lib/gash.rb").should be_false
101
102
  end
102
103
 
103
- let(:author) { subject.authors.first }
104
+ it "should exclude non rb or rdoc files" do
105
+ subject.file_list.include?("HISTORY").should be_false
106
+ end
107
+
108
+ let(:author) { subject.authors.find { |author| author.name == "7rans" } }
104
109
  it "should break out counts by file type" do
105
110
  author.file_type_counts["rdoc"].should eq(23)
106
111
  end
@@ -126,7 +131,7 @@ describe GitFame::Base do
126
131
  end
127
132
 
128
133
  it "should be equal to" do
129
- subject.to_csv.should eq("name,loc,commits,files,distribution\n" \
134
+ subject.to_csv.should eq("name,loc,commits,files,distribution (%)\n" \
130
135
  "Magnus Holm,586,41,4,54.2 / 58.6 / 25.0\n" \
131
136
  "7rans,360,6,10,33.3 / 8.6 / 62.5\n" \
132
137
  "Linus Oleander,136,23,7,12.6 / 32.9 / 43.8\n")
@@ -156,7 +161,7 @@ describe GitFame::Base do
156
161
  describe "branches" do
157
162
  it "should handle existing branches" do
158
163
  authors = GitFame::Base.new({
159
- repository: @repository,
164
+ repository: @repository,
160
165
  branch: "0.1.0"
161
166
  }).authors
162
167
 
@@ -167,7 +172,7 @@ describe GitFame::Base do
167
172
  it "should raise an error if branch doesn't exist" do
168
173
  expect {
169
174
  GitFame::Base.new({
170
- repository: @repository,
175
+ repository: @repository,
171
176
  branch: "f67c2bcbfcfa30fccb36f72dca22a817"
172
177
  }).authors
173
178
  }.to raise_error(GitFame::BranchNotFound)
metadata CHANGED
@@ -1,83 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_fame
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Linus Oleander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-05 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: progressbar
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: trollop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hirb
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mimer_plus
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: string-scrub
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
@@ -98,31 +84,31 @@ dependencies:
98
84
  name: rake
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - '>='
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
89
  version: '0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - '>='
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: coveralls
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - '>='
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
- description: Generates some awesome stats from git-blame
111
+ description: Generates awesome stats from git-blame
126
112
  email:
127
113
  - linus@oleander.nu
128
114
  executables:
@@ -130,10 +116,10 @@ executables:
130
116
  extensions: []
131
117
  extra_rdoc_files: []
132
118
  files:
133
- - .gitignore
134
- - .gitmodules
135
- - .rspec
136
- - .travis.yml
119
+ - ".gitignore"
120
+ - ".gitmodules"
121
+ - ".rspec"
122
+ - ".travis.yml"
137
123
  - Gemfile
138
124
  - LICENSE
139
125
  - README.md
@@ -158,12 +144,12 @@ require_paths:
158
144
  - lib
159
145
  required_ruby_version: !ruby/object:Gem::Requirement
160
146
  requirements:
161
- - - '>='
147
+ - - ">="
162
148
  - !ruby/object:Gem::Version
163
149
  version: 1.9.2
164
150
  required_rubygems_version: !ruby/object:Gem::Requirement
165
151
  requirements:
166
- - - '>='
152
+ - - ">="
167
153
  - !ruby/object:Gem::Version
168
154
  version: '0'
169
155
  requirements: []
@@ -171,9 +157,9 @@ rubyforge_project:
171
157
  rubygems_version: 2.4.8
172
158
  signing_key:
173
159
  specification_version: 4
174
- summary: 'Generates some awesome stats from git-blame A Ruby wrapper for git-blame.
175
- Generates data like: - Number of files changed by a user - Number of commits by
176
- user - Lines of code by a user'
160
+ summary: 'Generates awesome stats from git-blame A Ruby wrapper for git-blame. Generates
161
+ data like: - Number of files changed by a user - Number of commits by user - Lines
162
+ of code by a user'
177
163
  test_files:
178
164
  - spec/git_fame_spec.rb
179
165
  - spec/spec_helper.rb