git_loc_tracker 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/git_loc_tracker.rb +16 -10
- data/lib/git_loc_tracker/command_constructor.rb +1 -1
- data/lib/git_loc_tracker/line_parser.rb +11 -8
- data/lib/git_loc_tracker/version.rb +1 -1
- data/spec/git_loc_tracker/lib/git_loc_tracker/command_constructor_spec.rb +47 -0
- data/spec/git_loc_tracker/lib/git_loc_tracker/command_executor_spec.rb +20 -0
- data/spec/git_loc_tracker/lib/git_loc_tracker/line_parser_spec.rb +34 -0
- data/spec/git_loc_tracker/lib/git_loc_tracker_spec.rb +49 -0
- data/spec/spec_helper.rb +4 -10
- data/spec/test_repo/test_file +5 -0
- metadata +14 -4
data/lib/git_loc_tracker.rb
CHANGED
@@ -7,18 +7,10 @@ module GitLocTracker
|
|
7
7
|
|
8
8
|
class Statistics
|
9
9
|
|
10
|
-
attr_accessor :git_lines, :git_command, :line_parser
|
10
|
+
attr_accessor :git_command_options, :git_lines, :git_command, :line_parser
|
11
11
|
|
12
12
|
def initialize options
|
13
|
-
@
|
14
|
-
end
|
15
|
-
|
16
|
-
def git_lines
|
17
|
-
@git_lines ||= GitLocTracker::CommandExecutor.new(@git_command).git_lines
|
18
|
-
end
|
19
|
-
|
20
|
-
def line_parser line
|
21
|
-
GitLocTracker::LineParser.new(line)
|
13
|
+
@git_command_options = options
|
22
14
|
end
|
23
15
|
|
24
16
|
def new_line_count
|
@@ -47,6 +39,20 @@ module GitLocTracker
|
|
47
39
|
puts "********************************"
|
48
40
|
end
|
49
41
|
|
42
|
+
private
|
43
|
+
|
44
|
+
def git_command
|
45
|
+
@git_command ||= GitLocTracker::CommandConstructor.new(git_command_options).git_command
|
46
|
+
end
|
47
|
+
|
48
|
+
def git_lines
|
49
|
+
@git_lines ||= GitLocTracker::CommandExecutor.new(git_command).git_lines
|
50
|
+
end
|
51
|
+
|
52
|
+
def line_parser line
|
53
|
+
GitLocTracker::LineParser.new(line)
|
54
|
+
end
|
55
|
+
|
50
56
|
end
|
51
57
|
|
52
58
|
end
|
@@ -34,7 +34,7 @@ module GitLocTracker
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def existing_search_scope
|
37
|
-
scope_parts = options[:search_scope].split(" ")
|
37
|
+
scope_parts = options[:search_scope] ? options[:search_scope].split(" ") : []
|
38
38
|
existing_scope_dirs = scope_parts.select { |dir| File.exist?("#{options[:path]}/#{dir}") }
|
39
39
|
existing_scope_dirs.empty? ? options[:path] : existing_scope_dirs.join(" ")
|
40
40
|
end
|
@@ -6,14 +6,6 @@ module GitLocTracker
|
|
6
6
|
@line = line
|
7
7
|
end
|
8
8
|
|
9
|
-
def line_size_without_deleted_code
|
10
|
-
line.strip.gsub(GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP, "").size
|
11
|
-
end
|
12
|
-
|
13
|
-
def line_size_without_new_code
|
14
|
-
line.strip.gsub(GitLocTracker::CommandConstructor::NEW_CODE_REGEXP, "").size
|
15
|
-
end
|
16
|
-
|
17
9
|
def is_new?
|
18
10
|
line_size_without_new_code == 0
|
19
11
|
end
|
@@ -25,5 +17,16 @@ module GitLocTracker
|
|
25
17
|
def is_modified?
|
26
18
|
!is_new? && !is_deleted?
|
27
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def line_size_without_deleted_code
|
24
|
+
line.strip.gsub(GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP, "").size
|
25
|
+
end
|
26
|
+
|
27
|
+
def line_size_without_new_code
|
28
|
+
line.strip.gsub(GitLocTracker::CommandConstructor::NEW_CODE_REGEXP, "").size
|
29
|
+
end
|
30
|
+
|
28
31
|
end
|
29
32
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GitLocTracker::CommandConstructor do
|
4
|
+
it "should receive options" do
|
5
|
+
options = {option_1: "a", option_2: "b"}
|
6
|
+
command_constructor = GitLocTracker::CommandConstructor.new options
|
7
|
+
command_constructor.options.should == options
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should construct git command containing --since option" do
|
11
|
+
command_constructor = GitLocTracker::CommandConstructor.new({from: "1 day ago"})
|
12
|
+
command_constructor.git_command.should include("--since='1 day ago'")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should construct git command containing --until option" do
|
16
|
+
command_constructor = GitLocTracker::CommandConstructor.new({till: "1 day from now"})
|
17
|
+
command_constructor.git_command.should include("--until='1 day from now'")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should construct git command containing --author option" do
|
21
|
+
command_constructor = GitLocTracker::CommandConstructor.new({author: "Janis"})
|
22
|
+
command_constructor.git_command.should include("--author='Janis'")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should construct git command containing path" do
|
26
|
+
command_constructor = GitLocTracker::CommandConstructor.new({path: "/home/user/app_root"})
|
27
|
+
command_constructor.git_command.should include("cd /home/user/app_root")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should construct git command containing search scope" do
|
31
|
+
command_constructor = GitLocTracker::CommandConstructor.new({search_scope: "lib bin"})
|
32
|
+
command_constructor.git_command.should include("lib bin")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not construct git command containing non-existing search scope directories" do
|
36
|
+
command_constructor = GitLocTracker::CommandConstructor.new({search_scope: "non_existing_1 non_existing_1"})
|
37
|
+
command_constructor.git_command.should_not include("non_existing")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should constrict git command containing modified line matching regexp" do
|
41
|
+
command_constructor = GitLocTracker::CommandConstructor.new({})
|
42
|
+
command_constructor.git_command.should include(GitLocTracker::CommandConstructor::NEW_CODE_REGEXP.source)
|
43
|
+
command_constructor.git_command.should include(GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP.source)
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GitLocTracker::CommandExecutor do
|
4
|
+
let(:spec_root) { File.expand_path(File.join(File.dirname(__FILE__), '..', '../../')) }
|
5
|
+
|
6
|
+
it "should initialize object with command attribute" do
|
7
|
+
GitLocTracker::CommandExecutor.new("git command").command.should == "git command"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should execute git command and return line array" do
|
11
|
+
executor = GitLocTracker::CommandExecutor.new("cd #{spec_root}/test_repo/ && git st")
|
12
|
+
executor.git_lines.should_not be_empty
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should raise GitCommandError if invalid git command is provided" do
|
16
|
+
executor = GitLocTracker::CommandExecutor.new("cd #{spec_root}/test_repo/ && git non_existing_command")
|
17
|
+
lambda { executor.git_lines }.should raise_error(GitLocTracker::CommandExecutor::GitCommandError)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GitLocTracker::LineParser do
|
4
|
+
it "should initialize object with command attribute" do
|
5
|
+
GitLocTracker::LineParser.new("line string").line.should == "line string"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should detect new line" do
|
9
|
+
source_line = "{+Some new line+}"
|
10
|
+
GitLocTracker::LineParser.new(source_line).is_new?.should be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should detect deleted line" do
|
14
|
+
source_line = "[-Some deleted line-]"
|
15
|
+
GitLocTracker::LineParser.new(source_line).is_deleted?.should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should detect modified line" do
|
19
|
+
source_line = "[-old deleted part-]{+replaced with new part+}"
|
20
|
+
GitLocTracker::LineParser.new(source_line).is_modified?.should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should detect modified line which also contains unmodified parts" do
|
24
|
+
source_line = "Some unmodified part [-old deleted part-]{+replaced with new part+}"
|
25
|
+
GitLocTracker::LineParser.new(source_line).is_modified?.should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not count modified line as deleted or new line" do
|
29
|
+
source_line = "[-old deleted part-]{+replaced with new part+}"
|
30
|
+
GitLocTracker::LineParser.new(source_line).is_new?.should be_false
|
31
|
+
GitLocTracker::LineParser.new(source_line).is_deleted?.should be_false
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
#spec/test_repo is a git repo containing file test_file which was initialized and commited 3 times:
|
4
|
+
#1) with 10 new lines
|
5
|
+
#2) with 5 modified lines
|
6
|
+
#3) with 5 deleted lines
|
7
|
+
|
8
|
+
describe GitLocTracker::Statistics do
|
9
|
+
|
10
|
+
TOTAL_LINES_AFFECTED_IN_TEST_REPO = 20
|
11
|
+
NEW_LINES_IN_TEST_REPO = 10
|
12
|
+
MODIFIED_LINES_IN_TEST_REPO = 5
|
13
|
+
DELETED_LINES_IN_TEST_REPO = 5
|
14
|
+
|
15
|
+
let(:default_git_options) do
|
16
|
+
{path: "#{File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))}/test_repo/",
|
17
|
+
from: "2012-10-31",
|
18
|
+
till: "2012-11-01",
|
19
|
+
author: "Janis",
|
20
|
+
search_scope: "test_file"}
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should receive git options in initializer" do
|
24
|
+
options = {option_1: 1, option_2: 2}
|
25
|
+
GitLocTracker::Statistics.new(options).git_command_options.should == options
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return correct git command" do
|
29
|
+
git_command = "cd /home/janis/code/git_loc_tracker/spec/test_repo/ && git log -p --word-diff --since='2012-10-31' --until='2012-11-01' --author='Janis' test_file | egrep '\\[\\-.*\\-\\]|\\{\\+.*\\+\\}'"
|
30
|
+
GitLocTracker::Statistics.new(default_git_options).send(:git_command).should == git_command
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return correct amount of changed line count in test_file" do
|
34
|
+
GitLocTracker::Statistics.new(default_git_options).send(:git_lines).count == TOTAL_LINES_AFFECTED_IN_TEST_REPO
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return correct amount of new lines in test_file" do
|
38
|
+
GitLocTracker::Statistics.new(default_git_options).new_line_count.should == NEW_LINES_IN_TEST_REPO
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return correct amount of deleted lines in test_file" do
|
42
|
+
GitLocTracker::Statistics.new(default_git_options).deleted_line_count.should == DELETED_LINES_IN_TEST_REPO
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return correct amount of modified lines in test_file" do
|
46
|
+
GitLocTracker::Statistics.new(default_git_options).modified_line_count.should == MODIFIED_LINES_IN_TEST_REPO
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'git_loc_tracker'
|
4
|
+
|
6
5
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
6
|
RSpec.configure do |config|
|
8
7
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
8
|
config.run_all_when_everything_filtered = true
|
10
9
|
config.filter_run :focus
|
11
|
-
|
12
|
-
# Run specs in random order to surface order dependencies. If you find an
|
13
|
-
# order dependency and want to debug it, you can fix the order by providing
|
14
|
-
# the seed, which is printed after each run.
|
15
|
-
# --seed 1234
|
16
10
|
config.order = 'random'
|
17
11
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_loc_tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: systemu
|
16
|
-
requirement: &
|
16
|
+
requirement: &85093350 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 2.5.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *85093350
|
25
25
|
description: Counts new, deleted and modified lines in git repository with ability
|
26
26
|
to pass various options
|
27
27
|
email:
|
@@ -40,6 +40,11 @@ files:
|
|
40
40
|
- MIT-LICENSE
|
41
41
|
- Rakefile
|
42
42
|
- README.md
|
43
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/command_executor_spec.rb
|
44
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/line_parser_spec.rb
|
45
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/command_constructor_spec.rb
|
46
|
+
- spec/git_loc_tracker/lib/git_loc_tracker_spec.rb
|
47
|
+
- spec/test_repo/test_file
|
43
48
|
- spec/spec_helper.rb
|
44
49
|
homepage: https://github.com/ithouse/git_loc_tracker
|
45
50
|
licenses: []
|
@@ -67,4 +72,9 @@ specification_version: 3
|
|
67
72
|
summary: Counts new, deleted and modified lines in git repository with ability to
|
68
73
|
pass various options
|
69
74
|
test_files:
|
75
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/command_executor_spec.rb
|
76
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/line_parser_spec.rb
|
77
|
+
- spec/git_loc_tracker/lib/git_loc_tracker/command_constructor_spec.rb
|
78
|
+
- spec/git_loc_tracker/lib/git_loc_tracker_spec.rb
|
79
|
+
- spec/test_repo/test_file
|
70
80
|
- spec/spec_helper.rb
|