git_loc_tracker 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea
6
+ .rvmrc
7
+ .rspec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in git_loc_tracker.gemspec
4
+ gemspec
data/README.md ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'git_loc_tracker'
5
+
6
+ options = {:search_scope => "app config extras db lib spec Gemfile", path: Dir.pwd}
7
+
8
+ option_parser = OptionParser.new do |opts|
9
+ opts.banner = "Usage: [options]"
10
+
11
+ opts.on("-p", "--path PATH", "Specify path to rails project (MANDATORY)") do |path|
12
+ options[:path] = path
13
+ end
14
+ opts.on("-f", "--from TIME", "Specify from date ex. '2012-10-29' (OPTIONAL)") do |time|
15
+ options[:from] = time
16
+ end
17
+ opts.on("-t", "--till TIME", "Specify till date ex. '2012-10-29 12:44:01' (OPTIONAL)") do |time|
18
+ options[:till] = time
19
+ end
20
+ opts.on("-u", "--author AUTHOR", "Specify git author (OPTIONAL)") do |author|
21
+ options[:author] = author
22
+ end
23
+ opts.on("-s", "--searchscope DIRS", "Specify search scope for which to gather statistics, default: 'app config extras' (OPTIONAL)") do |search_scope|
24
+ options[:search_scope] = search_scope
25
+ end
26
+
27
+ opts.on_tail("-h", "--help", "Show this message") do
28
+ puts opts
29
+ exit
30
+ end
31
+
32
+
33
+ end
34
+ option_parser.parse!
35
+
36
+ statistics = GitLocTracker::Statistics.new(options)
37
+ p statistics.print_statistics
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "git_loc_tracker/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "git_loc_tracker"
7
+ s.version = GitLocTracker::VERSION
8
+ s.authors = ["ITHouse (Latvia) and Janis Kesteris"]
9
+ s.email = ["janisk@ithouse.lv"]
10
+ s.homepage = "https://github.com/Janziz/git_loc_tracker"
11
+ s.summary = %q{Counts new, deleted and modified lines in git repository with ability to pass various options}
12
+ s.description = %q{Counts new, deleted and modified lines in git repository with ability to pass various options}
13
+
14
+ s.rubyforge_project = "git_loc_tracker"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "rspec"
23
+ s.add_development_dependency "debugger"
24
+ s.add_runtime_dependency "systemu", "~> 2.5.2"
25
+ end
@@ -0,0 +1,48 @@
1
+ module GitLocTracker
2
+ class CommandConstructor
3
+
4
+ attr_accessor :options
5
+
6
+ NEW_CODE_REGEXP = /\{\+.*\+\}/
7
+ DELETED_CODE_REGEXP = /\[\-.*\-\]/
8
+
9
+ def initialize options
10
+ @options = options
11
+ end
12
+
13
+ def git_command
14
+ command_parts = []
15
+ options.each do |name, argument|
16
+ command_parts << get_command_part(name, argument)
17
+ end
18
+ "cd #{options[:path]} && git log -p --word-diff #{command_parts.join(" ")} #{existing_search_scope} | egrep '#{modified_line_parser_regexp}'"
19
+ end
20
+
21
+ private
22
+
23
+ def get_command_part name, argument
24
+ case name
25
+ when :from
26
+ "--since='#{options[:from]}'"
27
+ when :till
28
+ "--until='#{options[:till]}'"
29
+ when :author
30
+ "--author='#{options[:author]}'"
31
+ else
32
+ ""
33
+ end
34
+ end
35
+
36
+ def existing_search_scope
37
+ scope_parts = options[:search_scope].split(" ")
38
+ existing_scope_dirs = scope_parts.select { |dir| File.exist?("#{options[:path]}/#{dir}") }
39
+ existing_scope_dirs.join(" ")
40
+ end
41
+
42
+
43
+ def modified_line_parser_regexp
44
+ "#{GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP.source}|#{GitLocTracker::CommandConstructor::NEW_CODE_REGEXP.source}"
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,3 @@
1
+ module GitLocTracker
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,70 @@
1
+ require "git_loc_tracker/version"
2
+ require "git_loc_tracker/command_constructor"
3
+ require 'systemu'
4
+
5
+ module GitLocTracker
6
+
7
+ class Statistics
8
+ class GitCommandError < StandardError
9
+ end
10
+
11
+ attr_accessor :git_lines, :git_command
12
+
13
+ def initialize options
14
+ @git_command = GitLocTracker::CommandConstructor.new(options).git_command
15
+ end
16
+
17
+ def print_statistics
18
+ set_raw_git_lines
19
+ puts "********************************"
20
+ puts "New lines: #{new_line_count}"
21
+ puts "Deleted lines: #{deleted_line_count}"
22
+ puts "Modified lines: #{modified_line_count}"
23
+ puts "********************************"
24
+ end
25
+
26
+ def new_line_count
27
+ git_lines.count do |line|
28
+ is_new? line
29
+ end
30
+ end
31
+
32
+ def deleted_line_count
33
+ git_lines.count do |line|
34
+ is_deleted? line
35
+ end
36
+ end
37
+
38
+ def modified_line_count
39
+ git_lines.count do |line|
40
+ is_modified? line
41
+ end
42
+ end
43
+
44
+ def is_new?(line)
45
+ line.strip.gsub(GitLocTracker::CommandConstructor::NEW_CODE_REGEXP, "").size == 0
46
+ end
47
+
48
+ def is_deleted?(line)
49
+ line.strip.gsub(GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP, "").size == 0
50
+ end
51
+
52
+ def is_modified? line
53
+ line.strip.gsub(GitLocTracker::CommandConstructor::DELETED_CODE_REGEXP, "").size > 0 ||
54
+ line.strip.gsub(GitLocTracker::CommandConstructor::NEW_CODE_REGEXP, "").size > 0
55
+ end
56
+
57
+ def set_raw_git_lines
58
+ stdin, stdout, stderr = systemu git_command
59
+ raise_if_error(stderr)
60
+ self.git_lines = stdout.split("\n")
61
+ end
62
+
63
+ def raise_if_error(stderr)
64
+ unless stderr.empty?
65
+ raise GitCommandError, stderr
66
+ end
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ 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
+ config.order = 'random'
17
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git_loc_tracker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - ITHouse (Latvia) and Janis Kesteris
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-11 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &72725250 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *72725250
25
+ - !ruby/object:Gem::Dependency
26
+ name: debugger
27
+ requirement: &72725020 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *72725020
36
+ - !ruby/object:Gem::Dependency
37
+ name: systemu
38
+ requirement: &72724760 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 2.5.2
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *72724760
47
+ description: Counts new, deleted and modified lines in git repository with ability
48
+ to pass various options
49
+ email:
50
+ - janisk@ithouse.lv
51
+ executables:
52
+ - git-loc-tracker
53
+ extensions: []
54
+ extra_rdoc_files: []
55
+ files:
56
+ - .gitignore
57
+ - Gemfile
58
+ - README.md
59
+ - Rakefile
60
+ - bin/git-loc-tracker
61
+ - git_loc_tracker.gemspec
62
+ - lib/git_loc_tracker.rb
63
+ - lib/git_loc_tracker/command_constructor.rb
64
+ - lib/git_loc_tracker/version.rb
65
+ - spec/spec_helper.rb
66
+ homepage: https://github.com/Janziz/git_loc_tracker
67
+ licenses: []
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project: git_loc_tracker
86
+ rubygems_version: 1.8.10
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Counts new, deleted and modified lines in git repository with ability to
90
+ pass various options
91
+ test_files: []