v2gpti 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbca65a36ba99402c938e32fdc43448a87dec18c
4
- data.tar.gz: 55bdabc5b52f1802edcb0f9282110af6a39c0566
3
+ metadata.gz: d0f97f1aaf9f5ee155d01d98bfcbbf723c3f0198
4
+ data.tar.gz: ca83cbe5cb66c8e31f2a5a20088ef81ac3e8ca86
5
5
  SHA512:
6
- metadata.gz: 9d588cd11852a38ec40262fd5a96b053168d2b6d91aab309b65a19ac10e0b58a1de97f2d9b70885d488adf393f283eb54fbce68759ed55018183069447b927d4
7
- data.tar.gz: 23cea4846171223146edc65dfbd8014a244f17237a5268f5a4c6a25c9f167b60a32ede918f516df3934923bc1349e880174c56af18af35db2dcf2ec1d556e3c5
6
+ metadata.gz: 878a17d45ab81f5c5df7945e808370e482458c196e1275ddc8229424ad5ba11283f49b2e776337de2053bd194fce4c60cad5a07d609e74a5a06e95d59fc09b32
7
+ data.tar.gz: 763d6993ac3777fbdb8b815ffa883229242e875816c2b85edba7a3c3c08fa9cb9e0fdc9713fa591c698c4e28c6ff069166e840a011c05cbb086ad9196ba30cac
@@ -43,7 +43,7 @@ module GitPivotalTrackerIntegration
43
43
  @configuration.check_for_config_file
44
44
  @configuration.check_for_config_contents
45
45
 
46
- @client = TrackerApi::Client.new(:token => @configuration.api_token)
46
+ @client = TrackerApi::Client.new(:token => @configuration.api_token, :logger => Logger.new('faraday.log'))
47
47
  @platform = @configuration.platform_name
48
48
 
49
49
  current_project_id = @configuration.project_id.to_i
@@ -113,11 +113,8 @@ module GitPivotalTrackerIntegration
113
113
  all_stories << build_story
114
114
 
115
115
  all_stories.each do |story|
116
- labels = story.labels.map(&:name)
117
- labels << build_story.name
118
- labels.uniq!
119
116
 
120
- story.add_labels(*labels)
117
+ story.add_label(build_story.name)
121
118
 
122
119
  case story.story_type
123
120
  when 'feature', 'bug'
@@ -56,9 +56,7 @@ module GitPivotalTrackerIntegration
56
56
  Util::Git.merge(@configuration.story(@project), no_complete)
57
57
  Util::Git.push Util::Git.branch_name
58
58
 
59
- labels = story.labels.map(&:name)
60
- labels << "Need code review"
61
- story.add_labels(*labels)
59
+ story.add_label('Need code review')
62
60
  end
63
61
 
64
62
 
@@ -87,7 +85,7 @@ module GitPivotalTrackerIntegration
87
85
 
88
86
  # cd back to the working_directory
89
87
  Dir.chdir(working_directory)
90
- elsif @platform == 'android'
88
+ elsif @platform.downcase == 'android'
91
89
  updater = VersionUpdate::Gradle.new(@repository_root)
92
90
  updater.update_dev_version(build_number)
93
91
  end
@@ -118,10 +118,7 @@ module GitPivotalTrackerIntegration
118
118
  puts Util::Shell.exec "git checkout #{current_branch}"
119
119
 
120
120
  #add story name as one of the labels for the story
121
- labels = story.labels.map(&:name)
122
- labels << story.name unless labels.include?(story.name)
123
- puts "labels: #{labels.join(', ')}"
124
- story.add_labels(*labels) unless labels.include?(story.name)
121
+ story.add_label(story.name)
125
122
 
126
123
  i_stories = included_stories @project, story
127
124
  add_version_tag_to_stories i_stories, story
@@ -134,19 +131,10 @@ module GitPivotalTrackerIntegration
134
131
  all_stories = stories.dup
135
132
  all_stories << release_story
136
133
  puts "Included stories:\n"
137
- all_stories.each {|story|
138
- labels = story.labels.map(&:name)
139
- origin_labels = labels.dup
140
- labels << release_story.name
141
- labels.uniq!
142
-
143
- unless origin_labels.empty?
144
- if origin_labels.to_s.scan(/b\d{1}/).size > origin_labels.to_s.scan(/v\d{1}/).size
145
- story.add_labels(*labels)
146
- puts "#{story.id} - #{story.name}"
147
- end
148
- end
149
- }
134
+ all_stories.each do |story|
135
+ story.add_label(release_story.name)
136
+ puts "#{story.id} - #{story.name}"
137
+ end
150
138
  end
151
139
 
152
140
  def included_stories(project, release_story)
@@ -68,7 +68,7 @@ module GitPivotalTrackerIntegration
68
68
  # story type from (feature, bug, chore)
69
69
  # state from (rejected unstarted unscheduled)
70
70
  # if story type is "feature", then retrieve only estimated ones.
71
- criteria = " state:unstarted,rejected,unscheduled"
71
+ criteria = " state:unstarted,rejected,unscheduled,planned"
72
72
 
73
73
  if %w(feature bug chore).include?(filter)
74
74
  criteria << " type:#{filter}"
@@ -145,7 +145,7 @@ module GitPivotalTrackerIntegration
145
145
  release_type = (type == "b") ? "build" : "version"
146
146
 
147
147
  criteria = "type:release"
148
- criteria << " state:unstarted,rejected,unscheduled"
148
+ criteria << " state:unstarted,rejected,planned"
149
149
  criteria << " name:/#{type}*/" #story name starts with b or v
150
150
 
151
151
  candidates = project.stories(filter: criteria, limit: limit)
@@ -163,10 +163,15 @@ module GitPivotalTrackerIntegration
163
163
 
164
164
  if last_release
165
165
  puts " The last #{release_type} release was #{last_release.name}."
166
- next_release_number = set_next_release_number(last_release, release_type)
166
+ if release_type == "version"
167
+ next_release_number = ask("To create a new #{release_type}, enter a name for the new release story:")
168
+ else
169
+ next_release_number = set_next_release_number(last_release, release_type)
170
+ end
167
171
  else
168
172
  next_release_number = ask("To create a new #{release_type}, enter a name for the new release story:")
169
173
  end
174
+
170
175
  puts "New #{release_type} release number is: #{next_release_number}"
171
176
  story = self.create_new_release(project, next_release_number)
172
177
  end
@@ -34,34 +34,44 @@ module GitPivotalTrackerIntegration
34
34
  # @param [String] new_version the version to update the project to
35
35
  # @return [void]
36
36
  def update_dev_version(new_version)
37
- update_version('DEV', 'SNAPSHOT', new_version)
37
+ update_version_in_sec('DEV', new_version, 'SNAPSHOT')
38
38
  end
39
39
 
40
40
  def update_qa_version(new_version)
41
- update_version('QA', 'SNAPSHOT', new_version)
41
+ update_version_in_sec('QA', new_version, 'SNAPSHOT')
42
42
  end
43
43
 
44
44
  def update_uat_version(new_version)
45
- update_version('UAT', new_version, new_version)
45
+ update_version_in_sec('UAT', qa_version_code, new_version)
46
46
  end
47
47
 
48
48
  def update_prod_version(new_version)
49
- update_version('PROD', new_version, new_version)
49
+ update_version_in_sec('PROD', qa_version_code, new_version)
50
50
  end
51
51
 
52
52
  private
53
53
 
54
- def update_version(version_type, new_name, new_version)
54
+ def update_version_in_sec(section, new_code, new_version)
55
55
  content = File.read(@gradle_file)
