abak-flow 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +12 -8
- data/lib/abak-flow/config.rb +20 -0
- data/lib/abak-flow/github_client.rb +13 -0
- data/lib/abak-flow/pull_request.rb +211 -0
- data/lib/abak-flow/request.rb +42 -151
- data/lib/abak-flow/version.rb +1 -1
- data/lib/abak-flow.rb +9 -1
- metadata +5 -2
data/README.md
CHANGED
@@ -2,6 +2,8 @@ Abak-flow
|
|
2
2
|
=========
|
3
3
|
Нет, это не новая идеология ведения проекта, это всего лишь набор утилит которые помогают связать использование [git-flow](https://github.com/nvie/gitflow) и [github flow](http://scottchacon.com/2011/08/31/github-flow.html)
|
4
4
|
|
5
|
+
**Начиная с версии v0.2.1 используется авторизация OAuth2. [Как ей пользоваться](https://github.com/Strech/abak-flow/wiki/How-start-work-with-new-abak-flow)**
|
6
|
+
|
5
7
|
# Концепция
|
6
8
|
Идеология git-flow использует следующий набор веток:
|
7
9
|
|
@@ -25,9 +27,9 @@ Github-flow же наоборот ведет основную разработк
|
|
25
27
|
|
26
28
|
$ gem install abak-flow
|
27
29
|
$ git config --global alias.request '!request'
|
28
|
-
$ git config --global abak.apiuser
|
29
|
-
$ git config --global abak.apitoken
|
30
|
-
$ git remote add upstream git://github.com/
|
30
|
+
$ git config --global abak.apiuser YOUR_GITHUB_MAIL@gmail.com
|
31
|
+
$ git config --global abak.apitoken 0123456789YOUR_GITHUB_API_TOKEN
|
32
|
+
$ git remote add upstream git://github.com/GITHUB_PROJECT_USER/GITHUB_PROJECT_NAME.git
|
31
33
|
|
32
34
|
### А если я использую прокси, как быть?
|
33
35
|
$ git config --global abak.proxy http://my-proxy.com:3129
|
@@ -46,7 +48,7 @@ Github-flow же наоборот ведет основную разработк
|
|
46
48
|
|
47
49
|
$ git request readycheck
|
48
50
|
|
49
|
-
или
|
51
|
+
или
|
50
52
|
|
51
53
|
$ git request help
|
52
54
|
|
@@ -61,6 +63,8 @@ Github-flow же наоборот ведет основную разработк
|
|
61
63
|
$ git commit -a -m 'Hello world commit'
|
62
64
|
$ git request publish
|
63
65
|
|
66
|
+
**Внимание:** Не нужно называться ветку TASK. Используйте префикс задачь из jira
|
67
|
+
|
64
68
|
Теперь то же самое, только словами:
|
65
69
|
|
66
70
|
* Переключимся в ветку develop
|
@@ -86,17 +90,17 @@ Github-flow же наоборот ведет основную разработк
|
|
86
90
|
### Завершение текущей задачи:
|
87
91
|
Вообще, завершать задачу лучше только после того, как ваш pull request был принят. Почему? На самом деле по ряду причин. По умолчанию эта команда удаляет как вашу текущую ветку с задачей в локальном репозитории и в добавок ко всему - на вашем удаленном репозитории (форке)
|
88
92
|
|
89
|
-
$ git
|
93
|
+
$ git checkout feature/TASK-001
|
90
94
|
$ git request done
|
91
95
|
|
92
96
|
Чтобы оставить какую либо ветку в живых возможно напрямую указать, какую копию ветки **удалить**, локальную или же удаленную (на origin)
|
93
97
|
|
94
|
-
$ git
|
98
|
+
$ git checkout feature/TASK-001
|
95
99
|
$ git request done --origin
|
96
100
|
|
97
101
|
Или же так
|
98
102
|
|
99
|
-
$ git
|
103
|
+
$ git checkout feature/TASK-001
|
100
104
|
$ git request done --local
|
101
105
|
|
102
106
|
## Маленькие хитрости
|
@@ -108,4 +112,4 @@ Github-flow же наоборот ведет основную разработк
|
|
108
112
|
$ git request done --help
|
109
113
|
|
110
114
|
# В заключении
|
111
|
-
Данный репозиторий и изложенные в нем идеи ни в коем случае не претендуют на идеал и совершенство. Это всего лишь узко заточенная комбинация гемов
|
115
|
+
Данный репозиторий и изложенные в нем идеи ни в коем случае не претендуют на идеал и совершенство. Это всего лишь узко заточенная комбинация гемов
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Abak::Flow
|
3
|
+
class Config < Struct.new(:api_user, :api_token, :proxy)
|
4
|
+
[:api_user, :api_token, :proxy].each {|attribute| define_method("#{attribute}?") { !send(attribute).to_s.empty? } }
|
5
|
+
|
6
|
+
def self.current
|
7
|
+
return @current_config unless @current_config.nil?
|
8
|
+
|
9
|
+
HighLine.color_scheme = HighLine::SampleColorScheme.new
|
10
|
+
git_reader = Hub::Commands.send(:git_reader)
|
11
|
+
|
12
|
+
api_user = git_reader.read_config('abak.apiuser')
|
13
|
+
api_token = git_reader.read_config('abak.apitoken')
|
14
|
+
proxy = git_reader.read_config('abak.proxy')
|
15
|
+
env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
|
16
|
+
|
17
|
+
@current_config = new(api_user, api_token, proxy || env_proxy)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Abak::Flow
|
3
|
+
class GithubClient
|
4
|
+
def self.connect(config)
|
5
|
+
return @github_connect unless @github_connect.nil?
|
6
|
+
|
7
|
+
github_options = {:login => config.api_user, :oauth_token => config.api_token}
|
8
|
+
github_options[:proxy] = config.proxy if config.proxy?
|
9
|
+
|
10
|
+
@github_connect = Octokit::Client.new(github_options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,211 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Abak::Flow
|
3
|
+
class PullRequest
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
attr_reader :repository, :request_params
|
7
|
+
attr_reader :config, :validator
|
8
|
+
|
9
|
+
def initialize(config, options)
|
10
|
+
strategy = options.delete(:strategy) || :publish
|
11
|
+
|
12
|
+
@repository = Hub::Commands.send(:local_repo)
|
13
|
+
@request_params = OpenStruct.new(options)
|
14
|
+
@config = config
|
15
|
+
|
16
|
+
@validator = Validator.new(strategy, self)
|
17
|
+
end
|
18
|
+
|
19
|
+
delegate [:validate!, :valid?] => :validator
|
20
|
+
delegate [:base=, :head=, :title=, :body=] => :request_params
|
21
|
+
|
22
|
+
def default_task
|
23
|
+
@default_task ||= current_branch.split('/').push(nil)[1].to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def branch_prefix
|
27
|
+
@branch_prefix ||= current_branch.include?('/') ? current_branch.split('/').first : ''
|
28
|
+
end
|
29
|
+
|
30
|
+
def current_branch
|
31
|
+
@current_branch ||= repository.current_branch.short_name
|
32
|
+
end
|
33
|
+
|
34
|
+
def from_repo
|
35
|
+
@from_repo ||= begin
|
36
|
+
upstream_project = repository.remote_by_name('upstream').project
|
37
|
+
"#{upstream_project.owner}/#{upstream_project.name}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def origin_repo
|
42
|
+
@origin_repo ||= repository.main_project.remote.name
|
43
|
+
end
|
44
|
+
|
45
|
+
def base
|
46
|
+
exit unless validator.valid?
|
47
|
+
|
48
|
+
branch = Abak::Flow::PullRequest.branch_by_prefix(branch_prefix)
|
49
|
+
|
50
|
+
request_params.body || "#{repository.remote_by_name('upstream').project.owner}:#{branch}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def head
|
54
|
+
exit unless validator.valid?
|
55
|
+
|
56
|
+
request_params.head || "#{repository.repo_owner}:#{current_branch}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def title
|
60
|
+
exit unless validator.valid?
|
61
|
+
|
62
|
+
request_params.title
|
63
|
+
end
|
64
|
+
|
65
|
+
def body
|
66
|
+
exit unless validator.valid?
|
67
|
+
|
68
|
+
request_params.body
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.branch_by_prefix(prefix)
|
72
|
+
{:feature => :develop, :hotfix => :master}.fetch(prefix.to_sym, '')
|
73
|
+
end
|
74
|
+
|
75
|
+
# TODO Вынести
|
76
|
+
class Validator
|
77
|
+
attr_reader :strategy, :target_object
|
78
|
+
attr_reader :errors, :executed
|
79
|
+
|
80
|
+
def initialize(strategy_name, target_object)
|
81
|
+
@strategy = Abak::Flow::PullRequest.const_get("Strategy#{strategy_name.capitalize}".to_sym)
|
82
|
+
@target_object = target_object
|
83
|
+
@errors = []
|
84
|
+
end
|
85
|
+
|
86
|
+
def valid?
|
87
|
+
return errors.empty? if executed
|
88
|
+
|
89
|
+
validate!
|
90
|
+
errors.empty?
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
def validate!
|
95
|
+
@executed = true
|
96
|
+
|
97
|
+
strategy.attributes.each do |attribute|
|
98
|
+
send("validate_#{attribute}")
|
99
|
+
end
|
100
|
+
|
101
|
+
print_errors
|
102
|
+
end
|
103
|
+
|
104
|
+
def print_errors
|
105
|
+
errors.each do |error|
|
106
|
+
say color(error[:message], :error).to_s
|
107
|
+
say color(error[:tip], :info).to_s
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def validate_api_user
|
112
|
+
return if target_object.config.api_user?
|
113
|
+
|
114
|
+
@errors << {
|
115
|
+
:message => 'Необходимо указать своего пользователя API github',
|
116
|
+
:tip => '=> https://github.com/Strech/abak-flow/blob/master/README.md'
|
117
|
+
}
|
118
|
+
end
|
119
|
+
|
120
|
+
def validate_api_token
|
121
|
+
return if target_object.config.api_token?
|
122
|
+
|
123
|
+
@errors << {
|
124
|
+
:message => 'Необходимо указать токен своего пользователя API github',
|
125
|
+
:tip => '=> https://github.com/Strech/abak-flow/blob/master/README.md'
|
126
|
+
}
|
127
|
+
end
|
128
|
+
|
129
|
+
def validate_origin
|
130
|
+
return unless target_object.repository.remote_by_name('origin').nil?
|
131
|
+
|
132
|
+
@errors << {
|
133
|
+
:message => 'Необходимо настроить репозиторий origin (форк) для текущего пользователя',
|
134
|
+
:tip => '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def validate_upstream
|
139
|
+
return unless target_object.repository.remote_by_name('upstream').nil?
|
140
|
+
|
141
|
+
@errors << {
|
142
|
+
:message => 'Необходимо настроить репозиторий upstream (главный) для текущего пользователя',
|
143
|
+
:tip => '=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
def validate_title
|
148
|
+
return unless target_object.request_params.title.empty?
|
149
|
+
|
150
|
+
@errors << {
|
151
|
+
:message => 'Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:',
|
152
|
+
:tip => '=> git request publish "PC-001"'
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
156
|
+
def validate_branch
|
157
|
+
return if [:master, :develop].include?(target_object.current_branch.to_sym)
|
158
|
+
|
159
|
+
@errors << {
|
160
|
+
:message => 'Нельзя делать pull request из меток master или develop, попробуйде переключиться, например так:',
|
161
|
+
:tip => '=> git checkout master'
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
def validate_deleted_branch
|
166
|
+
return unless [:master, :develop].include?(target_object.current_branch.to_sym)
|
167
|
+
|
168
|
+
@errors << {
|
169
|
+
:message => 'Извините, но нельзя удалить ветку develop или master',
|
170
|
+
:tip => '=> git checkout feature/TASK-0001'
|
171
|
+
}
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
class Strategy
|
176
|
+
def self.attributes
|
177
|
+
raise NotImplementedError
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
class StrategyFeature < Strategy
|
182
|
+
def self.attributes
|
183
|
+
StrategyReadycheck.attributes | [:title, :branch]
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
class StrategyPublish < Strategy
|
188
|
+
def self.attributes
|
189
|
+
StrategyReadycheck.attributes | [:title]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
class StrategyUpdate < Strategy
|
194
|
+
def self.attributes
|
195
|
+
StrategyReadycheck.attributes
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class StrategyDone < Strategy
|
200
|
+
def self.attributes
|
201
|
+
StrategyReadycheck.attributes | [:deleted_branch]
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
class StrategyReadycheck < Strategy
|
206
|
+
def self.attributes
|
207
|
+
[:origin, :upstream, :api_user, :api_token]
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
data/lib/abak-flow/request.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
module Abak::Flow
|
3
|
-
# @TODO Сделать класс, в котором собрать общие куски из задач
|
4
|
-
|
5
3
|
program :name, 'Утилита для оформления pull request на github.com'
|
6
4
|
program :version, Abak::Flow::VERSION
|
7
5
|
program :description, 'Утилита, заточенная под git-flow но с использованием github.com'
|
@@ -11,94 +9,44 @@ module Abak::Flow
|
|
11
9
|
c.syntax = 'git request publish <Заголовок>'
|
12
10
|
c.description = 'Оформить pull request из текущей ветки (feature -> develop, hotfix -> master)'
|
13
11
|
|
14
|
-
# Опции нужны, если человек хочет запушить ветку, с именем отличным от стандарта
|
12
|
+
# Опции нужны, если человек хочет запушить `` ветку, с именем отличным от стандарта
|
15
13
|
c.option '--head STRING', String, 'Имя ветки, которую нужно принять в качестве изменений'
|
16
14
|
c.option '--base STRING', String, 'Имя ветки, в которую нужно принять изменения'
|
17
15
|
|
18
16
|
c.action do |args, options|
|
19
|
-
HighLine.color_scheme = HighLine::SampleColorScheme.new
|
20
|
-
|
21
|
-
request_rules = {:feature => :develop, :hotfix => :master}
|
22
17
|
jira_browse_url = 'http://jira.dev.apress.ru/browse/'
|
23
18
|
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
config = Abak::Flow::Config.current
|
20
|
+
github_client = Abak::Flow::GithubClient.connect(config)
|
21
|
+
request = Abak::Flow::PullRequest.new(config, :head => options.head, :base => options.base)
|
27
22
|
|
28
23
|
title = args.first.to_s.strip
|
29
|
-
|
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
|
-
config_proxy = Hub::Commands.send(:git_reader).read_config('abak.proxy')
|
34
|
-
env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
|
35
|
-
|
36
|
-
client_opts = {:proxy => config_proxy || env_proxy} if config_proxy || env_proxy
|
37
|
-
client_opts ||= {}
|
38
|
-
|
39
|
-
api_client = Octokit::Client.new({:login => api_user, :oauth_token => api_token}.merge(client_opts))
|
40
|
-
|
41
|
-
# Проверим, что мы не в мастере или девелопе
|
42
|
-
if [:master, :develop].include? current_branch.to_sym
|
43
|
-
say color('Нельзя делать pull request из меток master или develop', :error).to_s
|
44
|
-
exit
|
45
|
-
end
|
46
|
-
|
47
|
-
# Проверим, что у нас настроен origin
|
48
|
-
if repository.remote_by_name('origin').nil?
|
49
|
-
say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
|
50
|
-
say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
|
51
|
-
exit
|
52
|
-
end
|
24
|
+
body = 'Я забыл какая это задача :('
|
53
25
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
say color('=> git remote add upstream https://Developer@github.com/abak-press/sample.git', :info).to_s
|
58
|
-
exit
|
59
|
-
end
|
60
|
-
|
61
|
-
if title.empty?
|
62
|
-
say color('Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:', :error).to_s
|
63
|
-
say color('=> git request publish "PC-001"', :info).to_s
|
64
|
-
exit
|
65
|
-
end
|
66
|
-
|
67
|
-
# Проверим, что у нас указан апи юзер
|
68
|
-
if api_user.empty?
|
69
|
-
say color('Необходимо указать своего пользователя API github', :error).to_s
|
70
|
-
say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
|
71
|
-
exit
|
72
|
-
end
|
73
|
-
|
74
|
-
# Проверим, что у нас указан токен
|
75
|
-
if api_token.empty?
|
76
|
-
say color('Необходимо указать токен своего пользователя API github', :error).to_s
|
77
|
-
say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
|
78
|
-
exit
|
26
|
+
if request.default_task =~ /^\w+\-\d{1,}$/
|
27
|
+
title = request.default_task if title.empty?
|
28
|
+
body = jira_browse_url + request.default_task
|
79
29
|
end
|
80
30
|
|
81
|
-
|
31
|
+
request.title = title
|
32
|
+
request.body = body
|
82
33
|
|
83
|
-
|
84
|
-
head = "#{repository.repo_owner}:#{current_branch}"
|
85
|
-
base = "#{repository.remote_by_name('upstream').project.owner}:#{request_rules.fetch(remote_branch.to_sym, '')}"
|
86
|
-
|
87
|
-
head = options.head unless options.head.nil?
|
88
|
-
base = options.base unless options.base.nil?
|
34
|
+
exit unless request.valid?
|
89
35
|
|
90
36
|
# Запушим текущую ветку на origin
|
91
|
-
|
92
|
-
|
93
|
-
Hub::Runner.execute('push', 'origin', current_branch)
|
37
|
+
say "=> Обновляю ветку #{request.current_branch} на origin"
|
38
|
+
Hub::Runner.execute('push', 'origin', request.current_branch)
|
94
39
|
|
95
40
|
# Запостим pull request на upstream
|
96
|
-
body = jira_browse_url + task if task =~ /^\w+\-\d{1,}$/
|
97
|
-
body ||= 'Я забыл какая это задача :('
|
98
|
-
|
99
41
|
say '=> Делаю pull request на upstream'
|
100
|
-
|
101
|
-
|
42
|
+
begin
|
43
|
+
result = github_client.create_pull_request(request.from_repo, request.base, request.head, request.title, request.body)
|
44
|
+
say color(result._links.html.href, :green).to_s
|
45
|
+
rescue => e
|
46
|
+
say color(e.message, :error).to_s
|
47
|
+
say "\nПроблемы? Попробуйте заглянуть сюда:"
|
48
|
+
say color('=> cписок кодов статуса ответа http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html', :info).to_s
|
49
|
+
end
|
102
50
|
end
|
103
51
|
end
|
104
52
|
|
@@ -109,20 +57,13 @@ module Abak::Flow
|
|
109
57
|
c.option '--branch STRING', String, 'Имя ветки, которую нужно обновить'
|
110
58
|
|
111
59
|
c.action do |args, options|
|
112
|
-
|
60
|
+
config = Abak::Flow::Config.current
|
61
|
+
request = Abak::Flow::PullRequest.new(config, :strategy => :update)
|
113
62
|
|
114
|
-
|
115
|
-
current_branch = repository.current_branch.short_name
|
116
|
-
|
117
|
-
# Проверим, что у нас настроен origin
|
118
|
-
if repository.remote_by_name('origin').nil?
|
119
|
-
say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
|
120
|
-
say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
|
121
|
-
exit
|
122
|
-
end
|
63
|
+
exit unless request.valid?
|
123
64
|
|
124
65
|
# Запушим текущую ветку на origin
|
125
|
-
branch = options.branch || current_branch
|
66
|
+
branch = options.branch || request.current_branch
|
126
67
|
say "=> Обновляю ветку #{branch} на origin"
|
127
68
|
Hub::Runner.execute('push', 'origin', branch)
|
128
69
|
end
|
@@ -133,7 +74,7 @@ module Abak::Flow
|
|
133
74
|
c.description = 'Создать ветку для выполнения задачи. Лучше всего, если название задачи, будет ее номером из jira'
|
134
75
|
|
135
76
|
c.action do |args, options|
|
136
|
-
|
77
|
+
config = Abak::Flow::Config.current
|
137
78
|
|
138
79
|
task = args.shift.to_s
|
139
80
|
|
@@ -155,7 +96,7 @@ module Abak::Flow
|
|
155
96
|
c.description = 'Создать ветку для выполнения bugfix задачи. Лучше всего, если название задачи, будет ее номером из jira'
|
156
97
|
|
157
98
|
c.action do |args, options|
|
158
|
-
|
99
|
+
config = Abak::Flow::Config.current
|
159
100
|
|
160
101
|
task = args.shift.to_s
|
161
102
|
|
@@ -182,36 +123,30 @@ module Abak::Flow
|
|
182
123
|
c.option '--origin', 'Удаляет ветку в удаленном репозитории (origin)'
|
183
124
|
|
184
125
|
c.action do |args, options|
|
185
|
-
|
126
|
+
config = Abak::Flow::Config.current
|
127
|
+
request = Abak::Flow::PullRequest.new(config, :strategy => :done)
|
128
|
+
branch = options.branch || request.current_branch
|
186
129
|
|
187
|
-
|
188
|
-
current_branch = repository.current_branch.short_name
|
189
|
-
branch = options.branch || current_branch
|
130
|
+
exit unless request.valid?
|
190
131
|
|
191
132
|
type = :all
|
192
133
|
if [options.local, options.origin].compact.count == 1
|
193
134
|
type = options.local ? :local : :origin
|
194
135
|
end
|
195
136
|
|
196
|
-
|
197
|
-
|
198
|
-
exit
|
199
|
-
end
|
200
|
-
|
201
|
-
warning = "Внимание! Alarm! Danger! Achtung\nЕсли вы удалите ветку на удаленном репозитории, а ваш pull request еще не приняли, вы рискуете потерять проделанную работу.\nВы уверены, что хотите продолжить?"
|
137
|
+
warning = color('Внимание! Alarm! Danger! Achtung!', :error).to_s +
|
138
|
+
"\nЕсли вы удалите ветку на удаленном (remote) репозитории, а ваш pull request еще не приняли, вы рискуете потерять проделанную работу.\nВы уверены, что хотите продолжить?"
|
202
139
|
if [:all, :origin].include?(type)
|
203
140
|
say '=> Вы приняли верное решение :)' && exit unless agree("#{warning} [y/n]:")
|
204
141
|
end
|
205
142
|
|
206
|
-
#
|
207
|
-
if [:all, :origin].include?
|
143
|
+
# TODO Проверку на наличие ветки на origin
|
144
|
+
if [:all, :origin].include?(type)
|
208
145
|
say "=> Удаляю ветку #{branch} на origin"
|
209
|
-
Hub::Runner.execute('push',
|
146
|
+
Hub::Runner.execute('push', request.origin_repo, ':' + branch)
|
210
147
|
end
|
211
148
|
|
212
|
-
if [:all, :local].include?
|
213
|
-
remote_branch, task = current_branch.split('/').push(nil).map(&:to_s)
|
214
|
-
|
149
|
+
if [:all, :local].include?(type)
|
215
150
|
say "=> Удаляю локальную ветку #{branch}"
|
216
151
|
Hub::Runner.execute('checkout', 'develop')
|
217
152
|
Hub::Runner.execute('branch', '-D', branch)
|
@@ -225,61 +160,17 @@ module Abak::Flow
|
|
225
160
|
c.description = 'Проверить все ли настроено для работы с github и удаленным (origin) репозиторием'
|
226
161
|
|
227
162
|
c.action do |args, options|
|
228
|
-
|
229
|
-
|
230
|
-
current_branch = repository.current_branch.short_name
|
231
|
-
|
232
|
-
api_user = Hub::Commands.send(:git_reader).read_config('abak.apiuser').to_s
|
233
|
-
api_token = Hub::Commands.send(:git_reader).read_config('abak.apitoken').to_s
|
234
|
-
config_proxy = Hub::Commands.send(:git_reader).read_config('abak.proxy')
|
235
|
-
env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
|
236
|
-
|
237
|
-
errors = []
|
238
|
-
|
239
|
-
# Проверим, что у нас настроен origin
|
240
|
-
if repository.remote_by_name('origin').nil?
|
241
|
-
errors << [
|
242
|
-
'Необходимо настроить репозиторий origin (форк) для текущего пользователя',
|
243
|
-
'=> git remote add origin https://Developer@github.com/abak-press/sample.git'
|
244
|
-
]
|
245
|
-
end
|
246
|
-
|
247
|
-
# Проверим, что у нас настроен upstream
|
248
|
-
if repository.remote_by_name('upstream').nil?
|
249
|
-
errors << [
|
250
|
-
'Необходимо настроить репозиторий upstream (главный) для текущего пользователя',
|
251
|
-
'=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
|
252
|
-
]
|
253
|
-
end
|
254
|
-
|
255
|
-
# Проверим, что у нас указан апи юзер
|
256
|
-
if api_user.empty?
|
257
|
-
errors << [
|
258
|
-
'Необходимо указать своего пользователя API github',
|
259
|
-
'=> https://github.com/Strech/abak-flow/blob/master/README.md'
|
260
|
-
]
|
261
|
-
end
|
262
|
-
|
263
|
-
# Проверим, что у нас указан токен
|
264
|
-
if api_token.empty?
|
265
|
-
errors << [
|
266
|
-
'Необходимо указать токен своего пользователя API github',
|
267
|
-
'=> https://github.com/Strech/abak-flow/blob/master/README.md'
|
268
|
-
]
|
269
|
-
end
|
163
|
+
config = Abak::Flow::Config.current
|
164
|
+
request = Abak::Flow::PullRequest.new(config, :strategy => :readycheck)
|
270
165
|
|
271
|
-
if
|
272
|
-
message = "== В качестве прокси будет установлено значение #{
|
166
|
+
if config.proxy?
|
167
|
+
message = "== В качестве прокси будет установлено значение #{config.proxy} =="
|
273
168
|
say color('=' * message.length, :info).to_s
|
274
169
|
say color(message, :info).to_s
|
275
170
|
say color('=' * message.length + "\n", :info).to_s
|
276
171
|
end
|
277
172
|
|
278
|
-
|
279
|
-
say "#{color(error.first, :error)}\n#{color(error.last, :info)}"
|
280
|
-
end
|
281
|
-
|
282
|
-
say color('Хм ... кажется у вас все готово к работе', :debug).to_s if errors.count.zero?
|
173
|
+
say color('Хм ... кажется у вас все готово к работе', :debug).to_s if request.valid?
|
283
174
|
end
|
284
175
|
end
|
285
176
|
end
|
data/lib/abak-flow/version.rb
CHANGED
data/lib/abak-flow.rb
CHANGED
@@ -3,9 +3,17 @@ module Abak
|
|
3
3
|
end
|
4
4
|
end
|
5
5
|
|
6
|
+
require 'ostruct'
|
7
|
+
require 'forwardable'
|
8
|
+
|
6
9
|
require 'hub'
|
7
10
|
require 'highline'
|
8
11
|
require 'octokit'
|
12
|
+
|
9
13
|
require 'abak-flow/hub_extensions'
|
14
|
+
require 'abak-flow/config'
|
15
|
+
require 'abak-flow/github_client'
|
16
|
+
require 'abak-flow/pull_request'
|
10
17
|
require 'abak-flow/version'
|
11
|
-
|
18
|
+
|
19
|
+
require 'commander/import'
|
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.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hub
|
@@ -76,7 +76,10 @@ files:
|
|
76
76
|
- abak-flow.gemspec
|
77
77
|
- bin/request
|
78
78
|
- lib/abak-flow.rb
|
79
|
+
- lib/abak-flow/config.rb
|
80
|
+
- lib/abak-flow/github_client.rb
|
79
81
|
- lib/abak-flow/hub_extensions.rb
|
82
|
+
- lib/abak-flow/pull_request.rb
|
80
83
|
- lib/abak-flow/request.rb
|
81
84
|
- lib/abak-flow/version.rb
|
82
85
|
homepage: https://github.com/Strech/abak-flow
|