git-pivotal 0.2.2 → 0.2.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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg
2
2
  coverage
3
- *.gem
3
+ *.gem
4
+ *.swp
data/CHANGELOG CHANGED
@@ -1,3 +1,21 @@
1
+ v 0.2.3
2
+ - Allow the developer to specify the integration branch for git finish [Graeme Mathieson]
3
+ - Fixed bug which prevented chores from finishing successfully [Joshua Vial]
4
+ - Added option to allow only pickup items already assigned to you [Mark Butcher]
5
+ - Fix RestClient version issues
6
+
7
+ v 0.2.2
8
+ - Added git chore command
9
+
10
+ v 0.2.1
11
+ - Remove &:to_s shortcut for MRI 1.8.6 compatibility
12
+ - Updated to handle RestClient 1.4
13
+
14
+ v 0.2.0
15
+ - Added git feature and git bug commands
16
+ - Deprecated git feature
17
+ - Improved XPath reliability for Pivotal API requests [Sam Stokes]
18
+
1
19
  v 0.1.3
2
20
  - Fixed bug preventing command line args from being properly interpretted
3
21
 
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ begin
15
15
  gemspec.authors = ["Jeff Tucker", "Sam Stokes"]
16
16
 
17
17
  gemspec.add_dependency "nokogiri"
18
- gemspec.add_dependency "rest-client"
18
+ gemspec.add_dependency "rest-client", "~>1.4.0"
19
19
  gemspec.add_dependency "builder"
20
20
 
21
21
  gemspec.add_development_dependency "rspec"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
data/git-pivotal.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{git-pivotal}
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeff Tucker", "Sam Stokes"]
12
- s.date = %q{2010-03-11}
12
+ s.date = %q{2010-07-23}
13
13
  s.description = %q{A collection of git utilities to ease integration with Pivotal Tracker}
14
14
  s.email = %q{jeff@trydionel.com}
15
15
  s.executables = ["git-bug", "git-chore", "git-feature", "git-finish", "git-pick"]
@@ -47,6 +47,7 @@ Gem::Specification.new do |s|
47
47
  "spec/commands/bug_spec.rb",
48
48
  "spec/commands/chore_spec.rb",
49
49
  "spec/commands/feature_spec.rb",
50
+ "spec/commands/finish_spec.rb",
50
51
  "spec/factories.rb",
51
52
  "spec/factory.rb",
52
53
  "spec/pivotal/api_spec.rb",
@@ -56,18 +57,20 @@ Gem::Specification.new do |s|
56
57
  "spec/pivotal/collection_spec.rb",
57
58
  "spec/pivotal/project_spec.rb",
58
59
  "spec/pivotal/story_spec.rb",
60
+ "spec/spec.opts",
59
61
  "spec/spec_helper.rb"
60
62
  ]
