git_tracking 0.1.1 → 0.1.2
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/lib/git_tracking.rb +9 -2
- data/lib/git_tracking/config.rb +9 -3
- data/lib/git_tracking/version.rb +1 -1
- data/spec/config_spec.rb +50 -25
- data/spec/detect_spec.rb +1 -1
- data/spec/git_tracking_spec.rb +42 -9
- metadata +3 -3
data/lib/git_tracking.rb
CHANGED
@@ -54,8 +54,15 @@ class GitTracking
|
|
54
54
|
|
55
55
|
def post_commit
|
56
56
|
@api_key = config.last_api_key
|
57
|
-
|
58
|
-
|
57
|
+
if config.last_story_completed?
|
58
|
+
completed = GitTracking.highline.ask("Does this commit complete the story?", ["yes", "no"]) do |q|
|
59
|
+
q.default = "yes"
|
60
|
+
end
|
61
|
+
if completed == "yes"
|
62
|
+
story = get_story(config.last_story_id)
|
63
|
+
story.notes.create(:text => config.commits_for_last_story)
|
64
|
+
end
|
65
|
+
end
|
59
66
|
end
|
60
67
|
|
61
68
|
def pivotal_project
|
data/lib/git_tracking/config.rb
CHANGED
@@ -28,9 +28,15 @@ class GitTracking
|
|
28
28
|
@config[:keys].invert[last_api_key]
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
31
|
+
def last_story_completed?
|
32
|
+
!!`git log -n 1`.match(/complete|finish/i)
|
33
|
+
end
|
34
|
+
|
35
|
+
def commits_for_last_story
|
36
|
+
commits = `git log --grep='#{self.last_story_id}'`.split(/^commit /).map{|c| c.split("\n")}
|
37
|
+
commits.each do |cl|
|
38
|
+
cl.map!(&:strip).reject!{|c| c == "" || c.match(/^\W*$|^Author|^Date|^\[#\d{6,7}\]/) }
|
39
|
+
end.flatten.join("\n")
|
34
40
|
end
|
35
41
|
|
36
42
|
def author
|
data/lib/git_tracking/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'git_tracking'
|
2
2
|
|
3
3
|
describe GitTracking::Config do
|
4
4
|
before(:all) do
|
@@ -15,7 +15,11 @@ describe GitTracking::Config do
|
|
15
15
|
system "git config git-tracking.last-story-id '#{@orig_last_story_id}'"
|
16
16
|
end
|
17
17
|
|
18
|
-
after(:each)
|
18
|
+
after(:each) do
|
19
|
+
File.delete "foo.txt" if File.exists? "foo.txt"
|
20
|
+
File.delete ".git_tracking" if File.exists?(".git_tracking")
|
21
|
+
end
|
22
|
+
|
19
23
|
let(:config) { GitTracking::Config.new }
|
20
24
|
|
21
25
|
it "#initialize should merge in config from .git_tracking file" do
|
@@ -91,29 +95,6 @@ describe GitTracking::Config do
|
|
91
95
|
config.authors.should == ["Joe", "Bob", "Steve"]
|
92
96
|
end
|
93
97
|
|
94
|
-
describe "#last_commit_info" do
|
95
|
-
before(:all) do
|
96
|
-
File.rename ".git", ".git_old" if File.exists? ".git"
|
97
|
-
end
|
98
|
-
before(:each) do
|
99
|
-
system "git init; git add README; git commit -m 'initial commit'"
|
100
|
-
end
|
101
|
-
after(:each) do
|
102
|
-
File.delete "foo.txt" if File.exists? "foo.txt"
|
103
|
-
system "rm -rf .git" if File.exists? ".git"
|
104
|
-
end
|
105
|
-
after(:all) do
|
106
|
-
File.rename ".git_old", ".git" if File.exists? ".git_old"
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should return info about the last commit" do
|
110
|
-
f = File.new("foo.txt", "w") {|f| f.puts "lalala"}
|
111
|
-
system "git add foo.txt"
|
112
|
-
system "git commit -m '[#1235] Story info\n - best commit evar'"
|
113
|
-
config.last_commit_info.should match(/commit \w{40,40}\n - best commit evar/)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
98
|
it "#last_story_id should return the git-tracking.last-story-id from git config" do
|
118
99
|
system "git config git-tracking.last-story-id '736741'"
|
119
100
|
config.last_story_id.should == '736741'
|
@@ -144,6 +125,50 @@ describe GitTracking::Config do
|
|
144
125
|
config.last_email.should == "foo@bar.com"
|
145
126
|
end
|
146
127
|
|
128
|
+
context "specs that require messing with git" do
|
129
|
+
before(:all) do
|
130
|
+
File.rename ".git", ".git_old" if File.exists? ".git"
|
131
|
+
end
|
132
|
+
after(:all) do
|
133
|
+
File.rename ".git_old", ".git" if File.exists? ".git_old"
|
134
|
+
end
|
135
|
+
before(:each) do
|
136
|
+
system "git init; git add README; git commit -m 'initial commit'"
|
137
|
+
end
|
138
|
+
after(:each) do
|
139
|
+
system "rm -rf .git" if File.exists? ".git"
|
140
|
+
File.delete "foo.txt" if File.exists? "foo.txt"
|
141
|
+
File.delete "bar.txt" if File.exists? "bar.txt"
|
142
|
+
end
|
143
|
+
|
144
|
+
it "#commits_for_last_story should return all commit messages with a given story id" do
|
145
|
+
f = File.new("foo.txt", "w") {|f| f.puts "lalala"}
|
146
|
+
system "git add foo.txt"
|
147
|
+
system "git commit -m '[#1235932] Story info\n - best commit evar'"
|
148
|
+
f = File.new("bar.txt", "w") {|f| f.puts "lalala"}
|
149
|
+
system "git add bar.txt"
|
150
|
+
system "git commit -m '[#1235932] Story info\n - finishing the best feature evar'"
|
151
|
+
config.should_receive(:last_story_id).and_return('1235932')
|
152
|
+
config.commits_for_last_story.should match(/[0-9a-f]{40}\n- finishing the best feature evar\n[0-9a-f]{40}\n- best commit evar/)
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "#last_story_completed?" do
|
156
|
+
it "should return true if the last commit message contains 'completed' or 'finished'" do
|
157
|
+
f = File.new("foo.txt", "w") {|f| f.puts "lalala"}
|
158
|
+
system "git add foo.txt"
|
159
|
+
system "git commit -m '[#1235] Story info\n - Completes best commit evar'"
|
160
|
+
config.last_story_completed?.should be_true
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should return false if the last commit message doesn't contain 'completed' or 'finished'" do
|
164
|
+
f = File.new("foo.txt", "w") {|f| f.puts "lalala"}
|
165
|
+
system "git add foo.txt"
|
166
|
+
system "git commit -m '[#1235] Story info\n - best commit evar'"
|
167
|
+
config.last_story_completed?.should be_false
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
147
172
|
describe "#project_id" do
|
148
173
|
it "should return the project_id" do
|
149
174
|
config.instance_eval { @config[:project_id] = '7472' }
|
data/spec/detect_spec.rb
CHANGED
data/spec/git_tracking_spec.rb
CHANGED
@@ -44,15 +44,47 @@ STRING
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
story
|
49
|
-
notes
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
47
|
+
describe ".post_commit" do
|
48
|
+
let(:story) {mock("story")}
|
49
|
+
let(:notes) {mock("notes")}
|
50
|
+
before(:each) do
|
51
|
+
GitTracking.config.stub(:last_api_key).and_return("12345")
|
52
|
+
GitTracking.stub(:get_story).and_return(story)
|
53
|
+
story.stub(:notes).and_return(notes)
|
54
|
+
GitTracking.should_not_receive(:story_id) # avoid double-prompting
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should do nothing if the story is not finished" do
|
58
|
+
GitTracking.config.should_receive(:last_story_completed?).and_return(false)
|
59
|
+
GitTracking.highline.should_not_receive(:ask)
|
60
|
+
GitTracking.config.should_not_receive(:commits_for_story)
|
61
|
+
notes.should_not_receive(:create)
|
62
|
+
GitTracking.post_commit
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should create a comment on the story with the commit msg and hash if the story is finished" do
|
66
|
+
commits = <<COMMITS
|
67
|
+
commit 12345678
|
68
|
+
- Did stuff
|
69
|
+
commit 98765456
|
70
|
+
- Did more stuff
|
71
|
+
commit 97230182
|
72
|
+
- Finished stuff
|
73
|
+
COMMITS
|
74
|
+
GitTracking.config.should_receive(:last_story_completed?).and_return(true)
|
75
|
+
GitTracking.highline.should_receive(:ask).with("Does this commit complete the story?", ["yes", "no"]).and_return("yes")
|
76
|
+
GitTracking.config.should_receive(:commits_for_last_story).and_return(commits)
|
77
|
+
notes.should_receive(:create).with(:text => commits)
|
78
|
+
GitTracking.post_commit
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should allow the user to indicate the story was not finished" do
|
82
|
+
GitTracking.config.should_receive(:last_story_completed?).and_return(true)
|
83
|
+
GitTracking.highline.should_receive(:ask).with("Does this commit complete the story?", ["yes", "no"]).and_return("no")
|
84
|
+
GitTracking.config.should_not_receive(:commits_for_last_story)
|
85
|
+
notes.should_not_receive(:create)
|
86
|
+
GitTracking.post_commit
|
87
|
+
end
|
56
88
|
end
|
57
89
|
|
58
90
|
describe ".story" do
|
@@ -145,6 +177,7 @@ STRING
|
|
145
177
|
it "should get the token" do
|
146
178
|
project = mock("project")
|
147
179
|
PivotalTracker::Project.should_receive(:find).and_return(project)
|
180
|
+
GitTracking.should_receive(:project_id).and_return("87655")
|
148
181
|
GitTracking.should_receive(:api_key).and_return("alksjd9123lka")
|
149
182
|
GitTracking.pivotal_project.should == project
|
150
183
|
end
|
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
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Steve Hull
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-17 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|