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