lib/abak-flow/request.rb in abak-flow-1.0.1 vs lib/abak-flow/request.rb in abak-flow-1.0.2
- old
+ new
@@ -7,24 +7,21 @@
program :version, Abak::Flow::VERSION
program :description, "Утилита, заточенная под git-flow но с использованием github.com"
default_command :help
+ # TODO : Заменить команды классами
command :checkup do |c|
c.syntax = "git request checkup"
c.description = "Проверить все ли настроено для работы с github и удаленными репозиториями"
c.action do |args, options|
m = Manager.new
- v = Visitor.new(m.configuration, m.repository, call: :ready?, look_for: :errors)
+ v = Visitor.new(m.configuration, m.repository, call: :ready?, inspect: :errors)
+ v.exit_on_fail(:checkup, 1)
- if v.ready?
- say ANSI.green { I18n.t("commands.checkup.success") }
- else
- say ANSI.red { I18n.t("commands.checkup.fail") }
- say ANSI.yellow { v.output }
- end
+ say ANSI.green { I18n.t("commands.checkup.success") }
end
end # command :checkup
command :compare do |c|
c.syntax = "git request compare"
@@ -32,21 +29,14 @@
c.option "--base STRING", String, "Имя ветки с которой нужно сравнить"
c.option "--head STRING", String, "Имя ветки которую нужно сравнить"
c.action do |args, options|
- # TODO : Вот это дубль, хочется его как-то более красиво
m = Manager.new
- v = Visitor.new(m.configuration, m.repository, call: :ready?, look_for: :errors)
+ v = Visitor.new(m.configuration, m.repository, call: :ready?, inspect: :errors)
+ v.exit_on_fail(:compare, 1)
- unless v.ready?
- say ANSI.red { I18n.t("commands.compare.fail") }
- say ANSI.yellow { v.output }
-
- exit 1
- end
-
current = m.git.current_branch
head = Branch.new(options.head || current, m)
base = Branch.new(options.base || head.pick_up_base_name, m)
if head.current?
@@ -79,25 +69,17 @@
head = Branch.new(m.git.current_branch, m)
base = Branch.new(options.base || head.pick_up_base_name, m)
title = options.title || head.pick_up_title
- body = [
- options.body || (head.mappable? ? nil : I18n.t("commands.publish.nothing")),
- head.pick_up_body
- ].compact * "\n\n"
+ body = options.body || head.pickup_up_body
p = PullRequest.new({base: base, head: head, title: title, body: body}, m)
- v = Visitor.new(m.configuration, m.repository, p, call: :ready?, look_for: :errors)
- unless v.ready?
- say ANSI.red { I18n.t("commands.publish.fail") }
- say ANSI.yellow { v.output }
+ v = Visitor.new(m.configuration, m.repository, p, call: :ready?, inspect: :errors)
+ v.exit_on_fail(:publish, 1)
- exit 1
- end
-
say ANSI.white {
I18n.t("commands.publish.updating",
branch: ANSI.bold { head },
upstream: ANSI.bold { "#{m.repository.origin}" }) }
@@ -106,17 +88,57 @@
say ANSI.white {
I18n.t("commands.publish.requesting",
branch: ANSI.bold { "#{m.repository.origin.owner}:#{head}" },
upstream: ANSI.bold { "#{m.repository.upstream.owner}:#{base}" }) }
- v = Visitor.new(p, call: :publish, look_for: :errors)
- if v.ready?
- say ANSI.green { I18n.t("commands.publish.success", link: p.link) }
- else
- say ANSI.red { I18n.t("commands.publish.fail") }
- say ANSI.yellow { v.output }
+ v = Visitor.new(p, call: :publish, inspect: :errors)
+ v.exit_on_fail(:publish, 2)
- exit 3
- end
+ say ANSI.green { I18n.t("commands.publish.success", link: p.link) }
end
end # command :publish
+
+ command :done do |c|
+ c.syntax = "git request done"
+ c.description = "Удалить ветки (local и origin) в которых велась работа"
+
+ c.action do |args, options|
+ m = Manager.new
+ v = Visitor.new(m.configuration, m.repository, call: :ready?, inspect: :errors)
+ v.exit_on_fail(:done, 1)
+
+ branch = Branch.new(m.git.current_branch, m)
+
+ if branch.develop? || branch.master?
+ say ANSI.red {
+ I18n.t("commands.done.errors.branch_is_incorrect",
+ branch: ANSI.bold { branch }) }
+ exit 2
+ end
+
+ say ANSI.white {
+ I18n.t("commands.done.deleting",
+ branch: ANSI.bold { branch },
+ upstream: ANSI.bold { "#{m.repository.origin}" }) }
+
+ # FIXME : Исправить молчаливую ситуацию
+ # Возможно стоит предупредить о ее отсутствии
+ branch.delete_on_remote rescue nil
+
+ say ANSI.white {
+ I18n.t("commands.done.deleting",
+ branch: ANSI.bold { branch },
+ upstream: ANSI.bold { "working tree" }) }
+
+ # TODO : Добавить проверку, что ветка,
+ # в которую надо попасть (master/develop)
+ # существует
+
+ # TODO : Быть может стоит вынести это в настройки
+ # и позволить выбирать, куда отправлять
+ # при удалении ветки, а по умолчанию использовать master
+ m.git.checkout(
+ branch.pick_up_base_name(or_use: Branch::DEVELOPMENT))
+ branch.delete_on_local
+ end
+ end # command :done
end