hotspots 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -1
- data/README.md +1 -1
- data/TODO.md +2 -2
- data/bin/hotspots +1 -1
- data/lib/hotspots.rb +42 -23
- data/lib/hotspots/exit_strategy.rb +10 -38
- data/lib/hotspots/logger.rb +6 -2
- data/lib/hotspots/option_based_exit.rb +47 -0
- data/lib/hotspots/options_parser.rb +20 -14
- data/lib/hotspots/repository.rb +1 -0
- data/lib/hotspots/repository/command.rb +1 -0
- data/lib/hotspots/repository/command/git.rb +40 -0
- data/lib/hotspots/repository/driver/git.rb +11 -10
- data/lib/hotspots/repository/parser/git.rb +8 -4
- data/lib/hotspots/store.rb +1 -1
- data/lib/hotspots/version.rb +1 -1
- data/test/hotspots/options_parser_test.rb +2 -5
- data/test/hotspots/repository/command/git_test.rb +39 -0
- data/test/hotspots/repository/parser/git_test.rb +0 -2
- data/test/hotspots/store_test.rb +0 -2
- data/test/minitest_helper.rb +12 -6
- metadata +13 -2
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
v0.2.0
|
2
|
+
------
|
3
|
+
|
4
|
+
* Use default options when invoked as a library
|
5
|
+
* Restructure interfaces for Logger, ExitStrategy & Hotspots. The older classes, modules and methods are still available
|
6
|
+
|
1
7
|
v0.1.1
|
2
|
-
|
8
|
+
------
|
3
9
|
|
4
10
|
* Sort for an array of array via spaceship operator returns different result on each run on ruby 1.8.7. Store has a string representation breaks intermittently on 1.8.7. Tests fail intermittently on 1.8.7. So support for ruby 1.9.x only
|
5
11
|
* Simplify Rakefile
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ Specific options:
|
|
28
28
|
-t, --time [TIME] Time in days to scan the repository for. Defaults to fifteen
|
29
29
|
-r, --repository [PATH] Path to the repository to scan. Defaults to current path
|
30
30
|
-f, --file-filter [REGEX] Regular expression to filtering file names. All files are allowed when not specified
|
31
|
-
-m, --message-filter [PIPE SEPARATED]
|
31
|
+
-m, --message-filter [PIPE SEPARATED] Pipe separated values to filter files names against each commit message.
|
32
32
|
All files are allowed when not specified
|
33
33
|
-c, --cutoff [CUTOFF] The minimum occurrence to consider for a file to appear in the list. Defaults to zero
|
34
34
|
-v, --verbose Show verbose output
|
data/TODO.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
* Allow better use as a library - add documentation
|
2
|
-
*
|
3
|
-
* Hotspots#initialize validates presence of mandatory arguments - useful when used as library
|
2
|
+
* Reduce conditionals
|
4
3
|
* Optional support for colors
|
4
|
+
* Remove compatibility layers in a major release
|
data/bin/hotspots
CHANGED
data/lib/hotspots.rb
CHANGED
@@ -6,54 +6,73 @@ require 'hotspots/repository'
|
|
6
6
|
|
7
7
|
module Hotspots
|
8
8
|
class Main
|
9
|
-
attr_reader :logger, :
|
10
|
-
:exit_strategy, :driver, :parser, :store
|
9
|
+
attr_reader :logger, :repository, :verbose,
|
10
|
+
:exit_strategy, :driver, :parser, :store,
|
11
|
+
:time, :message_filters, :file_filter, :cutoff
|
11
12
|
|
13
|
+
# TODO : change this signature - this method should get resolved options as parameters
|
14
|
+
# initialize is not responsible for invoking option parsing
|
12
15
|
def initialize(opts = nil)
|
13
|
-
|
14
|
-
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
16
|
+
options = opts.nil? ? Hotspots::OptionsParser.new.parse(*ARGV) : Hotspots::OptionsParser.default_options.merge(opts)
|
17
|
+
|
18
|
+
@logger = Hotspots::Logger.new
|
19
|
+
@repository = options[:repository]
|
20
|
+
@verbose = options[:verbose]
|
21
|
+
@exit_strategy = options[:exit_strategy]
|
22
|
+
|
23
|
+
@time = options[:time]
|
24
|
+
@message_filters = options[:message_filters]
|
25
|
+
@file_filter = options[:file_filter]
|
26
|
+
@cutoff = options[:cutoff]
|
18
27
|
end
|
19
28
|
|
20
|
-
def
|
21
|
-
validate
|
29
|
+
def output
|
30
|
+
validate
|
22
31
|
set
|
23
32
|
run
|
24
33
|
end
|
25
34
|
|
26
|
-
|
27
|
-
|
28
|
-
|
35
|
+
# TODO : this method should be private
|
36
|
+
def validate #:nodoc:
|
37
|
+
exit_if_options_are_for_help
|
38
|
+
exit_if_not_git_repository
|
29
39
|
end
|
30
40
|
|
31
|
-
|
32
|
-
|
41
|
+
# TODO : this method should be private
|
42
|
+
def set #:nodoc:
|
43
|
+
set_logger_if_verbose
|
33
44
|
set_path
|
34
45
|
assign
|
35
46
|
end
|
36
47
|
|
37
|
-
|
48
|
+
# TODO : this method should be private
|
49
|
+
def run #:nodoc:
|
38
50
|
puts store.to_s
|
39
51
|
end
|
40
52
|
|
53
|
+
# TODO : these methods should be private
|
54
|
+
# compatibility begin
|
55
|
+
alias_method :execute!, :output
|
56
|
+
alias_method :validate!, :validate
|
57
|
+
# compatibility end
|
58
|
+
|
41
59
|
private
|
42
60
|
|
43
|
-
def
|
61
|
+
def exit_if_options_are_for_help
|
44
62
|
exit_strategy.perform
|
45
63
|
end
|
46
64
|
|
47
|
-
def
|
48
|
-
|
65
|
+
def exit_if_not_git_repository
|
66
|
+
output = `git status 2>&1`
|
67
|
+
unless $? == 0
|
49
68
|
puts "'#{repository}' doesn't seem to be a git repository!"
|
50
69
|
exit 10
|
51
70
|
end
|
52
71
|
end
|
53
72
|
|
54
|
-
def
|
73
|
+
def set_logger_if_verbose
|
55
74
|
if verbose
|
56
|
-
logger.
|
75
|
+
logger.as_console
|
57
76
|
end
|
58
77
|
end
|
59
78
|
|
@@ -62,9 +81,9 @@ module Hotspots
|
|
62
81
|
end
|
63
82
|
|
64
83
|
def assign
|
65
|
-
@driver
|
66
|
-
@parser
|
67
|
-
@store
|
84
|
+
@driver = Hotspots::Repository::Driver::Git.new logger
|
85
|
+
@parser = Hotspots::Repository::Parser::Git.new driver, :time => time, :message_filters => message_filters
|
86
|
+
@store = Hotspots::Store.new parser.files, :cutoff => cutoff, :file_filter => file_filter
|
68
87
|
end
|
69
88
|
end
|
70
89
|
end
|
@@ -1,41 +1,13 @@
|
|
1
|
+
# compatibility begin
|
1
2
|
module Hotspots
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def perform
|
11
|
-
puts @message
|
12
|
-
exit @code
|
13
|
-
end
|
14
|
-
|
15
|
-
class Safe
|
16
|
-
attr_reader :code, :message
|
17
|
-
|
18
|
-
def initialize(options)
|
19
|
-
@message = options[:message]
|
20
|
-
@code = 0
|
21
|
-
end
|
22
|
-
|
23
|
-
def perform
|
24
|
-
puts @message
|
25
|
-
exit @code
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Null
|
30
|
-
attr_reader :code, :message
|
31
|
-
|
32
|
-
def initialize(options = {})
|
33
|
-
@message = ""
|
34
|
-
@code = nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def perform
|
38
|
-
end
|
39
|
-
end
|
3
|
+
module OptionBasedExit #:nodoc: all
|
4
|
+
class Error; end
|
5
|
+
class Safe; end
|
6
|
+
class Noop; end
|
7
|
+
|
8
|
+
ExitStrategy = Error
|
9
|
+
ExitStrategy::Safe = Safe
|
10
|
+
ExitStrategy::Null = Noop
|
40
11
|
end
|
41
12
|
end
|
13
|
+
# compatibility end
|
data/lib/hotspots/logger.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Hotspots
|
2
|
-
class Logger
|
2
|
+
class Logger #:nodoc: all
|
3
3
|
class Console
|
4
4
|
def self.<<(message)
|
5
5
|
$stdout << message
|
@@ -16,10 +16,14 @@ module Hotspots
|
|
16
16
|
@sink = Null
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def as_console
|
20
20
|
@sink = Console
|
21
21
|
end
|
22
22
|
|
23
|
+
# compatibility begin
|
24
|
+
alias_method :set_console, :as_console
|
25
|
+
# compatibility end
|
26
|
+
|
23
27
|
def log(message)
|
24
28
|
@sink << format(message)
|
25
29
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hotspots
|
2
|
+
module OptionBasedExit #:nodoc: all
|
3
|
+
class Error
|
4
|
+
attr_reader :code, :message
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
@message = options[:message]
|
8
|
+
@code = options[:code]
|
9
|
+
end
|
10
|
+
|
11
|
+
def perform
|
12
|
+
puts @message
|
13
|
+
exit @code
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Safe
|
18
|
+
attr_reader :code, :message
|
19
|
+
|
20
|
+
def initialize(options)
|
21
|
+
@message = options[:message]
|
22
|
+
@code = 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def perform
|
26
|
+
puts @message
|
27
|
+
exit @code
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Noop
|
32
|
+
attr_reader :code, :message
|
33
|
+
|
34
|
+
def initialize(options = {})
|
35
|
+
@message = ""
|
36
|
+
@code = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def perform
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# compatibility begin
|
46
|
+
require 'hotspots/exit_strategy'
|
47
|
+
# compatibility end
|
@@ -1,20 +1,26 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
|
3
3
|
require 'hotspots/version'
|
4
|
-
require 'hotspots/
|
4
|
+
require 'hotspots/option_based_exit'
|
5
5
|
|
6
6
|
module Hotspots
|
7
|
-
class OptionsParser
|
7
|
+
class OptionsParser #:nodoc: all
|
8
|
+
class << self
|
9
|
+
def default_options
|
10
|
+
{
|
11
|
+
:time => 15,
|
12
|
+
:repository => ".",
|
13
|
+
:file_filter => "",
|
14
|
+
:message_filters => [""],
|
15
|
+
:cutoff => 0,
|
16
|
+
:verbose => false,
|
17
|
+
:exit_strategy => OptionBasedExit::Noop.new
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
8
22
|
def initialize
|
9
|
-
@options =
|
10
|
-
:time => 15,
|
11
|
-
:repository => ".",
|
12
|
-
:file_filter => "",
|
13
|
-
:message_filters => [""],
|
14
|
-
:cutoff => 0,
|
15
|
-
:verbose => false,
|
16
|
-
:exit_strategy => ExitStrategy::Null.new
|
17
|
-
}
|
23
|
+
@options = self.class.default_options
|
18
24
|
end
|
19
25
|
|
20
26
|
def parse(*args)
|
@@ -22,7 +28,7 @@ module Hotspots
|
|
22
28
|
begin
|
23
29
|
parser.parse args
|
24
30
|
rescue ::OptionParser::InvalidOption, ::OptionParser::InvalidArgument => ex
|
25
|
-
@options[:exit_strategy] =
|
31
|
+
@options[:exit_strategy] = OptionBasedExit::Error.new(:code => 1, :message => (ex.to_s << "\nUse -h for help\n"))
|
26
32
|
end
|
27
33
|
@options
|
28
34
|
end
|
@@ -83,7 +89,7 @@ module Hotspots
|
|
83
89
|
|
84
90
|
def handle_message_filter_on(opts)
|
85
91
|
opts.on("-m", "--message-filter [PIPE SEPARATED]", String,
|
86
|
-
"Pipe separated values to filter files names against each commit message
|
92
|
+
"Pipe separated values to filter files names against each commit message.",
|
87
93
|
"All files are allowed when not specified") do |o|
|
88
94
|
@options[:message_filters] = o.to_s.split("|")
|
89
95
|
end
|
@@ -106,7 +112,7 @@ module Hotspots
|
|
106
112
|
def handle_help_on(opts)
|
107
113
|
opts.on_tail("-h", "--help",
|
108
114
|
"Show this message") do
|
109
|
-
@options[:exit_strategy] =
|
115
|
+
@options[:exit_strategy] = OptionBasedExit::Safe.new(:message => opts.to_s)
|
110
116
|
end
|
111
117
|
end
|
112
118
|
end
|
data/lib/hotspots/repository.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require 'hotspots/repository/command/git'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Hotspots
|
2
|
+
module Repository #:nodoc: all
|
3
|
+
module Command
|
4
|
+
module Git
|
5
|
+
class Log
|
6
|
+
attr_reader :since_days, :message_filter
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@since_days = options[:since_days]
|
10
|
+
@message_filter = options[:message_filter].to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def build
|
14
|
+
"git log --pretty=\"%H\" #{since_clause}#{grep_clause}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def since_clause
|
18
|
+
"--since=\"#{since_days} days ago\""
|
19
|
+
end
|
20
|
+
|
21
|
+
def grep_clause
|
22
|
+
message_filter.empty? ? "" : " --grep \"#{message_filter}\""
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Show
|
27
|
+
attr_reader :commit_hash
|
28
|
+
|
29
|
+
def initialize(options)
|
30
|
+
@commit_hash = options[:commit_hash]
|
31
|
+
end
|
32
|
+
|
33
|
+
def build
|
34
|
+
"git show --oneline --name-only #{commit_hash}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Hotspots
|
2
|
-
module Repository
|
2
|
+
module Repository #:nodoc: all
|
3
3
|
module Driver
|
4
4
|
class Git
|
5
5
|
attr_reader :logger
|
@@ -8,19 +8,20 @@ module Hotspots
|
|
8
8
|
@logger = logger
|
9
9
|
end
|
10
10
|
|
11
|
+
# Input and output should be optionally coloured
|
11
12
|
def pretty_log(options)
|
12
|
-
|
13
|
-
|
14
|
-
tap {|raw| logger.log "<Input>\n#{raw}\n</Input>"}
|
15
|
-
%x(#{command}).
|
16
|
-
tap {|raw| logger.log "<Output>\n#{raw}\n</Output>"}
|
13
|
+
command = log_with_tag("Input") { Command::Git::Log.new(:since_days => options[:since_days], :message_filter => options[:message_filter]).build }
|
14
|
+
log_with_tag("Output") { %x(#{command}) }
|
17
15
|
end
|
18
16
|
|
17
|
+
# Input and output should be optionally coloured
|
19
18
|
def show_one_line_names(options)
|
20
|
-
command =
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
command = log_with_tag("Input") { Command::Git::Show.new(:commit_hash => options[:commit_hash]).build }
|
20
|
+
log_with_tag("Output") { %x(#{command}) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_with_tag(tag, &block)
|
24
|
+
yield.tap { |raw| logger.log "<#{tag}>\n#{raw}<#{tag}/>" }
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -1,25 +1,29 @@
|
|
1
1
|
module Hotspots
|
2
|
-
module Repository
|
2
|
+
module Repository #:nodoc: all
|
3
3
|
module Parser
|
4
4
|
class Git
|
5
|
+
attr_reader :driver, :time, :message_filters
|
6
|
+
|
5
7
|
def initialize(driver, options)
|
6
8
|
@driver = driver
|
7
9
|
@time = options[:time]
|
8
10
|
@message_filters = options[:message_filters]
|
9
11
|
end
|
10
12
|
|
13
|
+
# TODO : replace with each_line
|
11
14
|
def files
|
12
15
|
filtered_commit_hashes.map do |commit_hash|
|
13
|
-
|
16
|
+
driver.show_one_line_names(:commit_hash => commit_hash).
|
14
17
|
gsub("\r\n", "\n").
|
15
18
|
gsub("\r", "\n").
|
16
19
|
split("\n")[1..-1]
|
17
20
|
end.flatten
|
18
21
|
end
|
19
22
|
|
23
|
+
# TODO : replace with each_line
|
20
24
|
def filtered_commit_hashes
|
21
|
-
|
22
|
-
|
25
|
+
message_filters.map do |filter|
|
26
|
+
driver.pretty_log(:since_days => time, :message_filter => filter).
|
23
27
|
gsub("\r\n", "\n").
|
24
28
|
gsub("\r", "\n").
|
25
29
|
split("\n")
|
data/lib/hotspots/store.rb
CHANGED
data/lib/hotspots/version.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib', 'hotspots', 'exit_strategy')
|
2
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib', 'hotspots', 'options_parser')
|
3
|
-
|
4
1
|
require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'minitest_helper')
|
5
2
|
|
6
3
|
module Hotspots
|
@@ -123,7 +120,7 @@ module Hotspots
|
|
123
120
|
end
|
124
121
|
end
|
125
122
|
|
126
|
-
describe "on
|
123
|
+
describe "on an invalid option" do
|
127
124
|
before do
|
128
125
|
@options = @parser.parse("--invalid-option")
|
129
126
|
end
|
@@ -137,7 +134,7 @@ module Hotspots
|
|
137
134
|
end
|
138
135
|
end
|
139
136
|
|
140
|
-
describe "on
|
137
|
+
describe "on an invalid argument" do
|
141
138
|
before do
|
142
139
|
@options = @parser.parse("--repo", "")
|
143
140
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', '..', 'minitest_helper')
|
2
|
+
|
3
|
+
module Hotspots::Repository
|
4
|
+
describe "Command::Git" do
|
5
|
+
describe "Log" do
|
6
|
+
describe "#build" do
|
7
|
+
describe "when message filter exists" do
|
8
|
+
it "includes a grep clause" do
|
9
|
+
log_command = Command::Git::Log.new :since_days => 20, :message_filter => "Foo|Bar"
|
10
|
+
log_command.build.must_equal 'git log --pretty="%H" --since="20 days ago" --grep "Foo|Bar"'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "when message filter doesn't exist" do
|
15
|
+
it "doesn't have a grep clause" do
|
16
|
+
log_command = Command::Git::Log.new :since_days => 20
|
17
|
+
log_command.build.must_equal 'git log --pretty="%H" --since="20 days ago"'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when message filter is set to an empty string" do
|
22
|
+
it "grep clause is ignored" do
|
23
|
+
log_command = Command::Git::Log.new :since_days => 20, :message_filter => ""
|
24
|
+
log_command.build.must_equal 'git log --pretty="%H" --since="20 days ago"'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "Show" do
|
31
|
+
describe "#build" do
|
32
|
+
it "constructs a git show with one-line format" do
|
33
|
+
show_command = Command::Git::Show.new :commit_hash => "abc123"
|
34
|
+
show_command.build.must_equal 'git show --oneline --name-only abc123'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/test/hotspots/store_test.rb
CHANGED
data/test/minitest_helper.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
lib = File.expand_path('../../lib/', __FILE__)
|
2
|
+
$:.unshift lib unless $:.include?(lib)
|
3
|
+
|
4
|
+
if ENV["coverage"] == "true"
|
5
|
+
begin
|
6
|
+
require 'simplecov'
|
7
|
+
SimpleCov.start do
|
8
|
+
add_filter "/test/"
|
9
|
+
end
|
10
|
+
rescue LoadError
|
11
|
+
puts "\nPlease install simplecov to generate coverage report!\n\n"
|
5
12
|
end
|
6
|
-
rescue LoadError
|
7
|
-
puts "\nPlease install simplecov to generate coverage report!\n\n"
|
8
13
|
end
|
9
14
|
|
10
15
|
# eager load all files
|
@@ -12,6 +17,7 @@ Dir["lib/**/*.rb"].each do |file|
|
|
12
17
|
require File.expand_path(file)
|
13
18
|
end
|
14
19
|
|
20
|
+
require_relative "../lib/hotspots"
|
15
21
|
|
16
22
|
require 'minitest/autorun'
|
17
23
|
require 'minitest/spec'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotspots
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -77,7 +77,10 @@ extra_rdoc_files: []
|
|
77
77
|
files:
|
78
78
|
- lib/hotspots/exit_strategy.rb
|
79
79
|
- lib/hotspots/logger.rb
|
80
|
+
- lib/hotspots/option_based_exit.rb
|
80
81
|
- lib/hotspots/options_parser.rb
|
82
|
+
- lib/hotspots/repository/command/git.rb
|
83
|
+
- lib/hotspots/repository/command.rb
|
81
84
|
- lib/hotspots/repository/driver/git.rb
|
82
85
|
- lib/hotspots/repository/driver.rb
|
83
86
|
- lib/hotspots/repository/parser/git.rb
|
@@ -88,6 +91,7 @@ files:
|
|
88
91
|
- lib/hotspots.rb
|
89
92
|
- bin/hotspots
|
90
93
|
- test/hotspots/options_parser_test.rb
|
94
|
+
- test/hotspots/repository/command/git_test.rb
|
91
95
|
- test/hotspots/repository/parser/git_test.rb
|
92
96
|
- test/hotspots/store_test.rb
|
93
97
|
- test/minitest_helper.rb
|
@@ -107,12 +111,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
111
|
- - ! '>='
|
108
112
|
- !ruby/object:Gem::Version
|
109
113
|
version: '0'
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
hash: 1394833690291643919
|
110
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
118
|
none: false
|
112
119
|
requirements:
|
113
120
|
- - ! '>='
|
114
121
|
- !ruby/object:Gem::Version
|
115
122
|
version: '0'
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
hash: 1394833690291643919
|
116
126
|
requirements: []
|
117
127
|
rubyforge_project: hotspots
|
118
128
|
rubygems_version: 1.8.24
|
@@ -121,6 +131,7 @@ specification_version: 3
|
|
121
131
|
summary: Find all files that changed over the past in a git repository based on conditions
|
122
132
|
test_files:
|
123
133
|
- test/hotspots/options_parser_test.rb
|
134
|
+
- test/hotspots/repository/command/git_test.rb
|
124
135
|
- test/hotspots/repository/parser/git_test.rb
|
125
136
|
- test/hotspots/store_test.rb
|
126
137
|
- test/minitest_helper.rb
|