61
63
  s.homepage = %q{http://github.com/trydionel/git-pivotal}
62
64
  s.rdoc_options = ["--charset=UTF-8"]
63
65
  s.require_paths = ["lib"]
64
- s.rubygems_version = %q{1.3.6}
66
+ s.rubygems_version = %q{1.3.7}
65
67
  s.summary = %q{A collection of git utilities to ease integration with Pivotal Tracker}
66
68
  s.test_files = [
67
69
  "spec/commands/base_spec.rb",
68
70
  "spec/commands/bug_spec.rb",
69
71
  "spec/commands/chore_spec.rb",
70
72
  "spec/commands/feature_spec.rb",
73
+ "spec/commands/finish_spec.rb",
71
74
  "spec/factories.rb",
72
75
  "spec/factory.rb",
73
76
  "spec/pivotal/api_spec.rb",
@@ -84,16 +87,16 @@ Gem::Specification.new do |s|
84
87
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
85
88
  s.specification_version = 3
86
89
 
87
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
90
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
88
91
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
89
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
92
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.4.0"])
90
93
  s.add_runtime_dependency(%q<builder>, [">= 0"])
91
94
  s.add_development_dependency(%q<rspec>, [">= 0"])
92
95
  s.add_development_dependency(%q<rcov>, [">= 0"])
93
96
  s.add_development_dependency(%q<mocha>, [">= 0"])
94
97
  else
95
98
  s.add_dependency(%q<nokogiri>, [">= 0"])
96
- s.add_dependency(%q<rest-client>, [">= 0"])
99
+ s.add_dependency(%q<rest-client>, ["~> 1.4.0"])
97
100
  s.add_dependency(%q<builder>, [">= 0"])
98
101
  s.add_dependency(%q<rspec>, [">= 0"])
99
102
  s.add_dependency(%q<rcov>, [">= 0"])
@@ -101,7 +104,7 @@ Gem::Specification.new do |s|
101
104
  end
102
105
  else
103
106
  s.add_dependency(%q<nokogiri>, [">= 0"])
104
- s.add_dependency(%q<rest-client>, [">= 0"])
107
+ s.add_dependency(%q<rest-client>, ["~> 1.4.0"])
105
108
  s.add_dependency(%q<builder>, [">= 0"])
106
109
  s.add_dependency(%q<rspec>, [">= 0"])
107
110
  s.add_dependency(%q<rcov>, [">= 0"])
data/lib/commands/base.rb CHANGED
@@ -35,16 +35,34 @@ module Commands
35
35
  end
36
36
  end
37
37
 
38
+ protected
39
+
40
+ def project
41
+ @project ||= api.projects.find(:id => options[:project_id])
42
+ end
43
+
44
+ def api
45
+ @api ||= Pivotal::Api.new(:api_token => options[:api_token])
46
+ end
47
+
48
+ def integration_branch
49
+ options[:integration_branch] || "master"
50
+ end
51
+
38
52
  private
39
53
 
40
54
  def parse_gitconfig
41
- token = get("git config --get pivotal.api-token").strip
42
- id = get("git config --get pivotal.project-id").strip
43
- name = get("git config --get pivotal.full-name").strip
55
+ token = get("git config --get pivotal.api-token").strip
56
+ id = get("git config --get pivotal.project-id").strip
57
+ name = get("git config --get pivotal.full-name").strip
58
+ integration_branch = get("git config --get pivotal.integration-branch").strip
59
+ only_mine = get("git config --get pivotal.only-mine").strip
44
60
 
45
- options[:api_token] = token unless token == ""
46
- options[:project_id] = id unless id == ""
47
- options[:full_name] = name unless name == ""
61
+ options[:api_token] = token unless token == ""
62
+ options[:project_id] = id unless id == ""
63
+ options[:full_name] = name unless name == ""
64
+ options[:integration_branch] = integration_branch unless integration_branch == ""
65
+ options[:only_mine] = (only_mine != "") unless name == ""
48
66
  end
49
67
 
50
68
  def parse_argv(*args)
@@ -53,11 +71,13 @@ module Commands
53
71
  opts.on("-k", "--api-key=", "Pivotal Tracker API key") { |k| options[:api_token] = k }
54
72
  opts.on("-p", "--project-id=", "Pivotal Trakcer project id") { |p| options[:project_id] = p }
55
73
  opts.on("-n", "--full-name=", "Pivotal Trakcer full name") { |n| options[:full_name] = n }
74
+ opts.on("-b", "--integration-branch=", "The branch to merge finished stories back down onto") { |b| options[:integration_branch] = b }
75
+ opts.on("-m", "--only-mine", "Only select Pivotal Tracker stories assigned to you") { |m| options[:only_mine] = m }
56
76
  opts.on("-q", "--quiet", "Quiet, no-interaction mode") { |q| options[:quiet] = q }
57
77
  opts.on("-v", "--[no-]verbose", "Run verbosely") { |v| options[:verbose] = v }
58
- opts.on_tail("-h", "--help", "This usage guide") { put opts; exit 0 }
78
+ opts.on_tail("-h", "--help", "This usage guide") { put opts.to_s; exit 0 }
59
79
  end.parse!(args)
60
80
  end
61
81
 
62
82
  end
63
- end
83
+ end
@@ -6,26 +6,17 @@ module Commands
6
6
  def run!
7
7
  super
8
8
 
9
- # clunky way to get branch name... need better method
10
- current_branch = get('git status | head -1').gsub(/^.+On branch /, '').chomp
11
- story_id = current_branch[/\d+/]
12
9
  unless story_id
13
10
  put "Branch name must contain a Pivotal Tracker story id"
14
11
  return 1
15
12
  end
16
13
 
17
- api = Pivotal::Api.new(:api_token => options[:api_token])
18
- project = api.projects.find(:id => options[:project_id])
19
- story = project.stories.find(:id => story_id)
20
-
21
14
  put "Marking Story #{story_id} as finished..."
22
- if story.update_attributes(:current_state => :finished)
23
-
24
- target_branch = "develop"
25
- put "Merging #{current_branch} into #{target_branch}"
26
- sys "git checkout #{target_branch}"
15
+ if story.update_attributes(:current_state => story.finished_state)
16
+ put "Merging #{current_branch} into #{integration_branch}"
17
+ sys "git checkout #{integration_branch}"
27
18
  sys "git merge --no-ff #{current_branch}"
28
-
19
+
29
20
  put "Removing #{current_branch} branch"
30
21
  sys "git branch -d #{current_branch}"
31
22
 
@@ -37,5 +28,19 @@ module Commands
37
28
  end
38
29
  end
39
30
 
31
+ protected
32
+
33
+ # FIXME: clunky way to get branch name... need better method
34
+ def current_branch
35
+ @current_branch ||= get('git status | head -1').gsub(/^.+On branch /, '').chomp
36
+ end
37
+
38
+ def story_id
39
+ current_branch[/\d+/]
40
+ end
41
+
42
+ def story
43
+ @story ||= project.stories.find(:id => story_id)
44
+ end
40
45
  end
41
- end
46
+ end
data/lib/commands/pick.rb CHANGED
@@ -4,26 +4,26 @@ module Commands
4
4
  class Pick < Base
5
5
 
6
6
  def type
7
- raise Error "must define in subclass"
7
+ raise Error("must define in subclass")
8
8
  end
9
9
 
10
10
  def plural_type
11
- raise Error "must define in subclass"
11
+ raise Error("must define in subclass")
12
12
  end
13
13
 
14
14
  def branch_suffix
15
- raise Error "must define in subclass"
15
+ raise Error("must define in subclass")
16
16
  end
17
17
 
18
18
  def run!
19
19
  super
20
-
21
- put "Retrieving latest #{plural_type} from Pivotal Tracker..."
22
- api = Pivotal::Api.new(:api_token => options[:api_token])
23
20
 
24
- project = api.projects.find(:id => options[:project_id])
25
- story = project.stories.find(:conditions => { :story_type => type, :current_state => :unstarted }, :limit => 1).first
26
-
21
+ msg = "Retrieving latest #{plural_type} from Pivotal Tracker"
22
+ if options[:only_mine]
23
+ msg += " for #{options[:full_name]}"
24
+ end
25
+ put "#{msg}..."
26
+
27
27
  unless story
28
28
  put "No #{plural_type} available!"
29
29
  return 0
@@ -57,5 +57,14 @@ module Commands
57
57
  end
58
58
  end
59
59
 
60
+ protected
61
+
62
+ def story
63
+ return @story if @story
64
+
65
+ conditions = { :story_type => type, :current_state => :unstarted }
66
+ conditions[:owned_by] = options[:full_name] if options[:only_mine]
67
+ @story = project.stories.find(:conditions => conditions, :limit => 1).first
68
+ end
60
69
  end
61
- end
70
+ end
data/lib/pivotal/base.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ gem 'rest-client', '~>1.4.0'
2
3
  require 'rest_client'
3
4
  require 'nokogiri'
4
5
  require 'builder'
data/lib/pivotal/story.rb CHANGED
@@ -30,6 +30,15 @@ module Pivotal
30
30
  def unestimated?
31
31
  estimate == "unestimated"
32
32
  end
33
+
34
+ def finished_state
35
+ case story_type
36
+ when "chore"
37
+ :accepted
38
+ else
39
+ :finished
40
+ end
41
+ end
33
42
 
34
43
  end
35
- end
44
+ end
data/readme.markdown CHANGED
@@ -6,26 +6,26 @@ You might want to have [this song](http://www.dailymotion.com/video/x9vzh0_olivi
6
6
  ##Let's Git Pivotal
7
7
  Inspired by [Hashrocket's blend of git and Pivotal Tracker](http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html) and [a popular article on effective git workflows](http://nvie.com/archives/323), I set off to create a set of utilities to simplify the workflow between the two.
8
8
 
9
- ###Git Pick
10
- The original `git pick` has been deprecated. Three new commands take its place: `git feature`, `git bug` and `git chore`, which collects the top-most available feature, bug or chore (respectively) from your Pivotal Tracker, and offers to create a feature branch.
9
+ ###Git Feature/Bug/Chore
10
+ The Git Pivotal utility provides three tools to integrate with your Pivotal Tracker project -- `git feature`, `git bug` and `git chore`. These commands collect the top-most available feature, bug or chore (respectively) from your Pivotal Tracker and creates a unique feature branch for it.
11
11
 
12
- 1 git-pick:master % git feature
12
+ 1 git-pivotal:master % git feature
13
13
  Collecting latest stories from Pivotal Tracker...
14
14
  Story: Test git pivotal
15
15
  URL: http://www.pivotaltracker.com/story/show/1234567
16
16
  Updating story status in Pivotal Tracker...
17
17
  Enter branch name (will be prepended by 1234567) [feature]: testing
18
18
  Creating 1234567-testing branch...
19
- 2 git-pick:1234567-testing %
19
+ 2 git-pivotal:1234567-testing %
20
20
 
21
21
  ###Git Finish
22
- When on a feature branch, this command will close the associated story in Pivotal Tracker, merge the branch into the develop branch and remove the feature branch.
22
+ When on a feature branch, this command will close the associated story in Pivotal Tracker, merge the branch into your integration branch (`master` by default) and remove the feature branch.
23
23
 
24
- 3 git-pick:1234567-testing % git finish
24
+ 3 git-pivotal:1234567-testing % git finish
25
25
  Marking Story 1234567 as finished...
26
- Merging 1234567-testing into develop
26
+ Merging 1234567-testing into master
27
27
  Removing 1234567-testing branch
28
- 4 git-pick:develop %
28
+ 4 git-pivotal:master %
29
29
 
30
30
  ##Installation
31
31
  To install git-pivotal, simply run
@@ -38,6 +38,14 @@ Once installed, git pivotal needs three bits of info: your Pivotal Tracker API T
38
38
  git config --global pivotal.api-token 9a9a9a9a9a9a9a9a9a9a
39
39
  git config --global pivotal.full-name "Jeff Tucker"
40
40
 
41
+ If you prefer to merge back to a branch other than master when you've finished a story, you can configure that:
42
+
43
+ git config --global pivotal.integration-branch develop
44
+
45
+ If you only want to pick up bugs/features/chores that are already assigned to you, set:
46
+
47
+ git config --global pivotal.only-mine true
48
+
41
49
  The project id is best placed within your project's git config:
42
50
 
43
51
  git config -f .git/config pivotal.project-id 88888
@@ -45,11 +53,13 @@ The project id is best placed within your project's git config:
45
53
  If you're not interested in storing these options in git, you can pass them into git pivotal as command line arguments. See the usage guides for more details.
46
54
 
47
55
  ##TODO
48
- This is <del>some seriously</del> alpha software. Several things on the ol' todo list:
56
+ This is beta software. Several things on the ol' todo list:
49
57
 
50
58
  * <del>Create a general Pivotal::Base#update_attributes method</del>
51
59
  * <del>`git pick` doesn't update the story to indicate who claimed it</del>
52
60
  * <del>Add command to close/finish currently 'picked' feature</del>
53
61
  * <del>Reduce verbosity of `git pick`</del>
54
- * Allow users to define their development branch name for `git finish`
62
+ * <del>Allow users to define their development branch name for `git finish`</del>
63
+ * Add option to install git commit hooks which add commit messages to story comments
64
+ * Drop custom Pivotal API in favor of pivotal-tracker gem
55
65
  * More that I can't recall at the moment
@@ -65,7 +65,28 @@ describe Commands::Base do
65
65
  @pick = Commands::Base.new(@input, @output,"--no-verbose")
66
66
  @pick.options[:verbose].should be_false
67
67
  end
68
-
68
+
69
+ it "should set the integration branch with the -b option" do
70
+ @pick = Commands::Base.new(@input, @output, "-b", "integration")
71
+ @pick.send(:integration_branch).should == "integration"
72
+ end
73
+
74
+ it "should set the integration branch from git config" do
75
+ Commands::Base.any_instance.stubs(:get).with("git config --get pivotal.integration-branch").returns("chickens")
76
+ @pick = Commands::Base.new
77
+ @pick.send(:integration_branch).should == "chickens"
78
+ end
79
+
80
+ it "should set the integration branch with the --integration-branch= option" do
81
+ @pick = Commands::Base.new(@input, @output, "--integration-branch=integration")
82
+ @pick.send(:integration_branch).should == "integration"
83
+ end
84
+
85
+ it "should default the integration branch to master if none is specified" do
86
+ @pick = Commands::Base.new
87
+ @pick.send(:integration_branch).should == "master"
88
+ end
89
+
69
90
  it "should print a message if the API token is missing" do
70
91
  @output.expects(:print).with("Pivotal Tracker API Token and Project ID are required\n")
71
92
 
@@ -0,0 +1,131 @@
1
+ require 'commands/finish'
2
+ require 'spec_helper'
3
+
4
+ describe Commands::Finish do
5
+
6
+ def mock_projects
7
+ if @mock_projects.nil?
8
+ @mock_projects = mock("mock project list")
9
+ @mock_projects.stubs(:find).with(:id => mock_project_id).returns(mock_project)
10
+ end
11
+ @mock_projects
12
+ end
13
+
14
+ def mock_project_id
15
+ @mock_project_id ||= '4321'
16
+ end
17
+
18
+ def mock_project
19
+ if @mock_project.nil?
20
+ @mock_project = mock("mock project")
21
+ @mock_project.stubs(:stories).returns(mock_stories)
22
+ end
23
+ @mock_project
24
+ end
25
+
26
+ def mock_stories
27
+ if @mock_stories.nil?
28
+ @mock_stories = mock("mock story list")
29
+ @mock_stories.stubs(:find).with(:id => mock_story_id).returns(mock_story)
30
+ end
31
+ @mock_stories
32
+ end
33
+
34
+ def mock_story_id
35
+ @mock_story_id ||= '1234'
36
+ end
37
+
38
+ def mock_story
39
+ if @mock_story.nil?
40
+ @mock_story = mock("mock story")
41
+ end
42
+ @mock_story
43
+ end
44
+
45
+ before(:each) do
46
+ # stub out git config requests
47
+ Commands::Finish.any_instance.stubs(:get).with { |v| v =~ /git config/ }.returns("")
48
+
49
+ Pivotal::Api.any_instance.stubs(:projects).returns(mock_projects)
50
+
51
+ @finish = Commands::Finish.new(nil, nil, "-p", mock_project_id)
52
+ @finish.stubs(:sys)
53
+ @finish.stubs(:put)
54
+ end
55
+
56
+ context "where the branch name does not contain a valid story id" do
57
+ before(:each) do
58
+ # stub out git status request to identify the branch
59
+ branch_name = "invalid-branch-name-without-story-id"
60
+ Commands::Finish.any_instance.stubs(:get).with { |v| v =~ /git status/ }.returns("# On branch #{branch_name}")
61
+ end
62
+
63
+ it "should return an exit status of one" do
64
+ @finish.run!.should == 1
65
+ end
66
+
67
+ it "should print an error message" do
68
+ @finish.expects(:put).with("Branch name must contain a Pivotal Tracker story id").once
69
+ @finish.run!
70
+ end
71
+ end
72
+
73
+ context "where the branch name does contain a valid story id" do
74
+ def branch_name
75
+ "#{mock_story_id}-feature-branch-name"
76
+ end
77
+
78
+ before(:each) do
79
+ # stub out git status request to identify the branch
80
+ Commands::Finish.any_instance.stubs(:get).with { |v| v =~ /git status/ }.returns("# On branch #{branch_name}")
81
+ end
82
+
83
+ it "should attempt to update the story status to the stories finished_state" do
84
+ mock_story.stubs(:finished_state).returns(:finished)
85
+ mock_story.expects(:update_attributes).with(:current_state => :finished)
86
+ @finish.run!
87
+ end
88
+
89
+ context "and the story is successfully marked as finished in PT" do
90
+ before(:each) do
91
+ mock_story.stubs(:finished_state).returns(:finished)
92
+ mock_story.stubs(:update_attributes).with(:current_state => :finished).returns(true)
93
+ end
94
+
95
+ it "should succeed with an exist status of zero" do
96
+ @finish.run!.should == 0
97
+ end
98
+
99
+ it "should checkout the developer's integration branch" do
100
+ @finish.expects(:sys).with("git checkout master")
101
+ @finish.run!
102
+ end
103
+
104
+ it "should merge in the story branch" do
105
+ @finish.expects(:sys).with("git merge --no-ff #{branch_name}")
106
+ @finish.run!
107
+ end
108
+
109
+ it "should remove the story branch" do
110
+ @finish.expects(:sys).with("git branch -d #{branch_name}")
111
+ @finish.run!
112
+ end
113
+ end
114
+
115
+ context "and the story fails to be marked as finished in PT" do
116
+ before(:each) do
117
+ mock_story.stubs(:finished_state).returns(:finished)
118
+ mock_story.stubs(:update_attributes).with(:current_state => :finished).returns(false)
119
+ end
120
+
121
+ it "should fail with an exist status of one" do
122
+ @finish.run!.should == 1
123
+ end
124
+
125
+ it "should print an error message" do
126
+ @finish.expects(:put).with("Unable to mark Story #{mock_story_id} as finished").once
127
+ @finish.run!
128
+ end
129
+ end
130
+ end
131
+ end
@@ -96,5 +96,18 @@ describe Pivotal::Story do
96
96
  @story.xml = Factory(:story, :story_type => :feature, :estimate => :unestimated)
97
97
  @story.start!.should be_false
98
98
  end
99
+
100
+ it "should return a finished state of accepted for a chore" do
101
+ @story.xml = story_type "chore"
102
+ @story.finished_state.should == :accepted
103
+ end
104
+
105
+ ["feature", "release", "bug"].each do |type|
106
+ it "should return a finished state of finished for a #{type}" do
107
+ @story.xml = story_type type
108
+ @story.finished_state.should == :finished
109
+ end
110
+ end
111
+
99
112
 
100
113
  end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-pivotal
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 17
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 2
8
- - 2
9
- version: 0.2.2
9
+ - 3
10
+ version: 0.2.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jeff Tucker
@@ -15,16 +16,18 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-03-11 00:00:00 -05:00
19
+ date: 2010-07-23 00:00:00 -04:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: nokogiri
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
28
  - - ">="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 3
28
31
  segments:
29
32
  - 0
30
33
  version: "0"
@@ -34,21 +37,27 @@ dependencies:
34
37
  name: rest-client
35
38
  prerelease: false
36
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
37
41
  requirements:
38
- - - ">="
42
+ - - ~>
39
43
  - !ruby/object:Gem::Version
44
+ hash: 7
40
45
  segments:
46
+ - 1
47
+ - 4
41
48
  - 0
42
- version: "0"
49
+ version: 1.4.0
43
50
  type: :runtime
44
51
  version_requirements: *id002
45
52
  - !ruby/object:Gem::Dependency
46
53
  name: builder
47
54
  prerelease: false
48
55
  requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
49
57
  requirements:
50
58
  - - ">="
51
59
  - !ruby/object:Gem::Version
60
+ hash: 3
52
61
  segments:
53
62
  - 0
54
63
  version: "0"
@@ -58,9 +67,11 @@ dependencies:
58
67
  name: rspec
59
68
  prerelease: false
60
69
  requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
61
71
  requirements:
62
72
  - - ">="
63
73
  - !ruby/object:Gem::Version
74
+ hash: 3
64
75
  segments:
65
76
  - 0
66
77
  version: "0"
@@ -70,9 +81,11 @@ dependencies:
70
81
  name: rcov
71
82
  prerelease: false
72
83
  requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
73
85
  requirements:
74
86
  - - ">="
75
87
  - !ruby/object:Gem::Version
88
+ hash: 3
76
89
  segments:
77
90
  - 0
78
91
  version: "0"
@@ -82,9 +95,11 @@ dependencies:
82
95
  name: mocha
83
96
  prerelease: false
84
97
  requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
85
99
  requirements:
86
100
  - - ">="
87
101
  - !ruby/object:Gem::Version
102
+ hash: 3
88
103
  segments:
89
104
  - 0
90
105
  version: "0"
@@ -133,6 +148,7 @@ files:
133
148
  - spec/commands/bug_spec.rb
134
149
  - spec/commands/chore_spec.rb
135
150
  - spec/commands/feature_spec.rb
151
+ - spec/commands/finish_spec.rb
136
152
  - spec/factories.rb
137
153
  - spec/factory.rb
138
154
  - spec/pivotal/api_spec.rb
@@ -142,6 +158,7 @@ files:
142
158
  - spec/pivotal/collection_spec.rb
143
159
  - spec/pivotal/project_spec.rb
144
160
  - spec/pivotal/story_spec.rb
161
+ - spec/spec.opts
145
162
  - spec/spec_helper.rb
146
163
  has_rdoc: true
147
164
  homepage: http://github.com/trydionel/git-pivotal
@@ -153,23 +170,27 @@ rdoc_options:
153
170
  require_paths:
154
171
  - lib
155
172
  required_ruby_version: !ruby/object:Gem::Requirement
173
+ none: false
156
174
  requirements:
157
175
  - - ">="
158
176
  - !ruby/object:Gem::Version
177
+ hash: 3
159
178
  segments:
160
179
  - 0
161
180
  version: "0"
162
181
  required_rubygems_version: !ruby/object:Gem::Requirement
182
+ none: false
163
183
  requirements:
164
184
  - - ">="
165
185
  - !ruby/object:Gem::Version
186
+ hash: 3
166
187
  segments:
167
188
  - 0
168
189
  version: "0"
169
190
  requirements: []
170
191
 
171
192
  rubyforge_project:
172
- rubygems_version: 1.3.6
193
+ rubygems_version: 1.3.7
173
194
  signing_key:
174
195
  specification_version: 3
175
196
  summary: A collection of git utilities to ease integration with Pivotal Tracker
@@ -178,6 +199,7 @@ test_files:
178
199
  - spec/commands/bug_spec.rb
179
200
  - spec/commands/chore_spec.rb
180
201
  - spec/commands/feature_spec.rb
202
+ - spec/commands/finish_spec.rb
181
203
  - spec/factories.rb
182
204
  - spec/factory.rb
183
205
  - spec/pivotal/api_spec.rb