abak-flow 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/abak-flow/branch.rb +1 -1
- data/lib/abak-flow/commands/checkup.rb +24 -0
- data/lib/abak-flow/commands/compare.rb +41 -0
- data/lib/abak-flow/locales/en.yml +2 -0
- data/lib/abak-flow/locales/ru.yml +2 -0
- data/lib/abak-flow/request.rb +5 -36
- data/lib/abak-flow/version.rb +1 -1
- data/lib/abak-flow/visitor.rb +10 -0
- data/lib/abak-flow.rb +9 -7
- data/spec/lib/abak-flow/branch_spec.rb +7 -7
- data/spec/lib/abak-flow/commands/checkup_spec.rb +38 -0
- data/spec/lib/abak-flow/commands/compare_spec.rb +120 -0
- metadata +8 -2
data/lib/abak-flow/branch.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Abak::Flow
|
4
|
+
module Commands
|
5
|
+
class Checkup
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
manager = Manager.instance
|
9
|
+
|
10
|
+
@configuration = manager.configuration
|
11
|
+
@repository = manager.repository
|
12
|
+
end
|
13
|
+
|
14
|
+
def run(args, options)
|
15
|
+
Visitor.new(@configuration, @repository,
|
16
|
+
command: "checkup", call: :ready?, inspect: :errors)
|
17
|
+
.on_fail(exit: 1)
|
18
|
+
|
19
|
+
say ANSI.green { I18n.t("commands.checkup.success") }
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "commander/blank"
|
3
|
+
require "commander/command"
|
4
|
+
|
5
|
+
module Abak::Flow
|
6
|
+
module Commands
|
7
|
+
class Compare
|
8
|
+
def initialize
|
9
|
+
manager = Manager.instance
|
10
|
+
|
11
|
+
@configuration = manager.configuration
|
12
|
+
@repository = manager.repository
|
13
|
+
@git = manager.git
|
14
|
+
end
|
15
|
+
|
16
|
+
def run(args, options)
|
17
|
+
Checkup.new.run(Array.new, ::Commander::Command::Options.new)
|
18
|
+
|
19
|
+
current = @git.current_branch
|
20
|
+
head = Branch.new(options.head || current)
|
21
|
+
base = Branch.new(options.base || head.extract_base_name)
|
22
|
+
|
23
|
+
if head.current?
|
24
|
+
say ANSI.white {
|
25
|
+
I18n.t("commands.compare.updating",
|
26
|
+
branch: ANSI.bold { head },
|
27
|
+
upstream: ANSI.bold { "#{@repository.origin}" }) }
|
28
|
+
|
29
|
+
head.update
|
30
|
+
else
|
31
|
+
say ANSI.yellow {
|
32
|
+
I18n.t("commands.compare.diverging",
|
33
|
+
branch: ANSI.bold { head }) }
|
34
|
+
end
|
35
|
+
|
36
|
+
say ANSI.green { head.compare_link(base) }
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/abak-flow/request.rb
CHANGED
@@ -9,18 +9,10 @@ module Abak::Flow
|
|
9
9
|
|
10
10
|
default_command :help
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
c.action do |args, options|
|
18
|
-
m = Manager.instance
|
19
|
-
v = Visitor.new(m.configuration, m.repository, call: :ready?, inspect: :errors)
|
20
|
-
v.exit_on_fail(:checkup, 1)
|
21
|
-
|
22
|
-
say ANSI.green { I18n.t("commands.checkup.success") }
|
23
|
-
end
|
12
|
+
command :checkup do |cmd|
|
13
|
+
cmd.syntax = "git request checkup"
|
14
|
+
cmd.description = "Проверить все ли настроено для работы с github и удаленными репозиториями"
|
15
|
+
cmd.action Commands::Checkup, :run
|
24
16
|
end # command :checkup
|
25
17
|
|
26
18
|
command :compare do |c|
|
@@ -30,30 +22,7 @@ module Abak::Flow
|
|
30
22
|
c.option "--base STRING", String, "Имя ветки с которой нужно сравнить"
|
31
23
|
c.option "--head STRING", String, "Имя ветки которую нужно сравнить"
|
32
24
|
|
33
|
-
|
34
|
-
m = Manager.instance
|
35
|
-
v = Visitor.new(m.configuration, m.repository, call: :ready?, inspect: :errors)
|
36
|
-
v.exit_on_fail(:compare, 1)
|
37
|
-
|
38
|
-
current = m.git.current_branch
|
39
|
-
head = Branch.new(options.head || current)
|
40
|
-
base = Branch.new(options.base || head.extract_base_name)
|
41
|
-
|
42
|
-
if head.current?
|
43
|
-
say ANSI.white {
|
44
|
-
I18n.t("commands.compare.updating",
|
45
|
-
branch: ANSI.bold { head },
|
46
|
-
upstream: ANSI.bold { "#{m.repository.origin}" }) }
|
47
|
-
|
48
|
-
head.update
|
49
|
-
else
|
50
|
-
say ANSI.yellow {
|
51
|
-
I18n.t("commands.compare.diverging",
|
52
|
-
branch: ANSI.bold { head }) }
|
53
|
-
end
|
54
|
-
|
55
|
-
say ANSI.green { head.compare_link(base) }
|
56
|
-
end
|
25
|
+
cmd.action Commands::Compare, :run
|
57
26
|
end # command :compare
|
58
27
|
|
59
28
|
command :publish do |c|
|
data/lib/abak-flow/version.rb
CHANGED
data/lib/abak-flow/visitor.rb
CHANGED
@@ -8,6 +8,7 @@ module Abak::Flow
|
|
8
8
|
@objects = args
|
9
9
|
@call = options.fetch(:call)
|
10
10
|
@inspect = options.fetch(:inspect)
|
11
|
+
@command = options.fetch(:command, "default")
|
11
12
|
|
12
13
|
@asked = false
|
13
14
|
end
|
@@ -44,6 +45,15 @@ module Abak::Flow
|
|
44
45
|
exit(code)
|
45
46
|
end
|
46
47
|
|
48
|
+
def on_fail(options = Hash.new, &block)
|
49
|
+
return if ready?
|
50
|
+
|
51
|
+
say ANSI.red I18n.t("commands.#{@command}.fail")
|
52
|
+
say ANSI.yellow { output }
|
53
|
+
|
54
|
+
exit(options[:exit]) if options.key?(:exit)
|
55
|
+
end
|
56
|
+
|
47
57
|
private
|
48
58
|
def asked?
|
49
59
|
@asked
|
data/lib/abak-flow.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
require "abak-flow/version"
|
2
|
-
require "abak-flow/manager"
|
3
|
-
require "abak-flow/configuration"
|
4
|
-
require "abak-flow/repository"
|
5
|
-
require "abak-flow/branch"
|
6
|
-
require "abak-flow/pull_request"
|
7
|
-
require "abak-flow/visitor"
|
1
|
+
require "abak-flow/version"
|
2
|
+
require "abak-flow/manager"
|
3
|
+
require "abak-flow/configuration"
|
4
|
+
require "abak-flow/repository"
|
5
|
+
require "abak-flow/branch"
|
6
|
+
require "abak-flow/pull_request"
|
7
|
+
require "abak-flow/visitor"
|
8
|
+
require "abak-flow/commands/checkup"
|
9
|
+
require "abak-flow/commands/compare"
|
8
10
|
|
9
11
|
|
10
12
|
# Может пригодится
|
@@ -123,14 +123,14 @@ describe Abak::Flow::Branch do
|
|
123
123
|
end
|
124
124
|
|
125
125
|
context "when git commit is a short multi line" do
|
126
|
-
let(:message) { "Hello commit message\n\
|
126
|
+
let(:message) { "Hello commit message\n\nAnother new line" }
|
127
127
|
let(:gcommit) { double("Git commit", message: message) }
|
128
128
|
|
129
129
|
it { expect(noname.message).to eq "Hello commit message" }
|
130
130
|
end
|
131
131
|
|
132
132
|
context "when git commit is a very long multi line" do
|
133
|
-
let(:message) { "#{'X' * 200}\n\
|
133
|
+
let(:message) { "#{'X' * 200}\n\nAnother new line" }
|
134
134
|
let(:gcommit) { double("Git commit", message: message) }
|
135
135
|
|
136
136
|
it { expect(noname.message.length).to eq 75 }
|
@@ -139,7 +139,7 @@ describe Abak::Flow::Branch do
|
|
139
139
|
end
|
140
140
|
|
141
141
|
describe "#extract_title" do
|
142
|
-
let(:message) { "Hello world!\n\
|
142
|
+
let(:message) { "Hello world!\n\nAnother new line" }
|
143
143
|
let(:gcommit) { double("Git commit", message: message) }
|
144
144
|
|
145
145
|
context "when branch named not like tracker task" do
|
@@ -175,7 +175,7 @@ describe Abak::Flow::Branch do
|
|
175
175
|
before { I18n.stub(:t).with("commands.publish.nothing").and_return "Empty!" }
|
176
176
|
|
177
177
|
context "when commit message has no magick words" do
|
178
|
-
let(:gcommit) { double("Git commit",
|
178
|
+
let(:gcommit) { double("Git commit", contents: "Hello world") }
|
179
179
|
|
180
180
|
before do
|
181
181
|
git_feature.stub(:gcommit).and_return gcommit
|
@@ -208,7 +208,7 @@ describe Abak::Flow::Branch do
|
|
208
208
|
|
209
209
|
context "when commit message has magick word" do
|
210
210
|
context "when branch is task different from commit message" do
|
211
|
-
let(:gcommit) { double("Git commit",
|
211
|
+
let(:gcommit) { double("Git commit", contents: "Fix PC4-200") }
|
212
212
|
|
213
213
|
before { git_feature.stub(:gcommit).and_return gcommit }
|
214
214
|
|
@@ -217,7 +217,7 @@ describe Abak::Flow::Branch do
|
|
217
217
|
end
|
218
218
|
|
219
219
|
context "when branch is task equals to commit message" do
|
220
|
-
let(:gcommit) { double("Git commit",
|
220
|
+
let(:gcommit) { double("Git commit", contents: "Fix JP-515") }
|
221
221
|
|
222
222
|
before { git_feature.stub(:gcommit).and_return gcommit }
|
223
223
|
|
@@ -225,7 +225,7 @@ describe Abak::Flow::Branch do
|
|
225
225
|
end
|
226
226
|
|
227
227
|
context "when branch is not task" do
|
228
|
-
let(:gcommit) { double("Git commit",
|
228
|
+
let(:gcommit) { double("Git commit", contents: "Fix PC4-200, PC5-111\n\nCloses PC2-1122") }
|
229
229
|
|
230
230
|
before { git_master.stub(:gcommit).and_return gcommit }
|
231
231
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Abak::Flow::Commands::Checkup do
|
5
|
+
let(:command) { described_class.new }
|
6
|
+
let(:options) { double("Options") }
|
7
|
+
let(:run) { command.run(Array.new, options) }
|
8
|
+
let(:ansi) { double("ANSI") }
|
9
|
+
let(:manager) do
|
10
|
+
double("Manager", configuration: configuration,
|
11
|
+
repository: repository)
|
12
|
+
end
|
13
|
+
|
14
|
+
before do
|
15
|
+
stub_const('ANSI', ansi)
|
16
|
+
ansi.stub(green: "Success")
|
17
|
+
ansi.stub(red: "Fail")
|
18
|
+
ansi.stub(yellow: "Warning")
|
19
|
+
|
20
|
+
Abak::Flow::Manager.stub(instance: manager)
|
21
|
+
Abak::Flow::Visitor.any_instance.stub(:say) { |args| args }
|
22
|
+
Abak::Flow::Commands::Checkup.any_instance.stub(:say) { |args| args }
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when no errors occurred" do
|
26
|
+
let(:repository) { double("Repository", ready?: true, errors: Array.new) }
|
27
|
+
let(:configuration) { double("Configuration", ready?: true, errors: Array.new) }
|
28
|
+
|
29
|
+
it { expect(run).to eq "Success" }
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when errors occurred" do
|
33
|
+
let(:repository) { double("Repository", ready?: false, errors: ["Damn"]) }
|
34
|
+
let(:configuration) { double("Configuration", ready?: true, errors: Array.new) }
|
35
|
+
|
36
|
+
it { expect { run }.to raise_error SystemExit }
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Abak::Flow::Commands::Compare do
|
5
|
+
let(:command) { described_class.new }
|
6
|
+
let(:options) { double("Options") }
|
7
|
+
let(:run) { command.run(Array.new, options) }
|
8
|
+
let(:ansi) { double("ANSI") }
|
9
|
+
let(:git) { double("Git") }
|
10
|
+
let(:manager) do
|
11
|
+
double("Manager", configuration: configuration,
|
12
|
+
repository: repository, git: git)
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
stub_const('ANSI', ansi)
|
17
|
+
ansi.stub(green: "Success")
|
18
|
+
ansi.stub(red: "Fail")
|
19
|
+
ansi.stub(yellow: "Warning")
|
20
|
+
|
21
|
+
git.stub(:branch) { |x| x }
|
22
|
+
|
23
|
+
Abak::Flow::Manager.stub(instance: manager)
|
24
|
+
Abak::Flow::Visitor.any_instance.stub(:say) { |args| args }
|
25
|
+
Abak::Flow::Commands::Compare.any_instance.stub(:say) { |args| args }
|
26
|
+
Abak::Flow::Commands::Checkup.any_instance.stub(:say) { |args| args }
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when errors occurred" do
|
30
|
+
let(:repository) { double("Repository", ready?: false, errors: ["Damn"]) }
|
31
|
+
let(:configuration) { double("Configuration", ready?: true, errors: Array.new) }
|
32
|
+
|
33
|
+
it { expect { run }.to raise_error SystemExit }
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when no errors occurred" do
|
37
|
+
let(:repository) { double("Repository", ready?: true, errors: Array.new, origin: origin) }
|
38
|
+
let(:configuration) { double("Configuration", ready?: true, errors: Array.new) }
|
39
|
+
let(:origin) { double("Origin", repo: "origin-repo/flow") }
|
40
|
+
|
41
|
+
context "when only head/base is given" do
|
42
|
+
let(:current_branch) { double("Current branch", name: "cur-br-name", full: "cur-br-name") }
|
43
|
+
let(:master) { double("Master branch", name: "master", full: "master") }
|
44
|
+
|
45
|
+
before do
|
46
|
+
options.stub(head: master)
|
47
|
+
options.stub(base: nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when current branch is master" do
|
51
|
+
before do
|
52
|
+
Abak::Flow::Branch.any_instance.stub(extract_base_name: master)
|
53
|
+
git.stub(current_branch: master)
|
54
|
+
master.stub(current: true)
|
55
|
+
|
56
|
+
expect(ansi).to receive(:white)
|
57
|
+
expect(ansi).to receive(:green)
|
58
|
+
end
|
59
|
+
|
60
|
+
after { run }
|
61
|
+
|
62
|
+
it { expect(git).to receive(:push).with("origin-repo/flow", master) }
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when current branch is not master" do
|
66
|
+
before do
|
67
|
+
Abak::Flow::Branch.any_instance.stub(extract_base_name: current_branch)
|
68
|
+
git.stub(current_branch: current_branch)
|
69
|
+
master.stub(current: false)
|
70
|
+
end
|
71
|
+
|
72
|
+
after { run }
|
73
|
+
|
74
|
+
it do
|
75
|
+
expect(ansi).to receive(:yellow)
|
76
|
+
expect(ansi).to receive(:green)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when head and base are given" do
|
82
|
+
let(:current_branch) { double("Current branch") }
|
83
|
+
let(:master) { double("Master branch", name: "master", full: "master") }
|
84
|
+
let(:develop) { double("Develop branch", name: "develop", full: "develop") }
|
85
|
+
|
86
|
+
before do
|
87
|
+
options.stub(head: master)
|
88
|
+
options.stub(base: develop)
|
89
|
+
end
|
90
|
+
|
91
|
+
context "when current branch is not head" do
|
92
|
+
before do
|
93
|
+
git.stub(current_branch: current_branch)
|
94
|
+
master.stub(current: false)
|
95
|
+
end
|
96
|
+
|
97
|
+
after { run }
|
98
|
+
|
99
|
+
it do
|
100
|
+
expect(ansi).to receive(:yellow)
|
101
|
+
expect(ansi).to receive(:green)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when current branch is head" do
|
106
|
+
before do
|
107
|
+
git.stub(current_branch: master)
|
108
|
+
master.stub(current: true)
|
109
|
+
|
110
|
+
expect(ansi).to receive(:white)
|
111
|
+
expect(ansi).to receive(:green)
|
112
|
+
end
|
113
|
+
|
114
|
+
after { run }
|
115
|
+
|
116
|
+
it { expect(git).to receive(:push).with("origin-repo/flow", master) }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: abak-flow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Strech (aka Sergey Fedorov)
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: octokit
|
@@ -205,6 +205,8 @@ files:
|
|
205
205
|
- bin/request
|
206
206
|
- lib/abak-flow.rb
|
207
207
|
- lib/abak-flow/branch.rb
|
208
|
+
- lib/abak-flow/commands/checkup.rb
|
209
|
+
- lib/abak-flow/commands/compare.rb
|
208
210
|
- lib/abak-flow/configuration.rb
|
209
211
|
- lib/abak-flow/locales/en.yml
|
210
212
|
- lib/abak-flow/locales/ru.yml
|
@@ -215,6 +217,8 @@ files:
|
|
215
217
|
- lib/abak-flow/version.rb
|
216
218
|
- lib/abak-flow/visitor.rb
|
217
219
|
- spec/lib/abak-flow/branch_spec.rb
|
220
|
+
- spec/lib/abak-flow/commands/checkup_spec.rb
|
221
|
+
- spec/lib/abak-flow/commands/compare_spec.rb
|
218
222
|
- spec/spec_helper.rb
|
219
223
|
homepage: https://github.com/Strech/abak-flow
|
220
224
|
licenses:
|
@@ -243,4 +247,6 @@ specification_version: 3
|
|
243
247
|
summary: Совмещение 2-х подходов разработки Git-flow & Github-flow
|
244
248
|
test_files:
|
245
249
|
- spec/lib/abak-flow/branch_spec.rb
|
250
|
+
- spec/lib/abak-flow/commands/checkup_spec.rb
|
251
|
+
- spec/lib/abak-flow/commands/compare_spec.rb
|
246
252
|
- spec/spec_helper.rb
|