git_tracker 1.5.1 → 1.6.0
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.
- checksums.yaml +7 -0
- data/.rspec +0 -1
- data/CHANGELOG.md +11 -1
- data/README.md +9 -9
- data/git_tracker.gemspec +1 -2
- data/lib/git_tracker/hook.rb +12 -12
- data/lib/git_tracker/runner.rb +16 -4
- data/lib/git_tracker/version.rb +1 -1
- data/spec/git_tracker/branch_spec.rb +11 -11
- data/spec/git_tracker/commit_message_spec.rb +25 -25
- data/spec/git_tracker/hook_spec.rb +10 -9
- data/spec/git_tracker/prepare_commit_message_spec.rb +16 -16
- data/spec/git_tracker/repository_spec.rb +5 -5
- data/spec/git_tracker/runner_spec.rb +7 -7
- data/spec/git_tracker/standalone_spec.rb +18 -19
- metadata +24 -50
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ba4c5a465dbf21ac90a472ff068b3fc10db9dd59
|
4
|
+
data.tar.gz: 5abcc2a8a8712397c99db750e6c306f4bbd5d1ae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 088927ac92d344094c3467f8af91f75fcd1505b02a3eaf413a667ab7d848e547d13c795177c21604352afda91952496092f8c83c44a96e12106cde4bf0d4e6cc
|
7
|
+
data.tar.gz: 473ebe902d93cb1eac40f44a93a5de68fbe08660548c98d45f58b104b53e1ab18812641c5e0674be0e91ca08e082c8810d3e992fe173ac3008b4c7c51726fef0
|
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
### dev
|
2
|
-
[full changelog](https://github.com/stevenharman/git_tracker/compare/v1.
|
2
|
+
[full changelog](https://github.com/stevenharman/git_tracker/compare/v1.6.0...master)
|
3
|
+
|
4
|
+
### 1.6.0 / 2013-08-12
|
5
|
+
[full changelog](https://github.com/stevenharman/git_tracker/compare/v1.5.1...v1.6.0)
|
6
|
+
|
7
|
+
Enhancements
|
8
|
+
|
9
|
+
* Add and default to `help` command. [Issue
|
10
|
+
#15](https://github.com/stevenharman/git_tracker/issues/15)
|
11
|
+
* Deprecate `git-tracker install` in favor of `git-tracker init` [Issue
|
12
|
+
#13](https://github.com/stevenharman/git_tracker/issues/13)
|
3
13
|
|
4
14
|
### 1.5.1 / 2013-02-02
|
5
15
|
[full changelog](https://github.com/stevenharman/git_tracker/compare/v1.4.0...v1.5.1)
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](http://travis-ci.org/stevenharman/git_tracker)
|
4
4
|
[](https://gemnasium.com/stevenharman/git_tracker)
|
5
|
-
[](https://codeclimate.com/github/stevenharman/git_tracker)
|
6
6
|
|
7
7
|
*GitTracker*, or *git-tracker*, is a Git hook that will scan your current
|
8
8
|
branch name looking for something it recognizes as a [Pivotal Tracker][pt]
|
@@ -13,8 +13,7 @@ format][pt-format], to your commit message.
|
|
13
13
|
|
14
14
|
### 1) Install the `git-tracker` binary
|
15
15
|
|
16
|
-
You need to get the `git-tracker` binary onto your system
|
17
|
-
install the *git hook* into your local Git repository.
|
16
|
+
You need to get the `git-tracker` binary onto your system.
|
18
17
|
|
19
18
|
- via [Homebrew][homebrew] :beers: (preferred)
|
20
19
|
|
@@ -28,25 +27,26 @@ install the *git hook* into your local Git repository.
|
|
28
27
|
$ gem install git_tracker
|
29
28
|
```
|
30
29
|
|
31
|
-
### 2)
|
30
|
+
### 2) Initialize the hook
|
32
31
|
|
33
|
-
|
32
|
+
Then you need to initialize the *git hook* into each local Git repository where
|
33
|
+
you want to use it.
|
34
34
|
|
35
35
|
```bash
|
36
36
|
# from inside a local Git repository
|
37
37
|
# for example: /path/to/repo/
|
38
|
-
$ git tracker
|
38
|
+
$ git tracker init
|
39
39
|
```
|
40
40
|
|
41
41
|
This will put the `prepare-commit-msg` hook in the `/path/to/repo/.git/hooks`
|
42
42
|
directory and make it executable.
|
43
43
|
|
44
|
-
**NOTE:** The hook needs to be
|
45
|
-
you will use it.
|
44
|
+
**NOTE:** The hook needs to be initialized just once for each repository in
|
45
|
+
which you will use it.
|
46
46
|
|
47
47
|
## Usage
|
48
48
|
|
49
|
-
With the hook
|
49
|
+
With the hook initialized in a repository, create branches being sure to include
|
50
50
|
the Pivotal Tracker story number in the branch name.
|
51
51
|
|
52
52
|
```bash
|
data/git_tracker.gemspec
CHANGED
@@ -13,8 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
better... and easier... um, besier!
|
14
14
|
EOF
|
15
15
|
|
16
|
-
gem.add_development_dependency "rspec", "~> 2.
|
17
|
-
gem.add_development_dependency "rspec-spies", "~> 2.0"
|
16
|
+
gem.add_development_dependency "rspec", "~> 2.14"
|
18
17
|
gem.add_development_dependency "activesupport", "~> 3.2"
|
19
18
|
gem.add_development_dependency "pry", "~> 0.9.11"
|
20
19
|
gem.add_development_dependency "rake"
|
data/lib/git_tracker/hook.rb
CHANGED
@@ -2,30 +2,30 @@ require 'git_tracker/repository'
|
|
2
2
|
|
3
3
|
module GitTracker
|
4
4
|
class Hook
|
5
|
+
attr_reader :hook_file
|
5
6
|
|
6
|
-
def self.
|
7
|
-
|
7
|
+
def self.init
|
8
|
+
init_at(Repository.root)
|
8
9
|
end
|
9
10
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
write(hook)
|
11
|
+
def self.init_at(root)
|
12
|
+
new(root).write
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
def self.hook_from(root)
|
18
|
-
File.join(root, '.git', 'hooks', 'prepare-commit-msg')
|
15
|
+
def initialize(root)
|
16
|
+
@hook_file = File.join(root, '.git', 'hooks', 'prepare-commit-msg')
|
19
17
|
end
|
20
18
|
|
21
|
-
def
|
22
|
-
File.open(
|
19
|
+
def write
|
20
|
+
File.open(hook_file, 'w') do |f|
|
23
21
|
f.write(hook_body)
|
24
22
|
f.chmod(0755)
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
|
-
|
26
|
+
private
|
27
|
+
|
28
|
+
def hook_body
|
29
29
|
return <<-HOOK
|
30
30
|
#!/usr/bin/env bash
|
31
31
|
|
data/lib/git_tracker/runner.rb
CHANGED
@@ -4,7 +4,7 @@ require 'git_tracker/hook'
|
|
4
4
|
module GitTracker
|
5
5
|
module Runner
|
6
6
|
|
7
|
-
def self.execute(cmd_arg, *args)
|
7
|
+
def self.execute(cmd_arg = 'help', *args)
|
8
8
|
command = cmd_arg.gsub(/-/, '_')
|
9
9
|
abort("[git_tracker] command: '#{cmd_arg}' does not exist.") unless respond_to?(command)
|
10
10
|
send(command, *args)
|
@@ -14,12 +14,24 @@ module GitTracker
|
|
14
14
|
PrepareCommitMessage.run(*args)
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.init
|
18
|
+
Hook.init
|
19
|
+
end
|
20
|
+
|
17
21
|
def self.install
|
18
|
-
|
22
|
+
puts "`git-tracker install` is deprecated. Please use `git-tracker init`"
|
23
|
+
self.init
|
19
24
|
end
|
20
25
|
|
21
|
-
def self.
|
22
|
-
puts
|
26
|
+
def self.help
|
27
|
+
puts <<-HELP
|
28
|
+
git-tracker #{VERSION} is installed.
|
29
|
+
|
30
|
+
Remember, git-tracker is a hook which Git interacts with during its normal
|
31
|
+
lifecycle of committing, rebasing, merging, etc. You need to initialize this
|
32
|
+
hook by running `git-tracker init` from each repository in which you wish to
|
33
|
+
use it. Cheers!
|
34
|
+
HELP
|
23
35
|
end
|
24
36
|
end
|
25
37
|
|
data/lib/git_tracker/version.rb
CHANGED
@@ -2,26 +2,26 @@ require 'spec_helper'
|
|
2
2
|
require 'git_tracker/branch'
|
3
3
|
|
4
4
|
describe GitTracker::Branch do
|
5
|
-
subject { described_class }
|
5
|
+
subject(:branch) { described_class }
|
6
6
|
|
7
7
|
def stub_branch(ref, exit_status = 0)
|
8
8
|
allow_message_expectations_on_nil
|
9
|
-
|
9
|
+
branch.stub(:`) { ref }
|
10
10
|
$?.stub(:exitstatus) { exit_status }
|
11
11
|
end
|
12
12
|
|
13
13
|
describe '.current' do
|
14
14
|
it 'shells out to git, looking for the current HEAD' do
|
15
15
|
stub_branch('refs/heads/herpty_derp_de')
|
16
|
-
|
17
|
-
|
16
|
+
branch.should_receive('`').with('git symbolic-ref HEAD')
|
17
|
+
branch.current
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'ensures in a Git repository when looking for HEAD exits with non-zero status' do
|
21
21
|
stub_branch('', 128)
|
22
22
|
|
23
23
|
GitTracker::Repository.should_receive(:ensure_exists)
|
24
|
-
|
24
|
+
branch.current
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -29,36 +29,36 @@ describe GitTracker::Branch do
|
|
29
29
|
context 'Current branch has a story number' do
|
30
30
|
it 'finds the story that starts with a hash' do
|
31
31
|
stub_branch('refs/heads/a_very_descriptive_name_#8675309')
|
32
|
-
expect(
|
32
|
+
expect(branch.story_number).to eq('8675309')
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'finds the story without a leading hash' do
|
36
36
|
stub_branch('refs/heads/a_very_descriptive_name_1235309')
|
37
|
-
expect(
|
37
|
+
expect(branch.story_number).to eq('1235309')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'finds the story following a forward hash' do
|
41
41
|
stub_branch('refs/heads/alindeman/8675309_got_her_number')
|
42
|
-
expect(
|
42
|
+
expect(branch.story_number).to eq('8675309')
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'finds the story in a branch with hyphens' do
|
46
46
|
stub_branch('refs/heads/stevenharman/got-her-number-8675309')
|
47
|
-
expect(
|
47
|
+
expect(branch.story_number).to eq('8675309')
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'The current branch does not have a story number' do
|
52
52
|
it 'finds no story' do
|
53
53
|
stub_branch('refs/heads/a_very_descriptive_name-without_a_#number')
|
54
|
-
expect(
|
54
|
+
expect(branch.story_number).to_not be
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
context 'Not on a branch (HEAD does not exist)' do
|
59
59
|
it 'finds no story' do
|
60
60
|
stub_branch('')
|
61
|
-
expect(
|
61
|
+
expect(branch.story_number).to_not be
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -5,7 +5,7 @@ require 'active_support/core_ext/string/strip'
|
|
5
5
|
describe GitTracker::CommitMessage do
|
6
6
|
include CommitMessageHelper
|
7
7
|
|
8
|
-
subject { described_class.new(file) }
|
8
|
+
subject(:commit_message) { described_class.new(file) }
|
9
9
|
let(:file) { 'COMMIT_EDITMSG' }
|
10
10
|
|
11
11
|
it 'requires path to the temporary commit message file' do
|
@@ -20,13 +20,13 @@ describe GitTracker::CommitMessage do
|
|
20
20
|
%w[fix Fixed FIXES Complete completed completes FINISH finished Finishes Deliver delivered DELIVERS].each do |keyword|
|
21
21
|
it "detects the #{keyword} keyword" do
|
22
22
|
stub_commit_message("Did the darn thing. [#{keyword}]")
|
23
|
-
expect(
|
23
|
+
expect(commit_message.keyword).to eq(keyword)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'does not find the keyword when it does not exist' do
|
28
28
|
stub_commit_message('Did the darn thing. [Something]')
|
29
|
-
expect(
|
29
|
+
expect(commit_message.keyword).to_not be
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -34,57 +34,57 @@ describe GitTracker::CommitMessage do
|
|
34
34
|
context 'commit message contains the special Pivotal Tracker story syntax' do
|
35
35
|
it 'allows just the number' do
|
36
36
|
stub_commit_message('[#8675309]')
|
37
|
-
expect(
|
37
|
+
expect(commit_message).to be_mentions_story('8675309')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'allows multiple numbers' do
|
41
41
|
stub_commit_message('[#99 #777 #8675309 #111222]')
|
42
|
-
expect(
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
42
|
+
expect(commit_message).to be_mentions_story('99')
|
43
|
+
expect(commit_message).to be_mentions_story('777')
|
44
|
+
expect(commit_message).to be_mentions_story('8675309')
|
45
|
+
expect(commit_message).to be_mentions_story('111222')
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'allows state change before number' do
|
49
49
|
stub_commit_message('[Fixes #8675309]')
|
50
|
-
expect(
|
50
|
+
expect(commit_message).to be_mentions_story('8675309')
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'allows state change after the number' do
|
54
54
|
stub_commit_message('[#8675309 Delivered]')
|
55
|
-
expect(
|
55
|
+
expect(commit_message).to be_mentions_story('8675309')
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'allows surrounding text' do
|
59
59
|
stub_commit_message('derp de #herp [Fixes #8675309] de herp-ity derp')
|
60
|
-
expect(
|
60
|
+
expect(commit_message).to be_mentions_story('8675309')
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
context 'commit message doesn not contain the special Pivotal Tracker story syntax' do
|
65
65
|
it 'requires brackets' do
|
66
66
|
stub_commit_message('#8675309')
|
67
|
-
expect(
|
67
|
+
expect(commit_message).to_not be_mentions_story('8675309')
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'requires a pound sign' do
|
71
71
|
stub_commit_message('[8675309]')
|
72
|
-
expect(
|
72
|
+
expect(commit_message).to_not be_mentions_story('8675309')
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'does not allow the bare number' do
|
76
76
|
stub_commit_message('8675309')
|
77
|
-
expect(
|
77
|
+
expect(commit_message).to_not be_mentions_story('8675309')
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'does not allow multiple state changes' do
|
81
81
|
stub_commit_message('[Fixes Deploys #8675309]')
|
82
|
-
expect(
|
82
|
+
expect(commit_message).to_not be_mentions_story('8675309')
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'does not allow comments' do
|
86
86
|
stub_commit_message('#[#8675309]')
|
87
|
-
expect(
|
87
|
+
expect(commit_message).to_not be_mentions_story('8675309')
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -99,7 +99,7 @@ describe GitTracker::CommitMessage do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'handles no existing message' do
|
102
|
-
|
102
|
+
commit_message_text = <<-COMMIT_MESSAGE.strip_heredoc
|
103
103
|
|
104
104
|
|
105
105
|
[#8675309]
|
@@ -107,13 +107,13 @@ describe GitTracker::CommitMessage do
|
|
107
107
|
COMMIT_MESSAGE
|
108
108
|
|
109
109
|
stub_original_commit_message("\n\n# some other comments\n")
|
110
|
-
|
110
|
+
commit_message.append('[#8675309]')
|
111
111
|
|
112
|
-
expect(fake_file.content).to eq(
|
112
|
+
expect(fake_file.content).to eq(commit_message_text)
|
113
113
|
end
|
114
114
|
|
115
115
|
it 'preserves existing messages' do
|
116
|
-
|
116
|
+
commit_message_text = <<-COMMIT_MESSAGE.strip_heredoc
|
117
117
|
A first line
|
118
118
|
|
119
119
|
With more here
|
@@ -123,13 +123,13 @@ describe GitTracker::CommitMessage do
|
|
123
123
|
COMMIT_MESSAGE
|
124
124
|
|
125
125
|
stub_original_commit_message("A first line\n\nWith more here\n# other comments\n")
|
126
|
-
|
126
|
+
commit_message.append('[#8675309]')
|
127
127
|
|
128
|
-
expect(fake_file.content).to eq(
|
128
|
+
expect(fake_file.content).to eq(commit_message_text)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'preserves line breaks in comments' do
|
132
|
-
|
132
|
+
commit_message_text = <<-COMMIT_MESSAGE.strip_heredoc
|
133
133
|
|
134
134
|
|
135
135
|
[#8675309]
|
@@ -139,9 +139,9 @@ describe GitTracker::CommitMessage do
|
|
139
139
|
COMMIT_MESSAGE
|
140
140
|
|
141
141
|
stub_original_commit_message("# comment #1\n# comment B\n# comment III")
|
142
|
-
|
142
|
+
commit_message.append('[#8675309]')
|
143
143
|
|
144
|
-
expect(fake_file.content).to eq(
|
144
|
+
expect(fake_file.content).to eq(commit_message_text)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
@@ -7,30 +7,31 @@ describe GitTracker::Hook do
|
|
7
7
|
let(:root) { '/path/to/git/repo/toplevel' }
|
8
8
|
let(:hook_path) { File.join(root, '.git', 'hooks', 'prepare-commit-msg') }
|
9
9
|
|
10
|
-
describe '.
|
10
|
+
describe '.init' do
|
11
11
|
before do
|
12
12
|
GitTracker::Repository.stub(:root) { root }
|
13
|
+
hook.stub(:init_at)
|
13
14
|
end
|
14
15
|
|
15
|
-
it '
|
16
|
-
hook.
|
17
|
-
hook.
|
16
|
+
it 'initializes to the root of the Git repository' do
|
17
|
+
hook.init
|
18
|
+
expect(hook).to have_received(:init_at).with(root)
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
describe '.
|
22
|
+
describe '.init_at' do
|
22
23
|
let(:fake_file) { GitTracker::FakeFile.new }
|
23
24
|
before do
|
24
25
|
File.stub(:open).and_yield(fake_file)
|
25
26
|
end
|
26
27
|
|
27
28
|
it 'writes the hook into the hooks directory' do
|
28
|
-
|
29
|
-
|
29
|
+
hook.init_at(root)
|
30
|
+
expect(File).to have_received(:open).with(hook_path, 'w')
|
30
31
|
end
|
31
32
|
|
32
33
|
it 'makes the hook executable' do
|
33
|
-
hook.
|
34
|
+
hook.init_at(root)
|
34
35
|
expect(fake_file.mode).to eq(0755)
|
35
36
|
end
|
36
37
|
|
@@ -42,7 +43,7 @@ describe GitTracker::Hook do
|
|
42
43
|
|
43
44
|
HOOK_CODE
|
44
45
|
|
45
|
-
hook.
|
46
|
+
hook.init_at(root)
|
46
47
|
expect(fake_file.content).to eq(hook_code)
|
47
48
|
end
|
48
49
|
end
|
@@ -2,43 +2,46 @@ require 'spec_helper'
|
|
2
2
|
require 'git_tracker/prepare_commit_message'
|
3
3
|
|
4
4
|
describe GitTracker::PrepareCommitMessage do
|
5
|
-
subject { GitTracker::PrepareCommitMessage }
|
5
|
+
subject(:prepare_commit_message) { GitTracker::PrepareCommitMessage }
|
6
6
|
|
7
7
|
describe '.run' do
|
8
|
-
let(:hook) {
|
8
|
+
let(:hook) { double('PrepareCommitMessage') }
|
9
9
|
before do
|
10
|
-
|
10
|
+
prepare_commit_message.stub(:new) { hook }
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'runs the hook' do
|
14
14
|
hook.should_receive(:run)
|
15
|
-
|
15
|
+
prepare_commit_message.run('FILE1', 'hook_source', 'sha1234')
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe '.new' do
|
20
20
|
|
21
21
|
it 'requires the name of the commit message file' do
|
22
|
-
expect {
|
22
|
+
expect { prepare_commit_message.new }.to raise_error(ArgumentError)
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'remembers the name of the commit message file' do
|
26
|
-
expect(
|
26
|
+
expect(prepare_commit_message.new('FILE1').file).to eq('FILE1')
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'optionally accepts a message source' do
|
30
|
-
expect(hook =
|
30
|
+
expect(hook = prepare_commit_message.new('FILE1', 'merge').source).to eq('merge')
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'optionally accepts the SHA-1 of a commit' do
|
34
|
-
expect(hook =
|
34
|
+
expect(hook = prepare_commit_message.new('FILE1', 'commit', 'abc1234').commit_sha).to eq('abc1234')
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe '#run' do
|
39
39
|
let(:hook) { GitTracker::PrepareCommitMessage.new('FILE1') }
|
40
|
+
let(:commit_message) { double('CommitMessage', append: nil) }
|
41
|
+
|
40
42
|
before do
|
41
43
|
GitTracker::Branch.stub(:story_number) { story }
|
44
|
+
GitTracker::CommitMessage.stub(:new) { commit_message }
|
42
45
|
end
|
43
46
|
|
44
47
|
context 'with an existing commit (via `-c`, `-C`, or `--amend` options)' do
|
@@ -54,33 +57,30 @@ describe GitTracker::PrepareCommitMessage do
|
|
54
57
|
|
55
58
|
it 'exits without updating the commit message' do
|
56
59
|
expect { hook.run }.to succeed
|
57
|
-
|
60
|
+
expect(commit_message).to_not have_received(:append)
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
64
|
context 'branch name with a Pivotal Tracker story number' do
|
62
65
|
let(:story) { '8675309' }
|
63
|
-
let(:commit_message) { stub('CommitMessage', :mentions_story? => false) }
|
64
|
-
|
65
66
|
before do
|
67
|
+
commit_message.stub(:mentions_story?) { false }
|
66
68
|
commit_message.stub(:keyword) { nil }
|
67
|
-
GitTracker::CommitMessage.stub(:new) { commit_message }
|
68
69
|
end
|
69
70
|
|
70
71
|
it 'appends the number to the commit message' do
|
71
|
-
commit_message.should_receive(:append).with('[#8675309]')
|
72
72
|
hook.run
|
73
|
+
expect(commit_message).to have_received(:append).with('[#8675309]')
|
73
74
|
end
|
74
75
|
|
75
76
|
context 'keyword mentioned in the commit message' do
|
76
77
|
before do
|
77
|
-
commit_message.stub(:mentions_story?).with('8675309') { false }
|
78
78
|
commit_message.stub(:keyword) { 'Delivers' }
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'appends the keyword and the story number' do
|
82
|
-
commit_message.should_receive(:append).with('[Delivers #8675309]')
|
83
82
|
hook.run
|
83
|
+
expect(commit_message).to have_received(:append).with('[Delivers #8675309]')
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -91,7 +91,7 @@ describe GitTracker::PrepareCommitMessage do
|
|
91
91
|
|
92
92
|
it 'exits without updating the commit message' do
|
93
93
|
expect { hook.run }.to succeed
|
94
|
-
|
94
|
+
expect(commit_message).to_not have_received(:append)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
@@ -2,30 +2,30 @@ require 'spec_helper'
|
|
2
2
|
require 'git_tracker/repository'
|
3
3
|
|
4
4
|
describe GitTracker::Repository do
|
5
|
-
subject { described_class }
|
5
|
+
subject(:repository) { described_class }
|
6
6
|
let(:git_command) { 'git rev-parse --show-toplevel' }
|
7
7
|
before do
|
8
8
|
allow_message_expectations_on_nil
|
9
|
-
|
9
|
+
repository.stub(:`).with(git_command) { "/path/to/git/repo/root\n" }
|
10
10
|
end
|
11
11
|
|
12
12
|
describe '.root' do
|
13
13
|
|
14
14
|
it 'gets the path to the top-level directory of the local Repository' do
|
15
15
|
$?.stub(:exitstatus) { 0 }
|
16
|
-
expect(
|
16
|
+
expect(repository.root).to eq('/path/to/git/repo/root')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'aborts when not in a git repository' do
|
20
20
|
$?.stub(:exitstatus) { 128 }
|
21
|
-
expect {
|
21
|
+
expect { repository.root }.to_not succeed
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '.ensure_exists' do
|
26
26
|
it 'aborts when not in a git repository' do
|
27
27
|
$?.stub(:exitstatus) { 128 }
|
28
|
-
expect {
|
28
|
+
expect { repository.root }.to_not succeed
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -28,16 +28,16 @@ describe GitTracker::Runner do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe '.
|
32
|
-
it 'tells the hook to
|
33
|
-
GitTracker::Hook.should_receive(:
|
34
|
-
runner.
|
31
|
+
describe '.init' do
|
32
|
+
it 'tells the hook to initialize itself' do
|
33
|
+
GitTracker::Hook.should_receive(:init)
|
34
|
+
runner.init
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
it '.
|
39
|
-
runner.should_receive(:puts).with(
|
40
|
-
runner.execute('
|
38
|
+
it '.help reports that it was run' do
|
39
|
+
runner.should_receive(:puts).with(/git-tracker #{GitTracker::VERSION} is installed\./)
|
40
|
+
runner.execute('help')
|
41
41
|
end
|
42
42
|
|
43
43
|
end
|
@@ -23,51 +23,50 @@ describe GitTracker::Standalone do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#build' do
|
26
|
-
subject {
|
26
|
+
subject(:standalone_script) { described_class.build(io).string }
|
27
27
|
let(:io) { StringIO.new }
|
28
|
-
let(:standalone) { described_class.build(io).string }
|
29
28
|
|
30
29
|
it 'declares a shebang' do
|
31
|
-
expect(
|
30
|
+
expect(standalone_script).to match(/#!.+/)
|
32
31
|
end
|
33
32
|
|
34
33
|
it 'includes generated code notice' do
|
35
|
-
expect(
|
34
|
+
expect(standalone_script).to include('This file is generated')
|
36
35
|
end
|
37
36
|
|
38
37
|
it 'inlines the code' do
|
39
|
-
expect(
|
40
|
-
expect(
|
41
|
-
expect(
|
42
|
-
expect(
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
38
|
+
expect(standalone_script).to include('Hook')
|
39
|
+
expect(standalone_script).to include('Repository')
|
40
|
+
expect(standalone_script).to include('PrepareCommitMessage')
|
41
|
+
expect(standalone_script).to include('Runner')
|
42
|
+
expect(standalone_script).to include('Branch')
|
43
|
+
expect(standalone_script).to include('CommitMessage')
|
44
|
+
expect(standalone_script).to include('VERSION')
|
46
45
|
end
|
47
46
|
|
48
47
|
it 'inlines the message HEREDOC' do
|
49
|
-
expect(
|
48
|
+
expect(standalone_script).to include('#{preamble.strip}')
|
50
49
|
end
|
51
50
|
|
52
51
|
it 'inlines the shebang for the hook' do
|
53
|
-
expect(
|
52
|
+
expect(standalone_script).to include('#!/usr/bin/env bash')
|
54
53
|
end
|
55
54
|
|
56
55
|
it 'does not inline the standalone code' do
|
57
|
-
expect(
|
56
|
+
expect(standalone_script).to_not include('module Standalone')
|
58
57
|
end
|
59
58
|
|
60
59
|
it 'includes the call to execute the hook' do
|
61
|
-
expect(
|
60
|
+
expect(standalone_script).to include('GitTracker::Runner.execute(*ARGV)')
|
62
61
|
end
|
63
62
|
|
64
63
|
it 'excludes requiring git_tracker code' do
|
65
|
-
expect(
|
64
|
+
expect(standalone_script).to_not match(/^require\s+["']git_tracker/)
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
69
68
|
describe '#ruby_executable' do
|
70
|
-
subject { described_class }
|
69
|
+
subject(:standalone) { described_class }
|
71
70
|
before do
|
72
71
|
RbConfig::CONFIG.stub(:[]).with('bindir') { '/some/other/bin' }
|
73
72
|
RbConfig::CONFIG.stub(:[]).with('ruby_install_name') { 'ruby' }
|
@@ -75,12 +74,12 @@ describe GitTracker::Standalone do
|
|
75
74
|
|
76
75
|
it 'uses user-level ruby binary when it is executable' do
|
77
76
|
File.stub(:executable?).with('/usr/bin/ruby') { true }
|
78
|
-
expect(
|
77
|
+
expect(standalone.ruby_executable).to eq('/usr/bin/ruby')
|
79
78
|
end
|
80
79
|
|
81
80
|
it 'uses rbconfig ruby when user-level ruby binary not executable' do
|
82
81
|
File.stub(:executable?).with('/usr/bin/ruby') { false }
|
83
|
-
expect(
|
82
|
+
expect(standalone.ruby_executable).to eq('/some/other/bin/ruby')
|
84
83
|
end
|
85
84
|
end
|
86
85
|
end
|
metadata
CHANGED
@@ -1,98 +1,74 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 1.5.1
|
4
|
+
version: 1.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steven Harman
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.12'
|
20
|
-
none: false
|
21
14
|
name: rspec
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
15
|
requirement: !ruby/object:Gem::Requirement
|
25
16
|
requirements:
|
26
17
|
- - ~>
|
27
18
|
- !ruby/object:Gem::Version
|
28
|
-
version: '2.
|
29
|
-
none: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
version_requirements: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '2.0'
|
36
|
-
none: false
|
37
|
-
name: rspec-spies
|
19
|
+
version: '2.14'
|
38
20
|
type: :development
|
39
21
|
prerelease: false
|
40
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
23
|
requirements:
|
42
24
|
- - ~>
|
43
25
|
- !ruby/object:Gem::Version
|
44
|
-
version: '2.
|
45
|
-
none: false
|
26
|
+
version: '2.14'
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
|
-
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
48
30
|
requirements:
|
49
31
|
- - ~>
|
50
32
|
- !ruby/object:Gem::Version
|
51
33
|
version: '3.2'
|
52
|
-
none: false
|
53
|
-
name: activesupport
|
54
34
|
type: :development
|
55
35
|
prerelease: false
|
56
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
37
|
requirements:
|
58
38
|
- - ~>
|
59
39
|
- !ruby/object:Gem::Version
|
60
40
|
version: '3.2'
|
61
|
-
none: false
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
|
-
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
64
44
|
requirements:
|
65
45
|
- - ~>
|
66
46
|
- !ruby/object:Gem::Version
|
67
47
|
version: 0.9.11
|
68
|
-
none: false
|
69
|
-
name: pry
|
70
48
|
type: :development
|
71
49
|
prerelease: false
|
72
|
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
51
|
requirements:
|
74
52
|
- - ~>
|
75
53
|
- !ruby/object:Gem::Version
|
76
54
|
version: 0.9.11
|
77
|
-
none: false
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
|
-
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
80
58
|
requirements:
|
81
|
-
- -
|
59
|
+
- - '>='
|
82
60
|
- !ruby/object:Gem::Version
|
83
61
|
version: '0'
|
84
|
-
none: false
|
85
|
-
name: rake
|
86
62
|
type: :development
|
87
63
|
prerelease: false
|
88
|
-
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
65
|
requirements:
|
90
|
-
- -
|
66
|
+
- - '>='
|
91
67
|
- !ruby/object:Gem::Version
|
92
68
|
version: '0'
|
93
|
-
|
94
|
-
|
95
|
-
|
69
|
+
description: |2
|
70
|
+
Some simple tricks that make working with Pivotal Tracker even
|
71
|
+
better... and easier... um, besier!
|
96
72
|
email:
|
97
73
|
- steveharman@gmail.com
|
98
74
|
executables:
|
@@ -133,27 +109,26 @@ files:
|
|
133
109
|
- spec/support/matchers/exit_code_matchers.rb
|
134
110
|
homepage: https://github.com/stevenharman/git_tracker
|
135
111
|
licenses: []
|
112
|
+
metadata: {}
|
136
113
|
post_install_message:
|
137
114
|
rdoc_options: []
|
138
115
|
require_paths:
|
139
116
|
- lib
|
140
117
|
required_ruby_version: !ruby/object:Gem::Requirement
|
141
118
|
requirements:
|
142
|
-
- -
|
119
|
+
- - '>='
|
143
120
|
- !ruby/object:Gem::Version
|
144
121
|
version: '0'
|
145
|
-
none: false
|
146
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
123
|
requirements:
|
148
|
-
- -
|
124
|
+
- - '>='
|
149
125
|
- !ruby/object:Gem::Version
|
150
126
|
version: '0'
|
151
|
-
none: false
|
152
127
|
requirements: []
|
153
128
|
rubyforge_project:
|
154
|
-
rubygems_version:
|
129
|
+
rubygems_version: 2.0.5
|
155
130
|
signing_key:
|
156
|
-
specification_version:
|
131
|
+
specification_version: 4
|
157
132
|
summary: Teaching Git about Pivotal Tracker.
|
158
133
|
test_files:
|
159
134
|
- spec/git_tracker/branch_spec.rb
|
@@ -167,4 +142,3 @@ test_files:
|
|
167
142
|
- spec/support/commit_message_helper.rb
|
168
143
|
- spec/support/fake_file.rb
|
169
144
|
- spec/support/matchers/exit_code_matchers.rb
|
170
|
-
has_rdoc:
|