gitmine 0.1.2 → 0.1.3
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/README.rdoc +10 -3
- data/VERSION +1 -1
- data/gitmine.gemspec +2 -2
- data/lib/gitmine.rb +69 -70
- data/spec/commit_msg_to_issue_id_spec.rb +1 -1
- data/spec/commit_spec.rb +5 -5
- data/spec/gitmine_spec.rb +1 -1
- data/spec/issue_spec.rb +7 -7
- data/spec/spec_helper.rb +1 -1
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -3,14 +3,16 @@
|
|
3
3
|
Gitmine displays the last 10 commits of your repo and their associated redmine ticket status.
|
4
4
|
|
5
5
|
== Install
|
6
|
+
|
6
7
|
gem install gitmine
|
7
8
|
|
8
9
|
== Setup
|
10
|
+
|
9
11
|
Put the config file '.gitmine.yml' at the root of your project. Here is a sample file:
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
host: 'https://redmine.yourcompany.com
|
14
|
+
# Api key is required for private projects only.
|
15
|
+
api_key: 'your_api_key'
|
14
16
|
|
15
17
|
Then run gitmine at the root of your project.
|
16
18
|
|
@@ -19,6 +21,11 @@ Then run gitmine at the root of your project.
|
|
19
21
|
* Issues are managed by redmine on http://redmine-gitmine.heroku.com/projects/gitmine
|
20
22
|
* Thanks for reporting issues on http://redmine-gitmine.heroku.com/projects/gitmine/issues/new
|
21
23
|
|
24
|
+
== Contributors
|
25
|
+
|
26
|
+
* Philippe Creux http://github.com/pcreux
|
27
|
+
* Greg Bell http://github.com/gregbell
|
28
|
+
|
22
29
|
== Note on Patches/Pull Requests
|
23
30
|
|
24
31
|
* Fork the project.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/gitmine.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gitmine}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Philippe Creux"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-11}
|
13
13
|
s.default_executable = %q{gitmine}
|
14
14
|
s.description = %q{Git log with status of associated redmine tickets}
|
15
15
|
s.email = %q{pcreux@gmail.com}
|
data/lib/gitmine.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
require 'grit'
|
4
4
|
require 'yaml'
|
5
|
-
require '
|
5
|
+
require 'httparty'
|
6
6
|
|
7
7
|
class Gitmine
|
8
8
|
# CLI interface
|
@@ -24,90 +24,89 @@ class Gitmine
|
|
24
24
|
Commit.new(c)
|
25
25
|
end
|
26
26
|
end
|
27
|
-
end
|
28
|
-
|
29
27
|
|
30
|
-
class Commit
|
31
|
-
attr_reader :grit_commit
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
@grit_commit = grit_commit
|
36
|
-
end
|
29
|
+
class Commit
|
30
|
+
attr_reader :grit_commit
|
37
31
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
32
|
+
# Initialize a new Commit objects that delegates methods to the Grit::Commit object passed in
|
33
|
+
def initialize(grit_commit)
|
34
|
+
@grit_commit = grit_commit
|
35
|
+
end
|
43
36
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
# Issue associated with this commit
|
38
|
+
# Return nil if their is no associated issue
|
39
|
+
def issue
|
40
|
+
@issue ||= Issue.get_for_commit(message)
|
41
|
+
end
|
48
42
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
super
|
54
|
-
end
|
55
|
-
end
|
43
|
+
# Delegate #id to Grit::Commit
|
44
|
+
def id
|
45
|
+
@grit_commit.id
|
46
|
+
end
|
56
47
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
# => nil
|
64
|
-
#
|
65
|
-
def self.parse(msg)
|
66
|
-
match = msg.match(/Issue #(\d+)/)
|
67
|
-
match ? match[1] : nil
|
48
|
+
protected
|
49
|
+
# Delegate methods to Grit::Commit
|
50
|
+
def method_missing(m, *args, &block)
|
51
|
+
return @grit_commit.send(m, args, block) if @grit_commit.respond_to? m
|
52
|
+
super
|
53
|
+
end
|
68
54
|
end
|
69
|
-
end
|
70
55
|
|
71
|
-
class Issue
|
72
|
-
|
56
|
+
class Issue
|
57
|
+
CONFIG_FILE = './.gitmine.yml'
|
58
|
+
|
59
|
+
attr_reader :id, :subject, :status
|
60
|
+
|
61
|
+
# Extract the issue_id from a commit message.
|
62
|
+
# Examples:
|
63
|
+
# CommitMsgToIssueId.parse("Message for Issue #123.")
|
64
|
+
# => 123
|
65
|
+
# CommitMsgToIssueId.parse("#123.")
|
66
|
+
# => nil
|
67
|
+
#
|
68
|
+
def self.parse_for_issue_id(msg)
|
69
|
+
match = msg.match(/Issue #(\d+)/)
|
70
|
+
match ? match[1] : nil
|
71
|
+
end
|
73
72
|
|
74
|
-
|
73
|
+
# Parse the commit_message and get the associated issue if any.
|
74
|
+
def self.get_for_commit(commit_message)
|
75
|
+
issue_id = parse_for_issue_id(commit_message)
|
76
|
+
issue_id ? Issue.get(issue_id) : nil
|
77
|
+
end
|
75
78
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
# Get the issue from redmine
|
80
|
+
def self.get(issue_id)
|
81
|
+
Issue.new.tap { |issue|
|
82
|
+
issue.build_via_issue_id(issue_id)
|
83
|
+
}
|
84
|
+
end
|
81
85
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
}
|
87
|
-
end
|
86
|
+
# Config from .gitmine.yml
|
87
|
+
def config
|
88
|
+
@config ||= YAML.load_file(CONFIG_FILE)
|
89
|
+
end
|
88
90
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
91
|
+
# Get attributes from redmine and set them all
|
92
|
+
def build_via_issue_id(issue_id)
|
93
|
+
@id = issue_id
|
94
|
+
data = get(issue_id).parsed_response['issue']
|
95
|
+
@subject = data['subject']
|
96
|
+
@status = data['status']['name']
|
97
|
+
end
|
93
98
|
|
94
|
-
|
95
|
-
def build_via_issue_id(issue_id)
|
96
|
-
@id = issue_id
|
97
|
-
data = get(issue_id).parsed_response['issue']
|
98
|
-
@subject = data['subject']
|
99
|
-
@status = data['status']['name']
|
100
|
-
end
|
99
|
+
protected
|
101
100
|
|
102
|
-
|
101
|
+
# Url to redmine/issues
|
102
|
+
def url(id)
|
103
|
+
"#{config['host']}/issues/#{id}.xml?key=#{config['api_key']}"
|
104
|
+
end
|
103
105
|
|
104
|
-
|
105
|
-
|
106
|
-
|
106
|
+
# http_get the issue using HTTParty
|
107
|
+
def get(issue_id)
|
108
|
+
HTTParty.get(url(issue_id))
|
109
|
+
end
|
107
110
|
end
|
108
111
|
|
109
|
-
# http_get the issue using HTTParty
|
110
|
-
def get(issue_id)
|
111
|
-
HTTParty.get(url(issue_id))
|
112
|
-
end
|
113
112
|
end
|
@@ -8,7 +8,7 @@ describe "CommitMsgToIssueId" do
|
|
8
8
|
['Add method #yey Commit message Issue #123.', '123']
|
9
9
|
].each do |msg, id|
|
10
10
|
it "should return #{id} for '#{msg}'" do
|
11
|
-
|
11
|
+
Gitmine::Issue.parse_for_issue_id(msg).should == id
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/spec/commit_spec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Commit do
|
3
|
+
describe Gitmine::Commit do
|
4
4
|
let(:grit_commit) { Grit::Commit.create(nil, {:message => "Commit message"}) }
|
5
|
-
let(:commit) { Commit.new(grit_commit) }
|
6
|
-
let(:issue) { Issue.new }
|
5
|
+
let(:commit) { Gitmine::Commit.new(grit_commit) }
|
6
|
+
let(:issue) { Gitmine::Issue.new }
|
7
7
|
|
8
8
|
describe "#new" do
|
9
9
|
it "should take a grit_commit object and store it" do
|
@@ -24,12 +24,12 @@ describe Commit do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should return issue via #Issue.get_for_commit" do
|
27
|
-
Issue.should_receive(:get_for_commit).with("Commit message") { issue }
|
27
|
+
Gitmine::Issue.should_receive(:get_for_commit).with("Commit message") { issue }
|
28
28
|
commit.issue.should == issue
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should memoize issue" do
|
32
|
-
Issue.should_receive(:get_for_commit).with("Commit message") { issue }.once
|
32
|
+
Gitmine::Issue.should_receive(:get_for_commit).with("Commit message") { issue }.once
|
33
33
|
commit.issue.should == issue
|
34
34
|
commit.issue.should == issue
|
35
35
|
end
|
data/spec/gitmine_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe Gitmine do
|
|
25
25
|
|
26
26
|
describe "#commits" do
|
27
27
|
it "should return Gitmine commits" do
|
28
|
-
gitmine.commits.first.should be_a Commit
|
28
|
+
gitmine.commits.first.should be_a Gitmine::Commit
|
29
29
|
end
|
30
30
|
it "should return commits for the current branch" do
|
31
31
|
repo.should_receive(:commits).with('wip')
|
data/spec/issue_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Issue do
|
4
|
-
let(:issue) { Issue.new }
|
3
|
+
describe Gitmine::Issue do
|
4
|
+
let(:issue) { Gitmine::Issue.new }
|
5
5
|
[:id, :subject, :status].each do |a|
|
6
6
|
it "should have an #{a}" do
|
7
7
|
issue.should respond_to a
|
@@ -25,17 +25,17 @@ describe Issue do
|
|
25
25
|
describe "#get_for_commit" do
|
26
26
|
it "should parse the commit message to find a commit_id and call #get" do
|
27
27
|
commit_msg = 'A commit msg Issue #123'
|
28
|
-
|
29
|
-
Issue.get_for_commit(commit_msg)
|
28
|
+
Gitmine::Issue.should_receive(:parse_for_issue_id).with(commit_msg)
|
29
|
+
Gitmine::Issue.get_for_commit(commit_msg)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#get (class method)" do
|
34
34
|
it "should build_via_issue_id" do
|
35
|
-
issue = Issue.new
|
36
|
-
Issue.should_receive(:new) { issue }
|
35
|
+
issue = Gitmine::Issue.new
|
36
|
+
Gitmine::Issue.should_receive(:new) { issue }
|
37
37
|
issue.should_receive(:build_via_issue_id)
|
38
|
-
Issue.get(123)
|
38
|
+
Gitmine::Issue.get(123)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Philippe Creux
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-11 00:00:00 -07:00
|
18
18
|
default_executable: gitmine
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|