hustle_and_flow 0.0.2 → 0.0.3
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/README.md +192 -16
- data/bin/hustle +4 -0
- data/lib/hustle_and_flow/binary/runner.rb +8 -4
- data/lib/hustle_and_flow/commands/start.rb +18 -19
- data/lib/hustle_and_flow/issue_tracker.rb +7 -6
- data/lib/hustle_and_flow/issue_trackers/commands/start.rb +17 -0
- data/lib/hustle_and_flow/issue_trackers/github/commands/start.rb +99 -0
- data/lib/hustle_and_flow/issue_trackers/github/issue.rb +8 -8
- data/lib/hustle_and_flow/issue_trackers/github/issues.rb +24 -46
- data/lib/hustle_and_flow/issue_trackers/github/tracker.rb +63 -0
- data/lib/hustle_and_flow/version.rb +1 -1
- data/lib/hustle_and_flow/version_control.rb +19 -0
- data/lib/hustle_and_flow/version_controls/commands/start.rb +17 -0
- data/lib/hustle_and_flow/{version_control → version_controls}/git/branch.rb +1 -1
- data/lib/hustle_and_flow/{version_control → version_controls}/git/branches.rb +8 -2
- data/lib/hustle_and_flow/version_controls/git/commands/start.rb +67 -0
- data/lib/hustle_and_flow/version_controls/git/repository.rb +70 -0
- data/spec/lib/hustle_and_flow/issue_trackers/github/issue_spec.rb +3 -3
- data/spec/lib/hustle_and_flow/issue_trackers/github/issues_spec.rb +3 -3
- data/spec/lib/hustle_and_flow/issue_trackers/{github_spec.rb → github/tracker_spec.rb} +6 -4
- data/spec/lib/hustle_and_flow/vcs_repository_spec.rb +3 -3
- data/spec/lib/hustle_and_flow/{version_control → version_controls}/git/branch_spec.rb +2 -2
- data/spec/lib/hustle_and_flow/{version_control → version_controls}/git/branches_spec.rb +2 -2
- data/spec/lib/hustle_and_flow/{version_control → version_controls}/git/repository_spec.rb +2 -2
- data/spec/support/git_repo.rb +4 -4
- metadata +20 -16
- data/lib/hustle_and_flow/issue_trackers/github.rb +0 -71
- data/lib/hustle_and_flow/vcs_repository.rb +0 -19
- data/lib/hustle_and_flow/version_control/git/repository.rb +0 -99
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'hustle_and_flow/version_controls/git/repository'
|
2
|
+
|
3
|
+
module HustleAndFlow
|
4
|
+
class VersionControl
|
5
|
+
attr_accessor :adapter
|
6
|
+
|
7
|
+
def initialize(path:)
|
8
|
+
self.adapter = self.class.detect.new(path: path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.detect
|
12
|
+
::HustleAndFlow::VersionControls::Git::Repository
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_missing(name, *args)
|
16
|
+
adapter.public_send(name, *args)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'hustle_and_flow/version_control'
|
2
|
+
require 'hustle_and_flow/version_controls/git/commands/start'
|
3
|
+
|
4
|
+
module HustleAndFlow
|
5
|
+
module VersionControls
|
6
|
+
module Commands
|
7
|
+
class Start
|
8
|
+
def self.call(**args)
|
9
|
+
version_controls_class = VersionControl.detect.name.gsub('::Repository', '')
|
10
|
+
command_class = const_get("::#{version_controls_class}::Commands::Start")
|
11
|
+
|
12
|
+
command_class.call(**args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'hustle_and_flow/utils/url_slug'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_controls/git/branch'
|
3
3
|
|
4
4
|
module HustleAndFlow
|
5
|
-
module
|
5
|
+
module VersionControls
|
6
6
|
module Git
|
7
7
|
class Branches
|
8
8
|
include Enumerable
|
@@ -35,6 +35,12 @@ class Branches
|
|
35
35
|
template.sub('*****', next_version_number.to_s)
|
36
36
|
end
|
37
37
|
|
38
|
+
def create_next_branch(template:)
|
39
|
+
branch_name = next_branch_name(template: template)
|
40
|
+
|
41
|
+
repo.find_or_create_branch(branch_name)
|
42
|
+
end
|
43
|
+
|
38
44
|
def selectable
|
39
45
|
tracking_branches = branches.map do |branch|
|
40
46
|
branch.name if branch.has_tracking_branch?
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'hustle_and_flow/version_controls/git/branches'
|
2
|
+
require 'hustle_and_flow/formatters/branch_table_formatter'
|
3
|
+
|
4
|
+
module HustleAndFlow
|
5
|
+
module VersionControls
|
6
|
+
module Git
|
7
|
+
module Commands
|
8
|
+
class Start
|
9
|
+
attr_accessor :repo,
|
10
|
+
:io,
|
11
|
+
:number,
|
12
|
+
:title,
|
13
|
+
:branch_template
|
14
|
+
|
15
|
+
def initialize(**args)
|
16
|
+
self.repo = args[:repo]
|
17
|
+
self.io = args[:io]
|
18
|
+
self.number = args[:number]
|
19
|
+
self.title = args[:title]
|
20
|
+
self.branch_template = args[:branch_template]
|
21
|
+
end
|
22
|
+
|
23
|
+
def call
|
24
|
+
available_branches = repo.
|
25
|
+
branches.
|
26
|
+
selectable.
|
27
|
+
filter_by_issue(number: number,
|
28
|
+
title: title)
|
29
|
+
|
30
|
+
next_branch_name = available_branches.next_branch_name(template: branch_template)
|
31
|
+
|
32
|
+
selected = if available_branches.count.zero?
|
33
|
+
available_branches.create_next_branch(template: branch_template)
|
34
|
+
else
|
35
|
+
branch_number = nil
|
36
|
+
|
37
|
+
io.print_formatted_table \
|
38
|
+
title: 'Possible Existing Branches',
|
39
|
+
data: Formatters::BranchTableFormatter.new(available_branches).
|
40
|
+
to_ary
|
41
|
+
|
42
|
+
io.print_new_branch_prompt(next_branch_name)
|
43
|
+
|
44
|
+
until branch_number == 'c' ||
|
45
|
+
available_branches.valid_number?(branch_number)
|
46
|
+
|
47
|
+
branch_number = io.choose_branch
|
48
|
+
end
|
49
|
+
|
50
|
+
if branch_number == 'c'
|
51
|
+
available_branches.create_next_branch(template: branch_template)
|
52
|
+
else
|
53
|
+
available_branches.from_number(branch_number)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
selected.start
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.call(**args)
|
61
|
+
new(**args).call
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'git'
|
2
|
+
|
3
|
+
module HustleAndFlow
|
4
|
+
module VersionControls
|
5
|
+
module Git
|
6
|
+
class Repository
|
7
|
+
attr_accessor :repo
|
8
|
+
|
9
|
+
def initialize(path:)
|
10
|
+
self.repo = ::Git.open(path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def user
|
14
|
+
repo.config('github.user')
|
15
|
+
end
|
16
|
+
|
17
|
+
def base_name
|
18
|
+
origin_url[%r{github\.com.([\w\-]+/[\w\-]+)}, 1]
|
19
|
+
end
|
20
|
+
|
21
|
+
def upstream_remote_for_branch(branch_name, value = nil)
|
22
|
+
repo.config(upstream_remote_config_key(branch_name), value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def upstream_branch_for_branch(branch_name, value = nil)
|
26
|
+
repo.config(upstream_merge_config_key(branch_name), value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def with_branch(branch_name)
|
30
|
+
repo.checkout(branch_name)
|
31
|
+
|
32
|
+
yield
|
33
|
+
|
34
|
+
repo.push('origin', branch_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def find_or_create_branch(branch_name)
|
38
|
+
new_branch = repo.branch(branch_name)
|
39
|
+
new_branch.checkout
|
40
|
+
|
41
|
+
Branch.new(repo: self,
|
42
|
+
branch: new_branch)
|
43
|
+
end
|
44
|
+
|
45
|
+
def branches
|
46
|
+
Branches.new(repo: self,
|
47
|
+
branches: repo.branches)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def origin_url
|
53
|
+
origin.url
|
54
|
+
end
|
55
|
+
|
56
|
+
def origin
|
57
|
+
@origin ||= repo.remote('origin')
|
58
|
+
end
|
59
|
+
|
60
|
+
def upstream_remote_config_key(branch_name)
|
61
|
+
"branch.#{branch_name}.remote"
|
62
|
+
end
|
63
|
+
|
64
|
+
def upstream_merge_config_key(branch_name)
|
65
|
+
"branch.#{branch_name}.merge"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'rspectacular'
|
2
2
|
require 'octokit'
|
3
|
-
require 'hustle_and_flow/issue_trackers/github'
|
3
|
+
require 'hustle_and_flow/issue_trackers/github/tracker'
|
4
4
|
require 'hustle_and_flow/issue_trackers/github/issue'
|
5
5
|
|
6
6
|
module HustleAndFlow
|
7
7
|
module IssueTrackers
|
8
|
-
|
8
|
+
module Github
|
9
9
|
describe Issue, vcr: { record: :all } do
|
10
10
|
let(:repo) { OpenStruct.new(base_name: 'thekompanee/hustle_and_flow') }
|
11
|
-
let(:tracker) {
|
11
|
+
let(:tracker) { Tracker.new(repo: repo) }
|
12
12
|
|
13
13
|
it 'can create an issue' do
|
14
14
|
issue = Issue.create(tracker: tracker,
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'hustle_and_flow/issue_trackers/github'
|
2
|
+
require 'hustle_and_flow/issue_trackers/github/tracker'
|
3
3
|
require 'hustle_and_flow/issue_trackers/github/issues'
|
4
4
|
|
5
5
|
module HustleAndFlow
|
6
6
|
module IssueTrackers
|
7
|
-
|
7
|
+
module Github
|
8
8
|
describe Issues, vcr: { record: :all } do
|
9
9
|
let(:repo) { OpenStruct.new(base_name: 'thekompanee/hustle_and_flow') }
|
10
|
-
let(:tracker) {
|
10
|
+
let(:tracker) { Tracker.new(repo: repo) }
|
11
11
|
|
12
12
|
it 'can find an issue based on the type and title' do
|
13
13
|
issue = Issues.new(tracker: tracker).
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rspectacular'
|
2
|
-
require 'hustle_and_flow/issue_trackers/github'
|
2
|
+
require 'hustle_and_flow/issue_trackers/github/tracker'
|
3
3
|
|
4
4
|
module HustleAndFlow
|
5
5
|
module IssueTrackers
|
6
|
-
|
6
|
+
module Github
|
7
|
+
describe Tracker, :vcr do
|
7
8
|
let(:repo) { OpenStruct.new(base_name: 'thekompanee/hustle_and_flow') }
|
8
|
-
let(:tracker) {
|
9
|
+
let(:tracker) { Tracker.new(repo: repo) }
|
9
10
|
|
10
11
|
it 'can find a list of issues' do
|
11
12
|
issues = tracker.find_issues_by(status: 'open')
|
@@ -42,10 +43,11 @@ describe Github, :vcr do
|
|
42
43
|
issue = tracker.find_or_create_issue type: 'feature',
|
43
44
|
title: 'Ninjitsu'
|
44
45
|
|
45
|
-
assigned_issue =
|
46
|
+
assigned_issue = Tracker.assign_issue(issue, to: 'jfelchner')
|
46
47
|
|
47
48
|
expect(assigned_issue).to be_assigned_to 'jfelchner'
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
53
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_control'
|
3
3
|
|
4
4
|
module HustleAndFlow
|
5
|
-
describe
|
5
|
+
describe VersionControl do
|
6
6
|
it 'can determine the base name of the repo' do
|
7
7
|
with_repo do |git|
|
8
8
|
git.source.add_remote('origin', 'https://github.com/thekompanee/hustle_and_flow.git')
|
9
|
-
repo =
|
9
|
+
repo = VersionControl.new(path: git.source.dir.to_s)
|
10
10
|
|
11
11
|
expect(repo.base_name).to eql 'thekompanee/hustle_and_flow'
|
12
12
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_controls/git/branch'
|
3
3
|
|
4
4
|
module HustleAndFlow
|
5
|
-
module
|
5
|
+
module VersionControls
|
6
6
|
module Git
|
7
7
|
describe Branch do
|
8
8
|
it 'knows if it is the current branch' do
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_controls/git/branches'
|
3
3
|
require 'hustle_and_flow/issue_trackers/github/issue'
|
4
4
|
|
5
5
|
module HustleAndFlow
|
6
|
-
module
|
6
|
+
module VersionControls
|
7
7
|
module Git
|
8
8
|
describe Branches do
|
9
9
|
it 'can filter a list of branches by an issue number' do
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_controls/git/repository'
|
3
3
|
|
4
4
|
module HustleAndFlow
|
5
|
-
module
|
5
|
+
module VersionControls
|
6
6
|
module Git
|
7
7
|
describe Repository do
|
8
8
|
# it 'can determine the base name of the repo' do
|
data/spec/support/git_repo.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'fileutils'
|
2
|
-
require 'hustle_and_flow/
|
2
|
+
require 'hustle_and_flow/version_controls/git/repository'
|
3
3
|
|
4
4
|
def with_repo
|
5
5
|
name = 'my-repo'
|
@@ -12,7 +12,7 @@ def with_repo
|
|
12
12
|
my_repo.add(all: true)
|
13
13
|
my_repo.commit_all('Initial commit')
|
14
14
|
|
15
|
-
repo = HustleAndFlow::
|
15
|
+
repo = HustleAndFlow::VersionControls::Git::Repository.new(path: Dir.pwd)
|
16
16
|
|
17
17
|
yield repo if block_given?
|
18
18
|
end
|
@@ -31,13 +31,13 @@ def with_remote_repo
|
|
31
31
|
my_repo.commit_all('Initial commit')
|
32
32
|
end
|
33
33
|
|
34
|
-
remote_repo = HustleAndFlow::
|
34
|
+
remote_repo = HustleAndFlow::VersionControls::Git::Repository.new(path: remote_directory)
|
35
35
|
|
36
36
|
Dir.chdir local_directory do
|
37
37
|
Git.clone(remote_directory, name)
|
38
38
|
end
|
39
39
|
|
40
|
-
local_repo = HustleAndFlow::
|
40
|
+
local_repo = HustleAndFlow::VersionControls::Git::Repository.new(path: "#{local_directory}/#{name}")
|
41
41
|
|
42
42
|
yield [local_repo, remote_repo] if block_given?
|
43
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hustle_and_flow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thekompanee
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-08-
|
12
|
+
date: 2014-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: octokit
|
@@ -173,16 +173,20 @@ files:
|
|
173
173
|
- lib/hustle_and_flow/formatters/issue_table_formatter.rb
|
174
174
|
- lib/hustle_and_flow/io/shell.rb
|
175
175
|
- lib/hustle_and_flow/issue_tracker.rb
|
176
|
-
- lib/hustle_and_flow/issue_trackers/
|
176
|
+
- lib/hustle_and_flow/issue_trackers/commands/start.rb
|
177
|
+
- lib/hustle_and_flow/issue_trackers/github/commands/start.rb
|
177
178
|
- lib/hustle_and_flow/issue_trackers/github/issue.rb
|
178
179
|
- lib/hustle_and_flow/issue_trackers/github/issues.rb
|
180
|
+
- lib/hustle_and_flow/issue_trackers/github/tracker.rb
|
179
181
|
- lib/hustle_and_flow/utils/string.rb
|
180
182
|
- lib/hustle_and_flow/utils/url_slug.rb
|
181
|
-
- lib/hustle_and_flow/vcs_repository.rb
|
182
183
|
- lib/hustle_and_flow/version.rb
|
183
|
-
- lib/hustle_and_flow/version_control
|
184
|
-
- lib/hustle_and_flow/
|
185
|
-
- lib/hustle_and_flow/
|
184
|
+
- lib/hustle_and_flow/version_control.rb
|
185
|
+
- lib/hustle_and_flow/version_controls/commands/start.rb
|
186
|
+
- lib/hustle_and_flow/version_controls/git/branch.rb
|
187
|
+
- lib/hustle_and_flow/version_controls/git/branches.rb
|
188
|
+
- lib/hustle_and_flow/version_controls/git/commands/start.rb
|
189
|
+
- lib/hustle_and_flow/version_controls/git/repository.rb
|
186
190
|
- spec/lib/hustle_and_flow/formatters/branch_table_formatter_spec.rb
|
187
191
|
- spec/lib/hustle_and_flow/formatters/issue_detail_formatter_spec.rb
|
188
192
|
- spec/lib/hustle_and_flow/formatters/issue_table_formatter_spec.rb
|
@@ -190,11 +194,11 @@ files:
|
|
190
194
|
- spec/lib/hustle_and_flow/issue_tracker_spec.rb
|
191
195
|
- spec/lib/hustle_and_flow/issue_trackers/github/issue_spec.rb
|
192
196
|
- spec/lib/hustle_and_flow/issue_trackers/github/issues_spec.rb
|
193
|
-
- spec/lib/hustle_and_flow/issue_trackers/
|
197
|
+
- spec/lib/hustle_and_flow/issue_trackers/github/tracker_spec.rb
|
194
198
|
- spec/lib/hustle_and_flow/vcs_repository_spec.rb
|
195
|
-
- spec/lib/hustle_and_flow/
|
196
|
-
- spec/lib/hustle_and_flow/
|
197
|
-
- spec/lib/hustle_and_flow/
|
199
|
+
- spec/lib/hustle_and_flow/version_controls/git/branch_spec.rb
|
200
|
+
- spec/lib/hustle_and_flow/version_controls/git/branches_spec.rb
|
201
|
+
- spec/lib/hustle_and_flow/version_controls/git/repository_spec.rb
|
198
202
|
- spec/lib/utils/url_slug_spec.rb
|
199
203
|
- spec/spec_helper.rb
|
200
204
|
- spec/support/git_repo.rb
|
@@ -220,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
224
|
version: '0'
|
221
225
|
requirements: []
|
222
226
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.2.2
|
224
228
|
signing_key:
|
225
229
|
specification_version: 4
|
226
230
|
summary: Development Workflow Commands
|
@@ -232,11 +236,11 @@ test_files:
|
|
232
236
|
- spec/lib/hustle_and_flow/issue_tracker_spec.rb
|
233
237
|
- spec/lib/hustle_and_flow/issue_trackers/github/issue_spec.rb
|
234
238
|
- spec/lib/hustle_and_flow/issue_trackers/github/issues_spec.rb
|
235
|
-
- spec/lib/hustle_and_flow/issue_trackers/
|
239
|
+
- spec/lib/hustle_and_flow/issue_trackers/github/tracker_spec.rb
|
236
240
|
- spec/lib/hustle_and_flow/vcs_repository_spec.rb
|
237
|
-
- spec/lib/hustle_and_flow/
|
238
|
-
- spec/lib/hustle_and_flow/
|
239
|
-
- spec/lib/hustle_and_flow/
|
241
|
+
- spec/lib/hustle_and_flow/version_controls/git/branch_spec.rb
|
242
|
+
- spec/lib/hustle_and_flow/version_controls/git/branches_spec.rb
|
243
|
+
- spec/lib/hustle_and_flow/version_controls/git/repository_spec.rb
|
240
244
|
- spec/lib/utils/url_slug_spec.rb
|
241
245
|
- spec/spec_helper.rb
|
242
246
|
- spec/support/git_repo.rb
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'octokit'
|
2
|
-
require 'hustle_and_flow/issue_trackers/github/issue'
|
3
|
-
require 'hustle_and_flow/issue_trackers/github/issues'
|
4
|
-
|
5
|
-
module HustleAndFlow
|
6
|
-
module IssueTrackers
|
7
|
-
class Github
|
8
|
-
attr_accessor :client,
|
9
|
-
:repo,
|
10
|
-
:source
|
11
|
-
|
12
|
-
def initialize(repo:)
|
13
|
-
Octokit.auto_paginate = true
|
14
|
-
|
15
|
-
self.client = Octokit::Client.new(netrc: true)
|
16
|
-
self.repo = repo
|
17
|
-
end
|
18
|
-
|
19
|
-
def repo_name
|
20
|
-
repo.base_name
|
21
|
-
end
|
22
|
-
|
23
|
-
def start(io:, me:, issue_data:)
|
24
|
-
Issues.start(tracker: self,
|
25
|
-
io: io,
|
26
|
-
me: me,
|
27
|
-
issue_data: issue_data)
|
28
|
-
end
|
29
|
-
|
30
|
-
# def ready_for_review(branch)
|
31
|
-
# #
|
32
|
-
# # No issue number
|
33
|
-
# # Find by title
|
34
|
-
# # Has issue number
|
35
|
-
# # Find by number
|
36
|
-
# #
|
37
|
-
# # Issue found
|
38
|
-
# # Issue closed
|
39
|
-
# # Ask to reopen issue
|
40
|
-
# # Issue open
|
41
|
-
# # Issue being reviewed
|
42
|
-
# # Issue not being reviewed
|
43
|
-
# # Issue not found
|
44
|
-
# # Ask to create issue
|
45
|
-
# #
|
46
|
-
# # Lookup Pull Request from Issue and Version Number
|
47
|
-
# #
|
48
|
-
# # Pull Request Found
|
49
|
-
# # How are PR's found?
|
50
|
-
# #
|
51
|
-
# # PR Title Format: #15 v1 - My Issue Title
|
52
|
-
# #
|
53
|
-
# # Pull Request Closed
|
54
|
-
# # Reopen PR
|
55
|
-
# # Pull Request Open
|
56
|
-
# # Use found PR
|
57
|
-
# # Pull Request Not Found
|
58
|
-
# # Create New PR
|
59
|
-
# #
|
60
|
-
# pull_request = PullRequest.find_or_create_from_branch_name(branch.name)
|
61
|
-
# issue = Issue.find_or_create_from_branch_name(branch.name)
|
62
|
-
#
|
63
|
-
# issue.ready_for_review(reviewer_names: branch.overwritten_authors)
|
64
|
-
# end
|
65
|
-
#
|
66
|
-
# def update_pull_request(branch)
|
67
|
-
# client.create_pull_request()
|
68
|
-
# end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'hustle_and_flow/version_control/git/repository'
|
2
|
-
|
3
|
-
module HustleAndFlow
|
4
|
-
class VcsRepository
|
5
|
-
attr_accessor :adapter
|
6
|
-
|
7
|
-
def initialize(**args)
|
8
|
-
self.adapter = HustleAndFlow::
|
9
|
-
VersionControl::
|
10
|
-
Git::
|
11
|
-
Repository.
|
12
|
-
new(path: args[:path])
|
13
|
-
end
|
14
|
-
|
15
|
-
def method_missing(name, *args)
|
16
|
-
adapter.public_send(name, *args)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
require 'git'
|
2
|
-
require 'hustle_and_flow/version_control/git/branches'
|
3
|
-
require 'hustle_and_flow/formatters/branch_table_formatter'
|
4
|
-
|
5
|
-
module HustleAndFlow
|
6
|
-
module VersionControl
|
7
|
-
module Git
|
8
|
-
class Repository
|
9
|
-
attr_accessor :repo
|
10
|
-
|
11
|
-
def initialize(path:)
|
12
|
-
self.repo = ::Git.open(path)
|
13
|
-
end
|
14
|
-
|
15
|
-
def start(io:, number:, title:, branch_template:)
|
16
|
-
available_branches = branches.
|
17
|
-
selectable.
|
18
|
-
filter_by_issue(number: number,
|
19
|
-
title: title)
|
20
|
-
|
21
|
-
next_branch_name = available_branches.next_branch_name(template: branch_template)
|
22
|
-
|
23
|
-
selected = if available_branches.count.zero?
|
24
|
-
Branch.new(repo: self, branch: repo.checkout(next_branch_name,
|
25
|
-
new_branch: true))
|
26
|
-
else
|
27
|
-
branch_number = nil
|
28
|
-
|
29
|
-
io.print_formatted_table \
|
30
|
-
title: 'Possible Existing Branches',
|
31
|
-
data: Formatters::BranchTableFormatter.new(available_branches).
|
32
|
-
to_ary
|
33
|
-
|
34
|
-
io.print_new_branch_prompt(next_branch_name)
|
35
|
-
|
36
|
-
until available_branches.valid_number? branch_number
|
37
|
-
branch_number = io.choose_branch
|
38
|
-
end
|
39
|
-
|
40
|
-
available_branches.from_number(branch_number)
|
41
|
-
end
|
42
|
-
|
43
|
-
selected.start
|
44
|
-
end
|
45
|
-
|
46
|
-
def user
|
47
|
-
repo.config('github.user')
|
48
|
-
end
|
49
|
-
|
50
|
-
def base_name
|
51
|
-
origin_url[%r{github\.com.([\w\-]+/[\w\-]+)}, 1]
|
52
|
-
end
|
53
|
-
|
54
|
-
def upstream_remote_for_branch(branch_name, value = nil)
|
55
|
-
repo.config(upstream_remote_config_key(branch_name), value)
|
56
|
-
end
|
57
|
-
|
58
|
-
def upstream_branch_for_branch(branch_name, value = nil)
|
59
|
-
repo.config(upstream_merge_config_key(branch_name), value)
|
60
|
-
end
|
61
|
-
|
62
|
-
def with_branch(branch_name)
|
63
|
-
repo.checkout(branch_name)
|
64
|
-
|
65
|
-
yield
|
66
|
-
|
67
|
-
repo.push('origin', branch_name)
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
def branches
|
73
|
-
Branches.new(repo: self,
|
74
|
-
branches: repo.branches)
|
75
|
-
end
|
76
|
-
|
77
|
-
def new_branch_name(branch_template)
|
78
|
-
branch_template.sub('*****', branches.next_version_number)
|
79
|
-
end
|
80
|
-
|
81
|
-
def origin_url
|
82
|
-
origin.url
|
83
|
-
end
|
84
|
-
|
85
|
-
def origin
|
86
|
-
@origin ||= repo.remote('origin')
|
87
|
-
end
|
88
|
-
|
89
|
-
def upstream_remote_config_key(branch_name)
|
90
|
-
"branch.#{branch_name}.remote"
|
91
|
-
end
|
92
|
-
|
93
|
-
def upstream_merge_config_key(branch_name)
|
94
|
-
"branch.#{branch_name}.merge"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|