lib/abak-flow/request.rb in abak-flow-0.1.6 vs lib/abak-flow/request.rb in abak-flow-0.2.1
- old
+ new
@@ -14,81 +14,106 @@
# Опции нужны, если человек хочет запушить ветку, с именем отличным от стандарта
c.option '--head STRING', String, 'Имя ветки, которую нужно принять в качестве изменений'
c.option '--base STRING', String, 'Имя ветки, в которую нужно принять изменения'
c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+
request_rules = {:feature => :develop, :hotfix => :master}
jira_browse_url = 'http://jira.dev.apress.ru/browse/'
repository = Hub::Commands.send :local_repo
current_branch = repository.current_branch.short_name
remote_branch, task = current_branch.split('/').push(nil).map(&:to_s)
title = args.first.to_s.strip
title = task if task =~ /^\w+\-\d{1,}$/ && title.empty?
+ api_user = Hub::Commands.send(:git_reader).read_config('abak.apiuser')
+ api_token = Hub::Commands.send(:git_reader).read_config('abak.apitoken')
+ api_client = Octokit::Client.new(:login => api_user, :oauth_token => api_token)
+
# Проверим, что мы не в мастере или девелопе
if [:master, :develop].include? current_branch.to_sym
- say 'Нельзя делать pull request из меток master или develop'
+ say color('Нельзя делать pull request из меток master или develop', :error).to_s
exit
end
# Проверим, что у нас настроен origin
if repository.remote_by_name('origin').nil?
- say 'Необходимо настроить репозиторий origin (форк) для текущего пользователя'
- say '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
+ say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
+ say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
exit
end
# Проверим, что у нас настроен upstream
if repository.remote_by_name('upstream').nil?
- say 'Необходимо настроить репозиторий upstream (главный) для текущего пользователя'
- say '=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
+ say color('Необходимо настроить репозиторий upstream (главный) для текущего пользователя', :error).to_s
+ say color('=> git remote add upstream https://Developer@github.com/abak-press/sample.git', :info).to_s
exit
end
if title.empty?
- say 'Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:'
- say '=> git request publish "PC-001"'
+ say color('Пожалуйста, укажите что-нибудь для заголовка pull request, например номер вашей задачи вот так:', :error).to_s
+ say color('=> git request publish "PC-001"', :info).to_s
exit
end
+ # Проверим, что у нас указан апи юзер
+ if api_user.empty?
+ say color('Необходимо указать своего пользователя API github', :error).to_s
+ say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
+ exit
+ end
+
+ # Проверим, что у нас указан токен
+ if api_token.empty?
+ say color('Необходимо указать токен своего пользователя API github', :error).to_s
+ say color('=> https://github.com/Strech/abak-flow/blob/master/README.md', :info).to_s
+ exit
+ end
+
+ upstream_project = repository.remote_by_name('upstream').project
+
# Расставим ветки согласно правилам
head = "#{repository.repo_owner}:#{current_branch}"
base = "#{repository.remote_by_name('upstream').project.owner}:#{request_rules.fetch(remote_branch.to_sym, '')}"
head = options.head unless options.head.nil?
base = options.base unless options.base.nil?
# Запушим текущую ветку на origin
- # @TODO Может быть лучше достать дерективу конфига origin?
+ # TODO Может быть лучше достать дерективу конфига origin?
say "=> Обновляю ветку #{current_branch} на origin"
Hub::Runner.execute('push', 'origin', current_branch)
# Запостим pull request на upstream
- command_options = ['pull-request', title, '-b', base, '-h', head]
- command_options |= ['-d', jira_browse_url + task] if task =~ /^\w+\-\d{1,}$/
+ body = jira_browse_url + task if task =~ /^\w+\-\d{1,}$/
+ body ||= 'Я забыл какая это задача :('
say '=> Делаю pull request на upstream'
- say Hub::Runner.execute(*command_options)
+ result = api_client.create_pull_request("#{upstream_project.owner}/#{upstream_project.name}", base, head, title, body)
+ say result._links.self.href
end
end
command :update do |c|
c.syntax = 'git request update'
c.description = 'Обновить ветку на удаленном (origin) репозитории'
c.option '--branch STRING', String, 'Имя ветки, которую нужно обновить'
c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+
repository = Hub::Commands.send :local_repo
current_branch = repository.current_branch.short_name
# Проверим, что у нас настроен origin
if repository.remote_by_name('origin').nil?
- say 'Необходимо настроить репозиторий origin (форк) для текущего пользователя'
- say '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
+ say color('Необходимо настроить репозиторий origin (форк) для текущего пользователя', :error).to_s
+ say color('=> git remote add origin https://Developer@github.com/abak-press/sample.git', :info).to_s
exit
end
# Запушим текущую ветку на origin
branch = options.branch || current_branch
@@ -100,14 +125,16 @@
command :feature do |c|
c.syntax = 'git request feature <Название задачи>'
c.description = 'Создать ветку для выполнения задачи. Лучше всего, если название задачи, будет ее номером из jira'
c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+
task = args.shift.to_s
if task.empty?
- say 'Необходимо указать имя задачи, а лучше всего ее номер из jira'
+ say color('Необходимо указать имя задачи, а лучше всего ее номер из jira', :error).to_s
exit
end
unless task =~ /^\w+\-\d{1,}$/
say '=> Вы приняли верное решение :)' && exit if agree("Лучше всего завести задачу с именем примерно такого формата PC-001, может попробуем заново? [y/n]:")
@@ -120,14 +147,16 @@
command :hotfix do |c|
c.syntax = 'git request hotfix <Название задачи>'
c.description = 'Создать ветку для выполнения bugfix задачи. Лучше всего, если название задачи, будет ее номером из jira'
c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+
task = args.shift.to_s
if task.empty?
- say 'Необходимо указать имя задачи, а лучше всего ее номер из jira'
+ say color('Необходимо указать имя задачи, а лучше всего ее номер из jira', :error).to_s
exit
end
unless task =~ /^\w+\-\d{1,}$/
say '=> Вы приняли верное решение :)' && exit if agree("Лучше всего завести задачу с именем примерно такого формата PC-001, может попробуем заново? [y/n]:")
@@ -145,21 +174,23 @@
c.option '--all', 'Удаляет ветку в локальном репозитории и в удалнном (local + origin) (по умолчанию)'
c.option '--local', 'Удаляет ветку только в локальном репозитории (local)'
c.option '--origin', 'Удаляет ветку в удаленном репозитории (origin)'
c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+
repository = Hub::Commands.send :local_repo
current_branch = repository.current_branch.short_name
branch = options.branch || current_branch
type = :all
if [options.local, options.origin].compact.count == 1
type = options.local ? :local : :origin
end
if [:master, :develop].include? branch.to_sym
- say 'Извините, но нельзя удалить ветку develop или master'
+ say color('Извините, но нельзя удалить ветку develop или master', :error).to_s
exit
end
warning = "Внимание! Alarm! Danger! Achtung\nЕсли вы удалите ветку на удаленном репозитории, а ваш pull request еще не приняли, вы рискуете потерять проделанную работу.\nВы уверены, что хотите продолжить?"
if [:all, :origin].include?(type)
@@ -173,12 +204,67 @@
end
if [:all, :local].include? type
remote_branch, task = current_branch.split('/').push(nil).map(&:to_s)
- say "=> Удаляю локальную ветку #{branch}"
+ say "=> Удаляю локальную ветку #{branch}"
Hub::Runner.execute('checkout', 'develop')
Hub::Runner.execute('branch', '-D', branch)
end
+ end
+ end
+
+ # TODO Отрефакторить эту какашку
+ command :readycheck do |c|
+ c.syntax = 'git request readycheck'
+ c.description = 'Проверить все ли настроено для работы с github и удаленным (origin) репозиторием'
+
+ c.action do |args, options|
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
+ repository = Hub::Commands.send :local_repo
+ current_branch = repository.current_branch.short_name
+
+ api_user = Hub::Commands.send(:git_reader).read_config('abak.apiuser').to_s
+ api_token = Hub::Commands.send(:git_reader).read_config('abak.apitoken').to_s
+
+ errors = []
+
+ # Проверим, что у нас настроен origin
+ if repository.remote_by_name('origin').nil?
+ errors << [
+ 'Необходимо настроить репозиторий origin (форк) для текущего пользователя',
+ '=> git remote add origin https://Developer@github.com/abak-press/sample.git'
+ ]
+ end
+
+ # Проверим, что у нас настроен upstream
+ if repository.remote_by_name('upstream').nil?
+ errors << [
+ 'Необходимо настроить репозиторий upstream (главный) для текущего пользователя',
+ '=> git remote add upstream https://Developer@github.com/abak-press/sample.git'
+ ]
+ end
+
+ # Проверим, что у нас указан апи юзер
+ if api_user.empty?
+ errors << [
+ 'Необходимо указать своего пользователя API github',
+ '=> https://github.com/Strech/abak-flow/blob/master/README.md'
+ ]
+ end
+
+ # Проверим, что у нас указан токен
+ if api_token.empty?
+ errors << [
+ 'Необходимо указать токен своего пользователя API github',
+ '=> https://github.com/Strech/abak-flow/blob/master/README.md'
+ ]
+ end
+
+ errors.each do |error|
+ say "#{color(error.first, :error)}\n#{color(error.last, :info)}"
+ end
+
+ say color('Хм ... кажется у вас все готово к работе', :debug).to_s if errors.count.zero?
end
end
end
\ No newline at end of file