abak-flow 0.1.6 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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: