abak-flow 0.1.6 → 0.2.1

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/Gemfile CHANGED
@@ -3,4 +3,5 @@ source "http://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  gem 'hub', '~> 1.8.1'
6
- gem 'commander', '~> 4.0.7'
6
+ gem 'commander', '~> 4.0.7'
7
+ gem 'octokit', '~> 1.0.4'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.2.1
data/abak-flow.gemspec CHANGED
@@ -20,4 +20,5 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_runtime_dependency 'hub'
22
22
  s.add_runtime_dependency 'commander'
23
+ s.add_runtime_dependency 'octokit'
23
24
  end
data/lib/abak-flow.rb CHANGED
@@ -4,6 +4,8 @@ module Abak
4
4
  end
5
5
 
6
6
  require 'hub'
7
+ require 'highline'
8
+ require 'octokit'
7
9
  require 'abak-flow/hub_extensions'
8
10
  require 'abak-flow/version'
9
11
  require "commander/import"
@@ -16,6 +16,8 @@ module Abak::Flow
16
16
  c.option '--base STRING', String, 'Имя ветки, в которую нужно принять изменения'
17
17
 
18
18
  c.action do |args, options|
19
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
20
+
19
21
  request_rules = {:feature => :develop, :hotfix => :master}
20
22
  jira_browse_url = 'http://jira.dev.apress.ru/browse/'
21
23
 
@@ -26,32 +28,52 @@ module Abak::Flow
26
28
  title = args.first.to_s.strip
27
29
  title = task if task =~ /^\w+\-\d{1,}$/ && title.empty?
28
30
 
31
+ api_user = Hub::Commands.send(:git_reader).read_config('abak.apiuser')
32
+ api_token = Hub::Commands.send(:git_reader).read_config('abak.apitoken')
33
+ api_client = Octokit::Client.new(:login => api_user, :oauth_token => api_token)
34
+
29
35
  # Проверим, что мы не в мастере или девелопе
30
36
  if [:master, :develop].include? current_branch.to_sym
31
- say 'Нельзя делать pull request из меток master или develop'
37
+ say color('Нельзя делать pull request из меток master или develop', :error).to_s
32
38
  exit
33
39
  end
34
40
 
35
41
  # Проверим, что у нас настроен origin
36
42
  if repository.remote_by_name('origin').nil?
37
- say 'Необходимо настроить репозиторий origin (форк) для текущего пользователя'
38
- say '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
43
+ say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
44
+ say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
39
45
  exit
40
46
  end
41
47
 
42
48
  # Проверим, что у нас настроен upstream
43
49
  if repository.remote_by_name('upstream').nil?
44
- say 'Необходимо настроить репозиторий upstream (главный) для текущего пользователя'
45
- say '=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
50
+ say color('Необходимо настроить репозиторий upstream (главный) для текущего пользователя', :error).to_s
51
+ say color('=> git remote add upstream https://Developer@github.com/abak-press/sample.git', :info).to_s
46
52
  exit
47
53
  end
48
54
 
49
55
  if title.empty?
50
- say 'Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:'
51
- say '=> git request publish "PC-001"'
56
+ say color('Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:', :error).to_s
57
+ say color('=> git request publish "PC-001"', :info).to_s
58
+ exit
59
+ end
60
+
61
+ # Проверим, что у нас указан апи юзер
62
+ if api_user.empty?
63
+ say color('Необходимо указать своего пользователя API github', :error).to_s
64
+ say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
52
65
  exit
53
66
  end
54
67
 
68
+ # Проверим, что у нас указан токен
69
+ if api_token.empty?
70
+ say color('Необходимо указать токен своего пользователя API github', :error).to_s
71
+ say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
72
+ exit
73
+ end
74
+
75
+ upstream_project = repository.remote_by_name('upstream').project
76
+
55
77
  # Расставим ветки согласно правилам
56
78
  head = "#{repository.repo_owner}:#{current_branch}"
57
79
  base = "#{repository.remote_by_name('upstream').project.owner}:#{request_rules.fetch(remote_branch.to_sym, '')}"
@@ -60,16 +82,17 @@ module Abak::Flow
60
82
  base = options.base unless options.base.nil?
61
83
 
62
84
  # Запушим текущую ветку на origin
63
- # @TODO Может быть лучше достать дерективу конфига origin?
85
+ # TODO Может быть лучше достать дерективу конфига origin?
64
86
  say "=> Обновляю ветку #{current_branch} на origin"
65
87
  Hub::Runner.execute('push', 'origin', current_branch)
66
88
 
67
89
  # Запостим pull request на upstream
68
- command_options = ['pull-request', title, '-b', base, '-h', head]
69
- command_options |= ['-d', jira_browse_url + task] if task =~ /^\w+\-\d{1,}$/
90
+ body = jira_browse_url + task if task =~ /^\w+\-\d{1,}$/
91
+ body ||= 'Я забыл какая это задача :('
70
92
 
71
93
  say '=> Делаю pull request на upstream'
72
- say Hub::Runner.execute(*command_options)
94
+ result = api_client.create_pull_request("#{upstream_project.owner}/#{upstream_project.name}", base, head, title, body)
95
+ say result._links.self.href
73
96
  end
74
97
  end
75
98
 
@@ -80,13 +103,15 @@ module Abak::Flow
80
103
  c.option '--branch STRING', String, 'Имя ветки, которую нужно обновить'
81
104
 
82
105
  c.action do |args, options|
106
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
107
+
83
108
  repository = Hub::Commands.send :local_repo
84
109
  current_branch = repository.current_branch.short_name
85
110
 
86
111
  # Проверим, что у нас настроен origin
87
112
  if repository.remote_by_name('origin').nil?
