git-pivotal-tracker-integration 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -1
- data/bin/git-finish +16 -2
- data/bin/git-release +19 -0
- data/bin/git-start +16 -2
- data/lib/git-pivotal-tracker-integration/command/base.rb +47 -0
- data/lib/git-pivotal-tracker-integration/{base.rb → command/command.rb} +3 -14
- data/lib/git-pivotal-tracker-integration/command/configuration.rb +92 -0
- data/lib/git-pivotal-tracker-integration/command/finish.rb +36 -0
- data/lib/git-pivotal-tracker-integration/command/prepare-commit-msg.sh +26 -0
- data/lib/git-pivotal-tracker-integration/command/release.rb +56 -0
- data/lib/git-pivotal-tracker-integration/command/start.rb +64 -0
- data/lib/git-pivotal-tracker-integration/util/git.rb +242 -0
- data/lib/git-pivotal-tracker-integration/util/shell.rb +36 -0
- data/lib/git-pivotal-tracker-integration/util/story.rb +128 -0
- data/lib/git-pivotal-tracker-integration/util/util.rb +20 -0
- data/lib/git-pivotal-tracker-integration/version-update/gradle.rb +64 -0
- data/lib/git-pivotal-tracker-integration/version-update/version_update.rb +20 -0
- data/lib/git_pivotal_tracker_integration.rb +18 -0
- data/spec/git-pivotal-tracker-integration/command/base_spec.rb +38 -0
- data/spec/git-pivotal-tracker-integration/command/configuration_spec.rb +91 -0
- data/spec/git-pivotal-tracker-integration/command/finish_spec.rb +45 -0
- data/spec/git-pivotal-tracker-integration/command/release_spec.rb +57 -0
- data/spec/git-pivotal-tracker-integration/command/start_spec.rb +50 -0
- data/spec/git-pivotal-tracker-integration/util/git_spec.rb +239 -0
- data/spec/git-pivotal-tracker-integration/util/shell_spec.rb +52 -0
- data/spec/git-pivotal-tracker-integration/util/story_spec.rb +137 -0
- data/spec/git-pivotal-tracker-integration/version-update/gradle_spec.rb +74 -0
- metadata +104 -21
- data/lib/git-pivotal-tracker-integration/finish.rb +0 -106
- data/lib/git-pivotal-tracker-integration/pivotal_configuration.rb +0 -90
- data/lib/git-pivotal-tracker-integration/prepare-commit-msg.sh +0 -12
- data/lib/git-pivotal-tracker-integration/start.rb +0 -167
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af83c4208875d093dba4ab8cd22ea6f157179c41
|
4
|
+
data.tar.gz: ac6a9da4a881480cceca563859bbfce3016b572f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e6a3d913df8b5c473aa16eb8d624d7e9abec62dd10cf959195f41c68c90b5bb48c253c5aacf858be6d4917705edfc7fbf9b4bc2d40bd5476985b06028f4a92c
|
7
|
+
data.tar.gz: 8ff57d1fd8e35a4d28803a522612ee77dada8c74ecc1746e5c1d0279e875cec4db3f64b3f4f9fc2695a5ab0b73808e75dabc15ec876eff89d2288e39ce658b49
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# Git Pivotal Tracker Integration
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/git-pivotal-tracker-integration.png)](http://badge.fury.io/rb/git-pivotal-tracker-integration)
|
3
|
+
[![Build Status](https://travis-ci.org/nebhale/git-pivotal-tracker-integration.png?branch=master)](https://travis-ci.org/nebhale/git-pivotal-tracker-integration)
|
2
4
|
|
3
5
|
`git-pivotal-tracker-integration` provides a set of additional Git commands to help developers when working with [Pivotal Tracker][pivotal-tracker].
|
4
6
|
|
@@ -6,7 +8,7 @@
|
|
6
8
|
|
7
9
|
|
8
10
|
## Installation
|
9
|
-
`git-pivotal-tracker-integration` requires at least **Ruby
|
11
|
+
`git-pivotal-tracker-integration` requires at least **Ruby 1.8.7** and **Git 1.8.2.1** in order to run. It is tested against Rubies _1.8.7_, _1.9.3_, and _2.0.0_. In order to install it, do the following:
|
10
12
|
|
11
13
|
```plain
|
12
14
|
$ gem install git-pivotal-tracker-integration
|
@@ -133,3 +135,34 @@ Merge 12345678-lorem-ipsum to master
|
|
133
135
|
```
|
134
136
|
|
135
137
|
After merging, the development branch is deleted and the changes are pushed to the remote repository.
|
138
|
+
|
139
|
+
### `git release [issue]`
|
140
|
+
This command creates a release for a story. It does this by updating the version string in the project and creating a tag. This command can be run in two ways. First it can be run specifying the release that you want to create.
|
141
|
+
|
142
|
+
```plain
|
143
|
+
$ git release 12345678
|
144
|
+
```
|
145
|
+
The other way the command can be run without specifying anything. In this case, it will select the first release story (based on the backlog's order).
|
146
|
+
|
147
|
+
```plain
|
148
|
+
$ git release
|
149
|
+
Title: Lorem ipsum dolor sit amet, consectetur adipiscing elitattributes
|
150
|
+
```
|
151
|
+
|
152
|
+
Once a story has been selected by one of the two methods, the command then prompts for the release version and next development version.
|
153
|
+
|
154
|
+
```plain
|
155
|
+
$ git release
|
156
|
+
Title: Lorem ipsum dolor sit amet, consectetur adipiscing elitattributes
|
157
|
+
|
158
|
+
Enter release version (current: 1.0.0.BUILD-SNAPSHOT): 1.0.0.M1
|
159
|
+
Enter next development version (current: 1.0.0.BUILD-SNAPSHOT): 1.1.0.BUILD-SNAPSHOT
|
160
|
+
Creating tag v1.0.0.M1... OK
|
161
|
+
Pushing to origin... OK
|
162
|
+
```
|
163
|
+
|
164
|
+
Once these have been entered, the version string for the current project is updated to the release version and a tag is created. Then the version string for the current project is updated to the next development version and a new commit along the original branch is created. Finally the tag and changes are pushed to the remote sever.
|
165
|
+
|
166
|
+
Version update is currently supported for the following kinds of projects. If you do not see a project type that you would like supported, please open an issue or submit a pull request.
|
167
|
+
|
168
|
+
* Gradle
|
data/bin/git-finish
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby -U
|
2
|
+
# Git Pivotal Tracker Integration
|
3
|
+
# Copyright (c) 2013 the original author or authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
2
16
|
|
3
|
-
require "git-pivotal-tracker-integration/finish"
|
17
|
+
require "git-pivotal-tracker-integration/command/finish"
|
4
18
|
|
5
|
-
Finish.new().run
|
19
|
+
GitPivotalTrackerIntegration::Command::Finish.new().run
|
data/bin/git-release
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby -U
|
2
|
+
# Git Pivotal Tracker Integration
|
3
|
+
# Copyright (c) 2013 the original author or authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "git-pivotal-tracker-integration/command/release"
|
18
|
+
|
19
|
+
GitPivotalTrackerIntegration::Command::Release.new().run ARGV[0]
|
data/bin/git-start
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby -U
|
2
|
+
# Git Pivotal Tracker Integration
|
3
|
+
# Copyright (c) 2013 the original author or authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
2
16
|
|
3
|
-
require "git-pivotal-tracker-integration/start"
|
17
|
+
require "git-pivotal-tracker-integration/command/start"
|
4
18
|
|
5
|
-
Start.new(
|
19
|
+
GitPivotalTrackerIntegration::Command::Start.new().run ARGV[0]
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Git Pivotal Tracker Integration
|
2
|
+
# Copyright (c) 2013 the original author or authors.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "git-pivotal-tracker-integration/command/command"
|
17
|
+
require "git-pivotal-tracker-integration/command/configuration"
|
18
|
+
require "git-pivotal-tracker-integration/util/git"
|
19
|
+
require "pivotal-tracker"
|
20
|
+
|
21
|
+
# An abstract base class for all commands
|
22
|
+
# @abstract Subclass and override {#run} to implement command functionality
|
23
|
+
class GitPivotalTrackerIntegration::Command::Base
|
24
|
+
|
25
|
+
# Common initialization functionality for all command classes. This
|
26
|
+
# enforces that:
|
27
|
+
# * the command is being run within a valid Git repository
|
28
|
+
# * the user has specified their Pivotal Tracker API token
|
29
|
+
# * all communication with Pivotal Tracker will be protected with SSL
|
30
|
+
# * the user has configured the project id for this repository
|
31
|
+
def initialize
|
32
|
+
@repository_root = GitPivotalTrackerIntegration::Util::Git.repository_root
|
33
|
+
@configuration = GitPivotalTrackerIntegration::Command::Configuration.new
|
34
|
+
|
35
|
+
PivotalTracker::Client.token = @configuration.api_token
|
36
|
+
PivotalTracker::Client.use_ssl = true
|
37
|
+
|
38
|
+
@project = PivotalTracker::Project.find @configuration.project_id
|
39
|
+
end
|
40
|
+
|
41
|
+
# The main entry point to the command's execution
|
42
|
+
# @abstract Override this method to implement command functionality
|
43
|
+
def run
|
44
|
+
raise NotImplementedError
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -13,19 +13,8 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
|
-
require "
|
17
|
-
require "pivotal-tracker"
|
18
|
-
|
19
|
-
class Base
|
20
|
-
|
21
|
-
def initialize
|
22
|
-
PivotalTracker::Client.token = PivotalConfiguration.api_token
|
23
|
-
PivotalTracker::Client.use_ssl = true
|
24
|
-
@project = PivotalTracker::Project.find PivotalConfiguration.project_id
|
25
|
-
end
|
26
|
-
|
27
|
-
def current_branch
|
28
|
-
`git branch`.scan(/\* (.*)/)[0][0]
|
29
|
-
end
|
16
|
+
require "git_pivotal_tracker_integration"
|
30
17
|
|
18
|
+
# A module encapsulating the commands for the project
|
19
|
+
module GitPivotalTrackerIntegration::Command
|
31
20
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Git Pivotal Tracker Integration
|
2
|
+
# Copyright (c) 2013 the original author or authors.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "git-pivotal-tracker-integration/command/command"
|
17
|
+
require "git-pivotal-tracker-integration/util/git"
|
18
|
+
require "highline/import"
|
19
|
+
require "pivotal-tracker"
|
20
|
+
|
21
|
+
# A class that exposes configuration that commands can use
|
22
|
+
class GitPivotalTrackerIntegration::Command::Configuration
|
23
|
+
|
24
|
+
# Returns the user's Pivotal Tracker API token. If this token has not been
|
25
|
+
# configured, prompts the user for the value. The value is checked for in
|
26
|
+
# the _inherited_ Git configuration, but is stored in the _global_ Git
|
27
|
+
# configuration so that it can be used across mutiple repositories.
|
28
|
+
#
|
29
|
+
# @return [String] The user's Pivotal Tracker API token
|
30
|
+
def api_token
|
31
|
+
api_token = GitPivotalTrackerIntegration::Util::Git.get_config @@KEY_API_TOKEN, :inherited
|
32
|
+
|
33
|
+
if api_token.empty?
|
34
|
+
api_token = ask("Pivotal API Token (found at https://www.pivotaltracker.com/profile): ").strip
|
35
|
+
GitPivotalTrackerIntegration::Util::Git.set_config @@KEY_API_TOKEN, api_token, :global
|
36
|
+
puts
|
37
|
+
end
|
38
|
+
|
39
|
+
api_token
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the Pivotal Tracker project id for this repository. If this id
|
43
|
+
# has not been configuration, prompts the user for the value. The value is
|
44
|
+
# checked for in the _inherited_ Git configuration, but is stored in the
|
45
|
+
# _local_ Git configuration so that it is specific to this repository.
|
46
|
+
#
|
47
|
+
# @return [String] The repository's Pivotal Tracker project id
|
48
|
+
def project_id
|
49
|
+
project_id = GitPivotalTrackerIntegration::Util::Git.get_config @@KEY_PROJECT_ID, :inherited
|
50
|
+
|
51
|
+
if project_id.empty?
|
52
|
+
project_id = choose do |menu|
|
53
|
+
menu.prompt = "Choose project associated with this repository: "
|
54
|
+
|
55
|
+
PivotalTracker::Project.all.sort_by { |project| project.name }.each do |project|
|
56
|
+
menu.choice(project.name) { project.id }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
GitPivotalTrackerIntegration::Util::Git.set_config @@KEY_PROJECT_ID, project_id, :local
|
61
|
+
puts
|
62
|
+
end
|
63
|
+
|
64
|
+
project_id
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns the story associated with the current development branch
|
68
|
+
#
|
69
|
+
# @param [PivotalTracker::Project] project the project the story belongs to
|
70
|
+
# @return [PivotalTracker::Story] the story assocated with the current development branch
|
71
|
+
def story(project)
|
72
|
+
story_id = GitPivotalTrackerIntegration::Util::Git.get_config @@KEY_STORY_ID, :branch
|
73
|
+
project.stories.find story_id.to_i
|
74
|
+
end
|
75
|
+
|
76
|
+
# Stores the story associated with the current development branch
|
77
|
+
#
|
78
|
+
# @param [PivotalTracker::Story] story the story assocated with the current development branch
|
79
|
+
# @return [void]
|
80
|
+
def story=(story)
|
81
|
+
GitPivotalTrackerIntegration::Util::Git.set_config @@KEY_STORY_ID, story.id, :branch
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
@@KEY_API_TOKEN = "pivotal.api-token"
|
87
|
+
|
88
|
+
@@KEY_PROJECT_ID = "pivotal.project-id"
|
89
|
+
|
90
|
+
@@KEY_STORY_ID = "pivotal-story-id"
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Git Pivotal Tracker Integration
|
2
|
+
# Copyright (c) 2013 the original author or authors.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "git-pivotal-tracker-integration/command/base"
|
17
|
+
require "git-pivotal-tracker-integration/command/command"
|
18
|
+
require "git-pivotal-tracker-integration/util/git"
|
19
|
+
|
20
|
+
# The class that encapsulates finishing a Pivotal Tracker Story
|
21
|
+
class GitPivotalTrackerIntegration::Command::Finish < GitPivotalTrackerIntegration::Command::Base
|
22
|
+
|
23
|
+
# Finishes a Pivotal Tracker story by doing the following steps:
|
24
|
+
# * Check that the pending merge will be trivial
|
25
|
+
# * Merge the development branch into the root branch
|
26
|
+
# * Delete the development branch
|
27
|
+
# * Push changes to remote
|
28
|
+
#
|
29
|
+
# @return [void]
|
30
|
+
def run
|
31
|
+
GitPivotalTrackerIntegration::Util::Git.trivial_merge?
|
32
|
+
GitPivotalTrackerIntegration::Util::Git.merge(@configuration.story @project)
|
33
|
+
GitPivotalTrackerIntegration::Util::Git.push GitPivotalTrackerIntegration::Util::Git.branch_name
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# Git Pivotal Tracker Integration
|
3
|
+
# Copyright (c) 2013 the original author or authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
CURRENT_BRANCH=$(git branch | grep "*" | sed "s/* //")
|
18
|
+
STORY_ID=$(git config branch.$CURRENT_BRANCH.pivotal-story-id)
|
19
|
+
|
20
|
+
if [[ $2 != "commit" && -n $STORY_ID ]]; then
|
21
|
+
ORIG_MSG_FILE="$1"
|
22
|
+
TEMP=$(mktemp /tmp/git-XXXXX)
|
23
|
+
|
24
|
+
(printf "\n\n[#$STORY_ID]" ; cat "$1") > "$TEMP"
|
25
|
+
cat "$TEMP" > "$ORIG_MSG_FILE"
|
26
|
+
fi
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Git Pivotal Tracker Integration
|
2
|
+
# Copyright (c) 2013 the original author or authors.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "git-pivotal-tracker-integration/command/base"
|
17
|
+
require "git-pivotal-tracker-integration/command/command"
|
18
|
+
require "git-pivotal-tracker-integration/util/git"
|
19
|
+
require "git-pivotal-tracker-integration/util/story"
|
20
|
+
require "git-pivotal-tracker-integration/version-update/gradle"
|
21
|
+
|
22
|
+
# The class that encapsulates releasing a Pivotal Tracker Story
|
23
|
+
class GitPivotalTrackerIntegration::Command::Release < GitPivotalTrackerIntegration::Command::Base
|
24
|
+
|
25
|
+
# Releases a Pivotal Tracker story by doing the following steps:
|
26
|
+
# * Update the version to the release version
|
27
|
+
# * Create a tag for the release version
|
28
|
+
# * Update the version to the new development version
|
29
|
+
# * Push tag and changes to remote
|
30
|
+
#
|
31
|
+
# @param [String, nil] filter a filter for selecting the release to start. This
|
32
|
+
# filter can be either:
|
33
|
+
# * a story id
|
34
|
+
# * +nil+
|
35
|
+
# @return [void]
|
36
|
+
def run(filter)
|
37
|
+
story = GitPivotalTrackerIntegration::Util::Story.select_story(@project, filter.nil? ? "release" : filter, 1)
|
38
|
+
GitPivotalTrackerIntegration::Util::Story.pretty_print story
|
39
|
+
|
40
|
+
updater = [
|
41
|
+
GitPivotalTrackerIntegration::VersionUpdate::Gradle.new(@repository_root)
|
42
|
+
].find { |candidate| candidate.supports? }
|
43
|
+
|
44
|
+
current_version = updater.current_version
|
45
|
+
release_version = ask("Enter release version (current: #{current_version}): ")
|
46
|
+
next_version = ask("Enter next development version (current: #{current_version}): ")
|
47
|
+
|
48
|
+
updater.update_version release_version
|
49
|
+
GitPivotalTrackerIntegration::Util::Git.create_release_tag release_version, story
|
50
|
+
updater.update_version next_version
|
51
|
+
GitPivotalTrackerIntegration::Util::Git.create_commit "#{next_version} Development", story
|
52
|
+
|
53
|
+
GitPivotalTrackerIntegration::Util::Git.push GitPivotalTrackerIntegration::Util::Git.branch_name, "v#{release_version}"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Git Pivotal Tracker Integration
|
2
|
+
# Copyright (c) 2013 the original author or authors.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require "git-pivotal-tracker-integration/command/base"
|
17
|
+
require "git-pivotal-tracker-integration/command/command"
|
18
|
+
require "git-pivotal-tracker-integration/util/git"
|
19
|
+
require "git-pivotal-tracker-integration/util/story"
|
20
|
+
require "pivotal-tracker"
|
21
|
+
|
22
|
+
# The class that encapsulates starting a Pivotal Tracker Story
|
23
|
+
class GitPivotalTrackerIntegration::Command::Start < GitPivotalTrackerIntegration::Command::Base
|
24
|
+
|
25
|
+
# Starts a Pivotal Tracker story by doing the following steps:
|
26
|
+
# * Create a branch
|
27
|
+
# * Add default commit hook
|
28
|
+
# * Start the story on Pivotal Tracker
|
29
|
+
#
|
30
|
+
# @param [String, nil] filter a filter for selecting the story to start. This
|
31
|
+
# filter can be either:
|
32
|
+
# * a story id
|
33
|
+
# * a story type (feature, bug, chore)
|
34
|
+
# * +nil+
|
35
|
+
# @return [void]
|
36
|
+
def run(filter)
|
37
|
+
story = GitPivotalTrackerIntegration::Util::Story.select_story @project, filter
|
38
|
+
|
39
|
+
GitPivotalTrackerIntegration::Util::Story.pretty_print story
|
40
|
+
|
41
|
+
development_branch_name = development_branch_name story
|
42
|
+
GitPivotalTrackerIntegration::Util::Git.create_branch development_branch_name
|
43
|
+
@configuration.story = story
|
44
|
+
|
45
|
+
GitPivotalTrackerIntegration::Util::Git.add_hook "prepare-commit-msg", File.join(File.dirname(__FILE__), "prepare-commit-msg.sh")
|
46
|
+
|
47
|
+
start_on_tracker story
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def development_branch_name(story)
|
53
|
+
branch_name = "#{story.id}-" + ask("Enter branch name (#{story.id}-<branch-name>): ")
|
54
|
+
puts
|
55
|
+
branch_name
|
56
|
+
end
|
57
|
+
|
58
|
+
def start_on_tracker(story)
|
59
|
+
print "Starting story on Pivotal Tracker... "
|
60
|
+
story.update(:current_state => "started")
|
61
|
+
puts "OK"
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|