56
- new_content = content.gsub(/productFlavors.*?#{version_type}.*?versionCode( )*=?( )*(.*?)versionName( )*=?( )*(.*?\s)/m) do |match|
57
- version_code = $3.strip
58
- version_name = $6.strip
59
- match.gsub(version_code, new_version).gsub(version_name, "\"#{new_name}\"")
60
- end
56
+
57
+ new_content = update_version(content, section, 'Code', new_code) #update versionCode
58
+ new_content = update_version(new_content, section, 'Name', "\"#{new_version}\"") #update versionName
61
59
 
62
60
  File.open(@gradle_file, 'w') { |file| file.write(new_content) }
63
61
  end
64
62
 
63
+ def qa_version_code
64
+ content = File.read(@gradle_file)
65
+ match = content.match(/productFlavors.*?QA.*?versionCode( )*=?( )*(.*?\s)/m)
66
+ match[3].strip
67
+ end
68
+
69
+ def update_version(file_content, section, type, new_value)
70
+ file_content.gsub(/productFlavors.*?#{section}.*?version#{type}( )*=?( )*(.*?\s)/m) do |match|
71
+ match.gsub($3.strip, new_value)
72
+ end
73
+ end
74
+
65
75
  end
66
76
 
67
77
  end
@@ -72,6 +72,15 @@ module TrackerApi
72
72
  request(:put, parse_query_and_convenience_headers(path, options))
73
73
  end
74
74
 
75
+ # Make a HTTP DELETE request
76
+ #
77
+ # @param path [String] The path, relative to api endpoint
78
+ # @param options [Hash] Query and header params for request
79
+ # @return [Faraday::Response]
80
+ def delete(path, options = {})
81
+ request(:delete, parse_query_and_convenience_headers(path, options))
82
+ end
83
+
75
84
  # Make one or more HTTP GET requests, optionally fetching
76
85
  # the next page of results from information passed back in headers
77
86
  # based on value in {#auto_paginate}.
@@ -193,15 +202,25 @@ module TrackerApi
193
202
  params = {}
194
203
  end
195
204
 
196
- @last_response = response = connection.send(method) do |req|
197
- req.url(url)
198
- req.headers.merge!(headers)
199
- req.params.merge!(params)
200
- req.body = body
205
+ response = nil
206
+ sleep 0.5 # Per PT we might be hitting their API too frequently. So adding a 0.5 Sec pause.
207
+ begin
208
+ tries ||= 3
209
+ @last_response = response = connection.send(method) do |req|
210
+ req.url(url)
211
+ req.headers.merge!(headers)
212
+ req.params.merge!(params)
213
+ req.body = body
214
+ end
215
+ response
216
+
217
+ rescue Faraday::Error::ClientError => e
218
+ if e.response[:status].between?(500, 520) # retry calling the api if the response is any of 500 errors
219
+ sleep 1
220
+ retry unless (tries -= 1).zero?
221
+ end
222
+ raise TrackerApi::Error.new(e)
201
223
  end
202
- response
203
- rescue Faraday::Error::ClientError => e
204
- raise TrackerApi::Error.new(e)
205
224
  end
206
225
 
207
226
  class Pagination
@@ -12,6 +12,23 @@ module TrackerApi
12
12
 
13
13
  Resources::Project.new({ client: client }.merge(data))
14
14
  end
15
+
16
+ def create(params={})
17
+ data = client.post("/projects", params: params).body
18
+
19
+ Resources::Project.new({ client: client }.merge(data))
20
+ end
21
+
22
+ def update(id, params={})
23
+ data = client.put("/projects/#{id}", params: params).body
24
+
25
+ Resources::Project.new({ client: client }.merge(data))
26
+ end
27
+
28
+ def delete(id)
29
+ client.delete("/projects/#{id}").body
30
+ end
31
+
15
32
  end
16
33
  end
17
34
  end
@@ -32,6 +32,11 @@ module TrackerApi
32
32
 
33
33
  story.attributes = data
34
34
  end
35
+
36
+ def add_label(story, params = {})
37
+ raise ArgumentError, 'Valid story required to update.' unless story.instance_of?(Resources::Story)
38
+ data = client.post("/projects/#{story.project_id}/stories/#{story.id}/labels", params: params).body
39
+ end
35
40
  end
36
41
  end
37
42
  end
@@ -78,12 +78,12 @@ module TrackerApi
78
78
  changes_applied
79
79
  end
80
80
 
81
- # update labels.This method can also be used to remove labels.
82
- def add_labels(*new_labels)
81
+ # Add a new label to a story
82
+ def add_label(label)
83
83
  raise ArgumentError, 'Can not update a story with an unknown project_id.' if project_id.nil?
84
- raise ArgumentError, 'Provide at lease one label name' if new_labels.empty?
84
+ raise ArgumentError, 'Provide at lease one label name' if label.empty?
85
85
 
86
- Endpoints::Story.new(client).update(self, {:labels => new_labels.map{|l| {:name => l.to_s}}})
86
+ Endpoints::Story.new(client).add_label(self, {:name => label.to_s})
87
87
 
88
88
  changes_applied
89
89
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: v2gpti
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Wolski
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-06-16 00:00:00.000000000 Z
13
+ date: 2015-07-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: highline