88
- say 'Необходимо настроить репозиторий origin (форк) для текущего пользователя'
89
- say '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
113
+ say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
114
+ say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
90
115
  exit
91
116
  end
92
117
 
@@ -102,10 +127,12 @@ module Abak::Flow
102
127
  c.description = 'Создать ветку для выполнения задачи. Лучше всего, если название задачи, будет ее номером из jira'
103
128
 
104
129
  c.action do |args, options|
130
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
131
+
105
132
  task = args.shift.to_s
106
133
 
107
134
  if task.empty?
108
- say 'Необходимо указать имя задачи, а лучше всего ее номер из jira'
135
+ say color('Необходимо указать имя задачи, а лучше всего ее номер из jira', :error).to_s
109
136
  exit
110
137
  end
111
138
 
@@ -122,10 +149,12 @@ module Abak::Flow
122
149
  c.description = 'Создать ветку для выполнения bugfix задачи. Лучше всего, если название задачи, будет ее номером из jira'
123
150
 
124
151
  c.action do |args, options|
152
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
153
+
125
154
  task = args.shift.to_s
126
155
 
127
156
  if task.empty?
128
- say 'Необходимо указать имя задачи, а лучше всего ее номер из jira'
157
+ say color('Необходимо указать имя задачи, а лучше всего ее номер из jira', :error).to_s
129
158
  exit
130
159
  end
131
160
 
@@ -147,6 +176,8 @@ module Abak::Flow
147
176
  c.option '--origin', 'Удаляет ветку в удаленном репозитории (origin)'
148
177
 
149
178
  c.action do |args, options|
179
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
180
+
150
181
  repository = Hub::Commands.send :local_repo
151
182
  current_branch = repository.current_branch.short_name
152
183
  branch = options.branch || current_branch
@@ -157,7 +188,7 @@ module Abak::Flow
157
188
  end
158
189
 
159
190
  if [:master, :develop].include? branch.to_sym
160
- say 'Извините, но нельзя удалить ветку develop или master'
191
+ say color('Извините, но нельзя удалить ветку develop или master', :error).to_s
161
192
  exit
162
193
  end
163
194
 
@@ -175,10 +206,65 @@ module Abak::Flow
175
206
  if [:all, :local].include? type
176
207
  remote_branch, task = current_branch.split('/').push(nil).map(&:to_s)
177
208
 
178
- say "=> Удаляю локальную ветку #{branch}"
209
+ say "=> Удаляю локальную ветку #{branch}"
179
210
  Hub::Runner.execute('checkout', 'develop')
180
211
  Hub::Runner.execute('branch', '-D', branch)
181
212
  end
182
213
  end
183
214
  end
215
+
216
+ # TODO Отрефакторить эту какашку
217
+ command :readycheck do |c|
218
+ c.syntax = 'git request readycheck'
219
+ c.description = 'Проверить все ли настроено для работы с github и удаленным (origin) репозиторием'
220
+
221
+ c.action do |args, options|
222
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
223
+ repository = Hub::Commands.send :local_repo
224
+ current_branch = repository.current_branch.short_name
225
+
226
+ api_user = Hub::Commands.send(:git_reader).read_config('abak.apiuser').to_s
227
+ api_token = Hub::Commands.send(:git_reader).read_config('abak.apitoken').to_s
228
+
229
+ errors = []
230
+
231
+ # Проверим, что у нас настроен origin
232
+ if repository.remote_by_name('origin').nil?
233
+ errors << [
234
+ 'Необходимо настроить репозиторий origin (форк) для текущего пользователя',
235
+ '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
236
+ ]
237
+ end
238
+
239
+ # Проверим, что у нас настроен upstream
240
+ if repository.remote_by_name('upstream').nil?
241
+ errors << [
242
+ 'Необходимо настроить репозиторий upstream (главный) для текущего пользователя',
243
+ '=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
244
+ ]
245
+ end
246
+
247
+ # Проверим, что у нас указан апи юзер
248
+ if api_user.empty?
249
+ errors << [
250
+ 'Необходимо указать своего пользователя API github',
251
+ '=> https://github.com/Strech/abak-flow/blob/master/README.md'
252
+ ]
253
+ end
254
+
255
+ # Проверим, что у нас указан токен
256
+ if api_token.empty?
257
+ errors << [
258
+ 'Необходимо указать токен своего пользователя API github',
259
+ '=> https://github.com/Strech/abak-flow/blob/master/README.md'
260
+ ]
261
+ end
262
+
263
+ errors.each do |error|
264
+ say "#{color(error.first, :error)}\n#{color(error.last, :info)}"
265
+ end
266
+
267
+ say color('Хм ... кажется у вас все готово к работе', :debug).to_s if errors.count.zero?
268
+ end
269
+ end
184
270
  end
@@ -1,5 +1,5 @@
1
1
  module Abak
2
2
  module Flow
3
- VERSION = '0.1.6'
3
+ VERSION = '0.2.1'
4
4
  end
5
- end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abak-flow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-16 00:00:00.000000000Z
12
+ date: 2012-05-01 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hub
16
- requirement: &70149328956080 !ruby/object:Gem::Requirement
16
+ requirement: &70263614207020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70149328956080
24
+ version_requirements: *70263614207020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: commander
27
- requirement: &70149328955660 !ruby/object:Gem::Requirement
27
+ requirement: &70263614206600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,18 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70149328955660
35
+ version_requirements: *70263614206600
36
+ - !ruby/object:Gem::Dependency
37
+ name: octokit
38
+ requirement: &70263614206180 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70263614206180
36
47
  description: Простой набор правил и комманд, заточеных для работы в git-flow с использование
37
48
  в качестве удаленного репозитория github
38
49
  email: