hotspots 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
+ coverage
1
2
  *.gem
@@ -0,0 +1,18 @@
1
+ v0.0.10
2
+ -------
3
+
4
+ * Handle '\r' line endings
5
+ * *Don't disregard file-name case*
6
+ * Tests and coverage via rake
7
+
8
+ v0.0.9
9
+ ------
10
+
11
+ * Add installation procedure
12
+ * Change website link
13
+ * Bump up version
14
+
15
+ v0.0.8
16
+ ------
17
+
18
+ * Initial release
data/README.markdown CHANGED
@@ -57,7 +57,7 @@ Running tests
57
57
  Clone the repository and run the following command from the repository.
58
58
 
59
59
  ``` script
60
- ruby test/hotspots_test.rb
60
+ rake
61
61
  ```
62
62
 
63
63
  License
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ def load_all_tests
2
+ require 'rake/runtest'
3
+ require 'minitest/autorun'
4
+ require 'minitest/spec'
5
+
6
+ lib = File.expand_path(File.dirname(__FILE__) + '/lib')
7
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
8
+ end
9
+
10
+ def run_all_tests
11
+ Dir[File.join(File.expand_path(File.dirname(__FILE__)), "test", "**", "*_test.rb")].each do |file|
12
+ Rake.run_tests file
13
+ end
14
+ end
15
+
16
+ task :test do
17
+ load_all_tests
18
+ run_all_tests
19
+ end
20
+
21
+ task :coverage do
22
+ require 'simplecov'
23
+
24
+ SimpleCov.start do
25
+ add_filter "/test/"
26
+ end
27
+
28
+ load_all_tests
29
+
30
+ Dir[File.join(File.expand_path(File.dirname(__FILE__)), "lib", "**", "*.rb")].each do |file|
31
+ require file
32
+ end
33
+
34
+ run_all_tests
35
+ end
36
+
37
+ task :default => [:test]
data/bin/hotspots CHANGED
@@ -5,4 +5,4 @@ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
5
 
6
6
  require 'hotspots'
7
7
 
8
- Repository::Main.new.execute!
8
+ Hotspots::Main.new.execute!
data/lib/hotspots.rb CHANGED
@@ -4,19 +4,19 @@ require 'hotspots/store'
4
4
  require 'hotspots/options_parser'
5
5
  require 'hotspots/repository'
6
6
 
7
- module Repository
7
+ module Hotspots
8
8
  class Main
9
9
  attr_reader :logger, :options, :repository, :verbose,
10
10
  :exit_code, :exit_message,
11
11
  :driver, :parser, :store
12
12
 
13
13
  def initialize
14
- @logger = Hotspots::Logger.new
15
14
  @options = Hotspots::OptionsParser.new.parse(*ARGV)
16
15
  @repository = options[:repository]
17
16
  @verbose = options[:verbose]
18
17
  @exit_code = options[:exit][:code]
19
18
  @exit_message = options[:exit][:message]
19
+ @logger = Hotspots::Logger.new
20
20
  end
21
21
 
22
22
  def execute!
@@ -58,7 +58,7 @@ module Repository
58
58
 
59
59
  def set_logger
60
60
  if verbose
61
- logger.set Hotspots::Logger::Console
61
+ logger.set_console
62
62
  end
63
63
  end
64
64
 
@@ -11,17 +11,17 @@ module Hotspots
11
11
  end
12
12
  end
13
13
 
14
- attr_reader :drain
14
+ attr_reader :sink
15
15
  def initialize
16
- @drain = Null
16
+ @sink = Null
17
17
  end
18
18
 
19
- def set(logger)
20
- @drain = logger
19
+ def set_console
20
+ @sink = Console
21
21
  end
22
22
 
23
23
  def log(message)
24
- @drain << format(message)
24
+ @sink << format(message)
25
25
  end
26
26
 
27
27
  def format(message)
@@ -48,9 +48,10 @@ module Hotspots
48
48
  end
49
49
 
50
50
  def set_banner_on(opts)
51
- opts.banner = "Tool to find most modified files over the past few days in a git repository. version #{::Hotspots::VERSION}"
51
+ opts.banner = "Tool to find most modified files over the past few days in a git repository."
52
52
 
53
- opts.separator "Copyright (C) 2011 Chirantan Mitra"
53
+ opts.separator "Version #{::Hotspots::VERSION}"
54
+ opts.separator "Copyright (C) 2011-2012 Chirantan Mitra"
54
55
  opts.separator ""
55
56
  opts.separator "Usage: ruby hotspots [options]"
56
57
  opts.separator ""
@@ -73,14 +74,16 @@ module Hotspots
73
74
 
74
75
  def handle_file_filter_on(opts)
75
76
  opts.on("-f", "--file-filter [REGEX]", String,
76
- "Regular expression to filtering file names. All files are allowed when not specified") do |o|
77
+ "Regular expression to filtering file names.",
78
+ "All files are allowed when not specified") do |o|
77
79
  @options[:file_filter] = o.to_s
78
80
  end
79
81
  end
80
82
 
81
83
  def handle_message_filter_on(opts)
82
84
  opts.on("-m", "--message-filter [PIPE SEPARATED]", String,
83
- "Pipe separated values to filter files names against each commit message separated by pipe. All files are allowed when not specified") do |o|
85
+ "Pipe separated values to filter files names against each commit message separated by pipe.",
86
+ "All files are allowed when not specified") do |o|
84
87
  @options[:message_filters] = o.to_s.split("|")
85
88
  end
86
89
  end
@@ -13,7 +13,6 @@ module Hotspots
13
13
  .tap {|raw| logger.log "<Input> #{raw}"}
14
14
  %x(#{command})
15
15
  .tap {|raw| logger.log raw}
16
- .gsub("\r", "")
17
16
  end
18
17
 
19
18
  def show_one_line_names(options)
@@ -21,7 +20,6 @@ module Hotspots
21
20
  .tap {|raw| logger.log "<Input> #{raw}"}
22
21
  %x(#{command})
23
22
  .tap {|raw| logger.log "<Output> #{raw}"}
24
- .gsub("\r", "")
25
23
  end
26
24
  end
27
25
  end
@@ -10,13 +10,19 @@ module Hotspots
10
10
 
11
11
  def files
12
12
  filtered_commit_hashes.map do |commit_hash|
13
- @driver.show_one_line_names(:commit_hash => commit_hash).split("\n")[1..-1]
13
+ @driver.show_one_line_names(:commit_hash => commit_hash)
14
+ .gsub("\r\n", "\n")
15
+ .gsub("\r", "\n")
16
+ .split("\n")[1..-1]
14
17
  end.flatten
15
18
  end
16
19
 
17
20
  def filtered_commit_hashes
18
21
  @message_filters.map do |filter|
19
- @driver.pretty_log(:since_days => @time, :message_filter => filter).split("\n")
22
+ @driver.pretty_log(:since_days => @time, :message_filter => filter)
23
+ .gsub("\r\n", "\n")
24
+ .gsub("\r", "\n")
25
+ .split("\n")
20
26
  end.flatten.uniq
21
27
  end
22
28
  end
@@ -6,7 +6,7 @@ module Hotspots
6
6
  @cutoff = options[:cutoff] || 0
7
7
  @filter = options[:file_filter] || ""
8
8
 
9
- @lines.map { |line| line.strip.downcase }
9
+ @lines.map { |line| line.strip }
10
10
  .select{ |line| not line.empty? and line =~ Regexp.new(@filter) }
11
11
  .each { |line| @store[line] += 1 }
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module Hotspots
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -1,5 +1,4 @@
1
- require 'hotspots/logger'
2
- require 'hotspots/options_parser'
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib', 'hotspots', 'options_parser')
3
2
 
4
3
  module Hotspots
5
4
  describe "OptionsParser" do
@@ -1,4 +1,4 @@
1
- require 'hotspots/repository/parser/git'
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', '..', '..', 'lib', 'hotspots', 'repository', 'parser', 'git')
2
2
 
3
3
  module Hotspots::Repository
4
4
  describe "Parser::Git test" do
@@ -16,7 +16,7 @@ module Hotspots::Repository
16
16
 
17
17
  it "fetches multiple commit hashes" do
18
18
  options = {:time => 10, :message_filters => ["Foo", "Bar"]}
19
- git_parser = Parser::Git.new StubGitDriver, options
19
+ git_parser = Parser::Git.new StubGitDriver.new, options
20
20
 
21
21
  git_parser.filtered_commit_hashes.must_equal(["SHA1", "SHA2", "SHA3"])
22
22
  end
@@ -36,39 +36,60 @@ module Hotspots::Repository
36
36
 
37
37
  it "finds all affected files for multiple commit messages" do
38
38
  options = {:time => 10, :message_filters => ["Foo", "Bar"]}
39
- git_parser = Parser::Git.new StubGitDriver, options
39
+ git_parser = Parser::Git.new StubGitDriver.new, options
40
40
 
41
41
  git_parser.files.must_equal(["file1", "file2", "file2", "file3", "file5", "file4"])
42
42
  end
43
+
44
+ describe "handles line ending" do
45
+ it "of type \r\n" do
46
+ options = {:time => 10, :message_filters => ["Foo", "Bar"]}
47
+ git_parser = Parser::Git.new StubGitDriver.new(:line_ending => "\r\n"), options
48
+
49
+ git_parser.files.must_equal(["file1", "file2", "file2", "file3", "file5", "file4"])
50
+ end
51
+
52
+ it "of type \r" do
53
+ options = {:time => 10, :message_filters => ["Foo", "Bar"]}
54
+ git_parser = Parser::Git.new StubGitDriver.new(:line_ending => "\r"), options
55
+
56
+ git_parser.files.must_equal(["file1", "file2", "file2", "file3", "file5", "file4"])
57
+ end
58
+ end
43
59
  end
44
60
 
45
61
  describe "git driver stub" do
46
- it "pretty log is sane" do
47
- StubGitDriver.pretty_log(:time => 10, :message_filter => "Foo").must_equal "SHA1\nSHA2"
48
- StubGitDriver.pretty_log(:time => 10, :message_filter => "Bar").must_equal "SHA2\nSHA3"
62
+ it "has a sane pretty log" do
63
+ driver = StubGitDriver.new
64
+ driver.pretty_log(:time => 10, :message_filter => "Foo").must_equal "SHA1\nSHA2"
65
+ driver.pretty_log(:time => 10, :message_filter => "Bar").must_equal "SHA2\nSHA3"
49
66
  end
50
67
 
51
- it "show one line names is sane" do
52
- StubGitDriver.show_one_line_names(:commit_hash => "SHA2").must_equal "SHA1 commit message\nfile2\nfile3\nfile5"
68
+ it "has a sane show one line names" do
69
+ StubGitDriver.new.show_one_line_names(:commit_hash => "SHA2")
70
+ .must_equal "SHA1 commit message\nfile2\nfile3\nfile5"
71
+ StubGitDriver.new(:line_ending => "\r\n").show_one_line_names(:commit_hash => "SHA2")
72
+ .must_equal "SHA1 commit message\r\nfile2\r\nfile3\r\nfile5"
53
73
  end
54
74
  end
55
75
 
56
76
  class StubGitDriver
57
- @pretty_log_enum = ["SHA1\nSHA2", "SHA2\nSHA3"].cycle
58
- @commits = {
59
- "SHA1" => "SHA1 commit message\nfile1\nfile2",
60
- "SHA2" => "SHA1 commit message\nfile2\nfile3\nfile5",
61
- "SHA3" => "SHA1 commit message\nfile4",
62
- }
63
-
64
- class << self
65
- def pretty_log(options)
66
- @pretty_log_enum.next
67
- end
77
+ def initialize(options = {})
78
+ line_ending = options[:line_ending] || "\n"
79
+ @pretty_log_enum = ["SHA1#{line_ending}SHA2", "SHA2#{line_ending}SHA3"].cycle
80
+ @commits = {
81
+ "SHA1" => "SHA1 commit message#{line_ending}file1#{line_ending}file2",
82
+ "SHA2" => "SHA1 commit message#{line_ending}file2#{line_ending}file3#{line_ending}file5",
83
+ "SHA3" => "SHA1 commit message#{line_ending}file4",
84
+ }
85
+ end
68
86
 
69
- def show_one_line_names(options)
70
- @commits[options[:commit_hash]]
71
- end
87
+ def pretty_log(options)
88
+ @pretty_log_enum.next
89
+ end
90
+
91
+ def show_one_line_names(options)
92
+ @commits[options[:commit_hash]]
72
93
  end
73
94
  end
74
95
  end
@@ -1,4 +1,4 @@
1
- require 'hotspots/store'
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib', 'hotspots', 'store')
2
2
 
3
3
  module Hotspots
4
4
  describe "Store test" do
@@ -31,14 +31,6 @@ module Hotspots
31
31
  store.on("absent.txt").must_equal 0
32
32
  end
33
33
 
34
- it "disregards file case" do
35
- lines = [
36
- "ABC.TXT"
37
- ]
38
- store = Store.new(lines)
39
- store.on("abc.txt").must_equal 1
40
- end
41
-
42
34
  it "neglects empty lines" do
43
35
  lines = [
44
36
  " "
@@ -73,6 +65,14 @@ module Hotspots
73
65
  store.to_s.must_equal "abc.txt,1\nefg.txt,1\n"
74
66
  end
75
67
 
68
+ it "has a case-sensitive string representation" do
69
+ lines = [
70
+ "aBc.tXt"
71
+ ]
72
+ store = Store.new(lines)
73
+ store.to_s.must_equal "aBc.tXt,1\n"
74
+ end
75
+
76
76
  it "string representation has maximum occuring string at the top" do
77
77
  lines = [
78
78
  "abc.txt",
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.0.9
4
+ version: 0.0.10
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: 2011-12-26 00:00:00.000000000 Z
12
+ date: 2012-01-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'Find all files that changed over the past days for a git repository.
15
15
  If the same file is modified over
@@ -28,9 +28,11 @@ extensions: []
28
28
  extra_rdoc_files: []
29
29
  files:
30
30
  - .gitignore
31
+ - CHANGELOG.markdown
31
32
  - Gemfile
32
33
  - LICENSE
33
34
  - README.markdown
35
+ - Rakefile
34
36
  - bin/hotspots
35
37
  - hotspots.gemspec
36
38
  - lib/hotspots.rb
@@ -46,7 +48,6 @@ files:
46
48
  - test/hotspots/options_parser_test.rb
47
49
  - test/hotspots/repository/parser/git_test.rb
48
50
  - test/hotspots/store_test.rb
49
- - test/hotspots_test.rb
50
51
  homepage: https://github.com/chiku/hotspots
51
52
  licenses: []
52
53
  post_install_message:
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'minitest/autorun'
4
- require 'minitest/spec'
5
-
6
- lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
7
- $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
8
-
9
- Dir[File.join(File.expand_path(File.dirname(__FILE__)), "hotspots", "**", "*_test.rb")].each do |file|
10
- require file
11
- end