flight_plan_cli 0.2.5 → 0.2.6
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/flight_plan_cli/api.rb +8 -4
- data/lib/flight_plan_cli/commands/checkout.rb +44 -14
- data/lib/flight_plan_cli/commands/ls.rb +17 -4
- data/lib/flight_plan_cli/config.rb +9 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1143966ef8166114dfc708a3937c2e38a20b4b62
|
4
|
+
data.tar.gz: edd59507ccd883c018980e8a03223405667aa611
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c15ad4a8fb00306867f8754cc192928b59aea5e830ab70c3f190034d7ab9352e29ba3c2f255879d659ae12eedad8b2560483f8e61df3ad8494c86c66f4d9af0
|
7
|
+
data.tar.gz: 281f06bbe0d4d961c0f7c96b0b2f29de7c2778fbd256306fac0795bd3d80828522624c174b41b53f5fe15a96e08afaf132e32d9317c981a32e072f1390a85654
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
data/lib/flight_plan_cli/api.rb
CHANGED
@@ -2,18 +2,21 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
module FlightPlanCli
|
4
4
|
class Api
|
5
|
-
|
5
|
+
|
6
|
+
def initialize(url:, key:, secret:, board_id: nil, repo_id: nil)
|
6
7
|
@url = url
|
7
8
|
@key = key
|
8
9
|
@secret = secret
|
10
|
+
@board_id = board_id
|
11
|
+
@repo_id = repo_id
|
9
12
|
end
|
10
13
|
|
11
|
-
def board_tickets(
|
14
|
+
def board_tickets(assignee_username: nil, remote_number: nil)
|
12
15
|
params = {
|
13
16
|
board_id: board_id,
|
14
17
|
repo_id: repo_id,
|
15
|
-
|
16
|
-
|
18
|
+
assignee_username: assignee_username,
|
19
|
+
remote_number: remote_number
|
17
20
|
}
|
18
21
|
|
19
22
|
HTTParty.get("#{url}/board_tickets.json", query: params, headers: headers)
|
@@ -22,6 +25,7 @@ module FlightPlanCli
|
|
22
25
|
private
|
23
26
|
|
24
27
|
attr_reader :url, :key, :secret
|
28
|
+
attr_reader :board_id, :repo_id
|
25
29
|
|
26
30
|
def headers
|
27
31
|
@headers = {
|
@@ -1,15 +1,19 @@
|
|
1
1
|
module FlightPlanCli
|
2
2
|
module Commands
|
3
3
|
class Checkout
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
include FlightPlanCli::Config
|
5
|
+
|
6
|
+
def process(issue)
|
7
|
+
puts "Checking out branch for #{issue}"
|
8
|
+
local_branch_for(issue) ||
|
9
|
+
remote_branch_for(issue) ||
|
10
|
+
new_branch_for(issue)
|
9
11
|
rescue Rugged::CheckoutError => e
|
10
12
|
puts "Unable to checkout: #{e.message}".red
|
11
13
|
end
|
12
14
|
|
15
|
+
private
|
16
|
+
|
13
17
|
def local_branch_for(issue)
|
14
18
|
issue_branches = local_branches.map(&:name).grep(/##{issue}[^0-9]/)
|
15
19
|
return false unless issue_branches.count == 1
|
@@ -21,19 +25,45 @@ module FlightPlanCli
|
|
21
25
|
end
|
22
26
|
|
23
27
|
def remote_branch_for(issue)
|
24
|
-
fetch
|
25
28
|
issue_branches = remote_branches.map(&:name).grep(/##{issue}[^0-9]/)
|
26
29
|
return false unless issue_branches.count == 1
|
27
30
|
|
28
31
|
remote_branch_name = issue_branches.first
|
29
32
|
branch = remote_branches.find { |rb| rb.name == remote_branch_name }
|
30
|
-
local_name = branch.name[branch.remote_name.size + 1..-1]
|
31
33
|
|
32
|
-
puts "Checking out and tracking remote branch '#{
|
34
|
+
puts "Checking out and tracking remote branch '#{branch.name}'".green
|
35
|
+
checkout_locally(branch)
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
def checkout_locally(branch)
|
40
|
+
local_name = branch.name[branch.remote_name.size + 1..-1]
|
33
41
|
new_branch = git.branches.create(local_name, branch.name)
|
34
42
|
new_branch.upstream = branch
|
35
43
|
git.checkout(local_name)
|
36
|
-
|
44
|
+
end
|
45
|
+
|
46
|
+
def new_branch_for(issue)
|
47
|
+
read_config
|
48
|
+
branches = client.board_tickets(remote_number: issue)
|
49
|
+
# TODO: update flight_plan to only return one issue when remote_numer is provided
|
50
|
+
branches = branches.select { |b| b['ticket']['remote_number'] == issue }
|
51
|
+
return false unless branches.count == 1
|
52
|
+
|
53
|
+
branch_name = branch_name(branches.first)
|
54
|
+
|
55
|
+
puts "Creating new branch #{branch_name} from master".green
|
56
|
+
|
57
|
+
git.branches.create(branch_name, 'origin/master')
|
58
|
+
git.checkout(branch_name)
|
59
|
+
end
|
60
|
+
|
61
|
+
def branch_name(branch)
|
62
|
+
"feature/##{branch['ticket']['remote_number']}-" +
|
63
|
+
branch['ticket']['remote_title']
|
64
|
+
.gsub(/[^a-z0-9\s]/i, '')
|
65
|
+
.tr(' ', '-')
|
66
|
+
.downcase
|
37
67
|
end
|
38
68
|
|
39
69
|
def local_branches
|
@@ -41,11 +71,11 @@ module FlightPlanCli
|
|
41
71
|
end
|
42
72
|
|
43
73
|
def remote_branches
|
44
|
-
@remote_branches ||=
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
74
|
+
@remote_branches ||=
|
75
|
+
begin
|
76
|
+
fetch
|
77
|
+
git.branches.each(:remote)
|
78
|
+
end
|
49
79
|
end
|
50
80
|
|
51
81
|
def fetch
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module FlightPlanCli
|
2
2
|
module Commands
|
3
3
|
class Ls
|
4
|
+
module Color
|
5
|
+
SWIMLANE = :cyan
|
6
|
+
ISSUE = :yellow
|
7
|
+
ISSUE_NO = :red
|
8
|
+
end
|
9
|
+
|
4
10
|
include FlightPlanCli::Config
|
5
11
|
|
6
12
|
def initialize
|
@@ -21,9 +27,10 @@ module FlightPlanCli
|
|
21
27
|
puts "Network error. #{e.message}".red
|
22
28
|
end
|
23
29
|
|
30
|
+
private
|
31
|
+
|
24
32
|
def tickets_by_swimlane
|
25
|
-
response = client.board_tickets
|
26
|
-
puts 'ok2'
|
33
|
+
response = client.board_tickets
|
27
34
|
raise ApiUnauthorized if response.code == 401
|
28
35
|
raise ApiNotFound if response.code == 404
|
29
36
|
|
@@ -40,10 +47,16 @@ module FlightPlanCli
|
|
40
47
|
end
|
41
48
|
|
42
49
|
def print_swimlane(swimlane)
|
43
|
-
puts "#{swimlane['name']} (#{swimlane['tickets'].count})"
|
50
|
+
puts "#{swimlane['name']} (#{swimlane['tickets'].count})"
|
51
|
+
.colorize(Color::SWIMLANE)
|
52
|
+
|
44
53
|
swimlane['tickets'].each do |ticket|
|
45
|
-
|
54
|
+
title = ticket['remote_title']
|
55
|
+
title = title.underline if git.head.name =~ /##{ticket['remote_number']}[^0-9]/
|
56
|
+
print " #{ticket['remote_number']} ".colorize(Color::ISSUE_NO)
|
57
|
+
puts title.colorize(Color::ISSUE)
|
46
58
|
end
|
59
|
+
puts
|
47
60
|
end
|
48
61
|
end
|
49
62
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module FlightPlanCli
|
2
2
|
module Config
|
3
|
+
private
|
4
|
+
|
3
5
|
YAML_FILE = '.flight_plan_cli.yml'.freeze
|
4
6
|
|
5
7
|
attr_reader :board_id, :repo_id, :default_swimlane_ids
|
@@ -19,10 +21,16 @@ module FlightPlanCli
|
|
19
21
|
@client ||= FlightPlanCli::Api.new(
|
20
22
|
url: api_url,
|
21
23
|
key: api_key,
|
22
|
-
secret: api_secret
|
24
|
+
secret: api_secret,
|
25
|
+
board_id: board_id,
|
26
|
+
repo_id: repo_id
|
23
27
|
)
|
24
28
|
end
|
25
29
|
|
30
|
+
def git
|
31
|
+
@git ||= Rugged::Repository.new(Dir.pwd)
|
32
|
+
end
|
33
|
+
|
26
34
|
def config
|
27
35
|
@config ||=
|
28
36
|
begin
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flight_plan_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Cleary
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|