github_issues_cli 0.2.12 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/github_issues_cli.rb +4 -1
- data/lib/github_issues_cli/command.rb +35 -17
- data/lib/github_issues_cli/command/browse.rb +1 -1
- data/lib/github_issues_cli/command/checkout.rb +19 -8
- data/lib/github_issues_cli/command/clone.rb +32 -0
- data/lib/github_issues_cli/command/comment.rb +1 -1
- data/lib/github_issues_cli/command/list.rb +3 -3
- data/lib/github_issues_cli/command/open.rb +9 -3
- data/lib/github_issues_cli/command/pull_request.rb +18 -11
- data/lib/github_issues_cli/command/push.rb +4 -9
- data/lib/github_issues_cli/command/show.rb +1 -1
- data/lib/github_issues_cli/command_manager.rb +1 -0
- data/lib/github_issues_cli/extensions/git.rb +7 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1eae2b08e31f053bc57a8509bb0f6d49328b46b1
|
4
|
+
data.tar.gz: ff998a2b853797aee5cf818a1cacde1ea056834d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e18c131f6fff20450b9fa2c99c2ded9abae1878c9e1dcc5eb25028796ccfaac6bd2cf2789d0a7cfdd4937f2d5582aad1b362e5ec7297612daef232e7cfc7ae59
|
7
|
+
data.tar.gz: 5f75db94ababc441b5fe38b350738bec5bd5a2f3cead6ffa62c8cb8c3b1fc033cd296df26a79e15deb10f3221c932ed8e42d053407aaaa966f4c674e02643339
|
data/lib/github_issues_cli.rb
CHANGED
@@ -5,7 +5,9 @@ module GithubIssuesCli
|
|
5
5
|
require 'github_api'
|
6
6
|
require 'io/console'
|
7
7
|
require 'json'
|
8
|
+
require 'pathname'
|
8
9
|
require 'github_issues_cli/command'
|
10
|
+
require 'github_issues_cli/command/clone'
|
9
11
|
require 'github_issues_cli/command/list'
|
10
12
|
require 'github_issues_cli/command/checkout'
|
11
13
|
require 'github_issues_cli/command/browse'
|
@@ -15,4 +17,5 @@ module GithubIssuesCli
|
|
15
17
|
require 'github_issues_cli/command/push'
|
16
18
|
require 'github_issues_cli/command/pull_request'
|
17
19
|
require 'github_issues_cli/command_manager'
|
18
|
-
|
20
|
+
require 'github_issues_cli/extensions/git'
|
21
|
+
end
|
@@ -35,6 +35,14 @@ module GithubIssuesCli
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def get_git_push_target
|
39
|
+
git_repo = get_git_repo
|
40
|
+
branch_name = git_repo.current_branch
|
41
|
+
remote_name = git_repo.lib.command_proxy('config', ['--get', "branch.#{branch_name}.remote"]) || 'origin'
|
42
|
+
remote_ref = git_repo.lib.command_proxy('config', ['--get', "branch.#{branch_name}.merge"]) || branch_name
|
43
|
+
remote_name + '/' + remote_ref
|
44
|
+
end
|
45
|
+
|
38
46
|
# @return [Git::Base]
|
39
47
|
def get_git_repo
|
40
48
|
unless @git_repo
|
@@ -57,7 +65,7 @@ module GithubIssuesCli
|
|
57
65
|
$1
|
58
66
|
end
|
59
67
|
|
60
|
-
def
|
68
|
+
def get_upstream_repo
|
61
69
|
url = get_git_repo.remote(:upstream).url
|
62
70
|
if url.nil?
|
63
71
|
raise 'No `upstream` remote found, please configure it first'
|
@@ -71,25 +79,35 @@ module GithubIssuesCli
|
|
71
79
|
{:user => $1, :name => $2}
|
72
80
|
end
|
73
81
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
82
|
+
def get_pullrequest(issue_number)
|
83
|
+
upstream_repo = get_upstream_repo
|
84
|
+
request = {
|
85
|
+
:user => upstream_repo[:user],
|
86
|
+
:repo => upstream_repo[:name],
|
87
|
+
:number => issue_number,
|
88
|
+
}
|
89
|
+
Github::PullRequests.new.get(request) rescue nil
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_source_branch(issue_number)
|
93
|
+
git_repo = get_git_repo
|
94
|
+
pullrequest = get_pullrequest(issue_number)
|
95
|
+
return nil if pullrequest.nil?
|
96
|
+
|
97
|
+
username = pullrequest.head.repo.owner.login
|
80
98
|
remote_name = username == @username ? 'origin' : username
|
81
|
-
|
82
|
-
|
83
|
-
|
99
|
+
remote_url = pullrequest.head.repo.ssh_url
|
100
|
+
branch_name = pullrequest.head.ref
|
101
|
+
|
102
|
+
source_remote = git_repo.remote(remote_name)
|
103
|
+
if source_remote.url.nil?
|
84
104
|
print 'Setting up remote `' + remote_name + '`...'
|
85
|
-
|
105
|
+
source_remote = git_repo.add_remote(remote_name, remote_url)
|
86
106
|
puts ' Done'
|
87
107
|
end
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
remote.fetch
|
92
|
-
remote.name + '/' + branch
|
108
|
+
|
109
|
+
source_remote.fetch
|
110
|
+
source_remote.name + '/' + branch_name
|
93
111
|
end
|
94
112
|
|
95
113
|
def run(arguments)
|
@@ -107,4 +125,4 @@ module GithubIssuesCli
|
|
107
125
|
end
|
108
126
|
end
|
109
127
|
end
|
110
|
-
end
|
128
|
+
end
|
@@ -2,7 +2,7 @@ module GithubIssuesCli
|
|
2
2
|
class Command::Browse < Command
|
3
3
|
|
4
4
|
def execute
|
5
|
-
github_repo =
|
5
|
+
github_repo = get_upstream_repo
|
6
6
|
url = 'https://github.com/' + github_repo[:user] + '/' + github_repo[:name] + '/issues/' + get_issue_number
|
7
7
|
system('open ' + url)
|
8
8
|
end
|
@@ -6,24 +6,35 @@ module GithubIssuesCli
|
|
6
6
|
def execute
|
7
7
|
branch_name = 'issue-' + issue_number
|
8
8
|
repo = get_git_repo
|
9
|
-
|
10
|
-
|
9
|
+
|
10
|
+
is_local_branch = repo.lib.branches_all.map(&:first).include? branch_name
|
11
|
+
if is_local_branch
|
11
12
|
repo.checkout branch_name
|
12
13
|
else
|
13
|
-
source =
|
14
|
+
source = get_source_branch(issue_number)
|
15
|
+
target = source
|
14
16
|
if source.nil?
|
15
|
-
github_repo =
|
17
|
+
github_repo = get_upstream_repo
|
16
18
|
request = {:user => github_repo[:user], :repo => github_repo[:name], :number => issue_number}
|
17
|
-
Github::Issues.new.get
|
19
|
+
Github::Issues.new.get(request) rescue raise "Can't find issue ##{issue_number}"
|
18
20
|
repo.remote('upstream').fetch
|
19
21
|
source = 'upstream/master'
|
22
|
+
target = 'origin/' + branch_name
|
20
23
|
end
|
21
|
-
repo.lib.checkout
|
24
|
+
repo.lib.command_proxy('checkout', ['-b', branch_name, source])
|
22
25
|
end
|
23
26
|
print on_green ' '
|
24
|
-
print
|
25
|
-
print
|
27
|
+
print " Checked out ##{issue_number} "
|
28
|
+
print "(#{source})" unless is_local_branch
|
26
29
|
puts
|
30
|
+
|
31
|
+
unless is_local_branch
|
32
|
+
print on_green ' '
|
33
|
+
puts " Setting upstream to (#{target})"
|
34
|
+
remote_name, branch_name = target.split('/')
|
35
|
+
repo.lib.command_proxy('config', ["branch.#{branch_name}.remote", remote_name])
|
36
|
+
repo.lib.command_proxy('config', ["branch.#{branch_name}.merge", "refs/heads/#{branch_name}"])
|
37
|
+
end
|
27
38
|
end
|
28
39
|
end
|
29
40
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module GithubIssuesCli
|
2
|
+
class Command::Clone < Command
|
3
|
+
|
4
|
+
parameter 'repository', 'name of the Github repository in owner/repo format', :attribute_name => :repository
|
5
|
+
parameter '[target]', 'target location for clone', :attribute_name => :target
|
6
|
+
|
7
|
+
def execute
|
8
|
+
owner, name = repository.split('/')
|
9
|
+
upstream_repo = Github::Repos.new.get(:user => owner, :repo => name)
|
10
|
+
if upstream_repo.owner.login == @username
|
11
|
+
origin_repo = upstream_repo
|
12
|
+
else
|
13
|
+
forks = Github::Repos::Forks.new.list(:user => owner, :repo => name)
|
14
|
+
fork = forks.find do |fork|
|
15
|
+
fork.owner.login == @username
|
16
|
+
end
|
17
|
+
|
18
|
+
unless fork
|
19
|
+
puts "Forking #{repository} for #{@username}"
|
20
|
+
fork = Github::Repos::Forks.new.create(:user => owner, :repo => name)
|
21
|
+
end
|
22
|
+
origin_repo = fork
|
23
|
+
end
|
24
|
+
|
25
|
+
target_directory = target || origin_repo.name
|
26
|
+
target_path = Pathname.new(target_directory).expand_path(Dir.getwd)
|
27
|
+
puts "Cloning #{repository} into #{target_path.to_s}"
|
28
|
+
git_repo = Git.clone(origin_repo.ssh_url, target_path.basename.to_s, :path => target_path.dirname.to_s)
|
29
|
+
git_repo.add_remote 'upstream', upstream_repo.ssh_url
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -4,7 +4,7 @@ module GithubIssuesCli
|
|
4
4
|
parameter 'body', 'comment body', :attribute_name => :body
|
5
5
|
|
6
6
|
def execute
|
7
|
-
github_repo =
|
7
|
+
github_repo = get_upstream_repo
|
8
8
|
issue_number = get_issue_number
|
9
9
|
Github::Issues.new.comments.create :user => github_repo[:user], :repo => github_repo[:name], :issue_id => issue_number, :body => body
|
10
10
|
print on_green ' '
|
@@ -4,7 +4,7 @@ module GithubIssuesCli
|
|
4
4
|
option '--mine', :flag, 'show only mine issues'
|
5
5
|
|
6
6
|
def execute
|
7
|
-
github_repo =
|
7
|
+
github_repo = get_upstream_repo
|
8
8
|
issues_client = Github::Issues.new
|
9
9
|
request = {:user => github_repo[:user], :repo => github_repo[:name]}
|
10
10
|
request.store(:assignee, @username) if mine?
|
@@ -12,11 +12,11 @@ module GithubIssuesCli
|
|
12
12
|
|
13
13
|
issues.each do |issue|
|
14
14
|
if not issue.assignee.nil? and issue.assignee.login == @username
|
15
|
-
print
|
15
|
+
print yellow '●'
|
16
16
|
else
|
17
17
|
print ' '
|
18
18
|
end
|
19
|
-
print bold
|
19
|
+
print bold(issue.number.to_s.rjust(5) + ':')
|
20
20
|
print ' ' + issue.title
|
21
21
|
puts
|
22
22
|
end
|
@@ -4,14 +4,20 @@ module GithubIssuesCli
|
|
4
4
|
parameter 'summary', 'issue summary', :attribute_name => :summary
|
5
5
|
|
6
6
|
def execute
|
7
|
-
github_repo =
|
7
|
+
github_repo = get_upstream_repo
|
8
8
|
issue = Github::Issues.new.create :user => github_repo[:user], :repo => github_repo[:name], :title => summary
|
9
9
|
issue_number = issue[:number].to_s
|
10
10
|
|
11
|
-
|
11
|
+
get_upstream_repo
|
12
12
|
git_repo = get_git_repo
|
13
13
|
git_repo.remote('upstream').fetch
|
14
|
-
|
14
|
+
remote_name = 'origin'
|
15
|
+
branch_name = 'issue-' + issue_number
|
16
|
+
|
17
|
+
git_repo.lib.command_proxy('checkout', ['-b', branch_name, 'upstream/master'])
|
18
|
+
git_repo.lib.command_proxy('config', ["branch.#{branch_name}.remote", remote_name])
|
19
|
+
git_repo.lib.command_proxy('config', ["branch.#{branch_name}.merge", "refs/heads/#{branch_name}"])
|
20
|
+
|
15
21
|
print on_green ' '
|
16
22
|
print ' Checked out '
|
17
23
|
puts bold '#' + issue_number
|
@@ -1,23 +1,30 @@
|
|
1
1
|
module GithubIssuesCli
|
2
2
|
class Command::Pull_request < Command
|
3
3
|
|
4
|
+
parameter '[base]', 'base for pull-request', :attribute_name => :base, :default => 'master'
|
5
|
+
|
4
6
|
def execute
|
5
|
-
github_repo = get_github_repo
|
6
7
|
issue_number = get_issue_number
|
7
|
-
|
8
|
+
raise "Pull-request for issue ##{issue_number} already exists" if get_pullrequest(issue_number)
|
9
|
+
|
10
|
+
github_repo = get_upstream_repo
|
11
|
+
git_repo = get_git_repo
|
12
|
+
target = get_git_push_target
|
13
|
+
remote, ref = target.split('/', 2)
|
14
|
+
puts git_repo.lib.command_proxy('push', [remote, "#{git_repo.current_branch}:#{ref}"])
|
15
|
+
|
16
|
+
raise 'Cannot create pull-request for non-origin remotes' unless remote == 'origin'
|
17
|
+
source = @username + ':' + ref.split('/').last
|
8
18
|
begin
|
9
19
|
request = {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
20
|
+
:user => github_repo[:user],
|
21
|
+
:repo => github_repo[:name],
|
22
|
+
:base => base,
|
23
|
+
:head => source,
|
24
|
+
:issue => issue_number
|
15
25
|
}
|
16
|
-
Github::PullRequests.new.create
|
26
|
+
Github::PullRequests.new.create(request)
|
17
27
|
rescue Exception => e
|
18
|
-
unless get_source(issue_number).nil?
|
19
|
-
raise 'Pull-request for issue #' + issue_number + ' already exists'
|
20
|
-
end
|
21
28
|
raise "Internal error: Cannot create pull-request.\n#{e.inspect}"
|
22
29
|
end
|
23
30
|
print 'Pull request for issue '
|
@@ -2,15 +2,10 @@ module GithubIssuesCli
|
|
2
2
|
class Command::Push < Command
|
3
3
|
|
4
4
|
def execute
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
print 'Pushing code to '
|
11
|
-
puts bold source
|
12
|
-
remote, branch = source.split('/')
|
13
|
-
get_git_repo.push(remote, branch)
|
5
|
+
git_repo = get_git_repo
|
6
|
+
target = get_git_push_target
|
7
|
+
remote, ref = target.split('/', 2)
|
8
|
+
puts git_repo.lib.command_proxy('push', [remote, "#{git_repo.current_branch}:#{ref}"])
|
14
9
|
end
|
15
10
|
end
|
16
11
|
end
|
@@ -2,7 +2,7 @@ module GithubIssuesCli
|
|
2
2
|
class Command::Show < Command
|
3
3
|
|
4
4
|
def execute
|
5
|
-
github_repo =
|
5
|
+
github_repo = get_upstream_repo
|
6
6
|
issue_number = get_issue_number
|
7
7
|
issues_client = Github::Issues.new
|
8
8
|
issue = issues_client.get :user => github_repo[:user], :repo => github_repo[:name], :number => issue_number
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module GithubIssuesCli
|
2
2
|
class CommandManager < Clamp::Command
|
3
3
|
|
4
|
+
subcommand 'clone', 'Clones repository', Command::Clone
|
4
5
|
subcommand 'list', 'Lists issues', Command::List
|
5
6
|
subcommand 'checkout', 'Checkouts specific issue', Command::Checkout
|
6
7
|
subcommand 'show', 'Show current issue details', Command::Show
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github_issues_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomasz Durka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: git
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.2.
|
33
|
+
version: 1.2.8
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.2.
|
40
|
+
version: 1.2.8
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: github_api
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/github_issues_cli/command.rb
|
79
79
|
- lib/github_issues_cli/command/browse.rb
|
80
80
|
- lib/github_issues_cli/command/checkout.rb
|
81
|
+
- lib/github_issues_cli/command/clone.rb
|
81
82
|
- lib/github_issues_cli/command/comment.rb
|
82
83
|
- lib/github_issues_cli/command/list.rb
|
83
84
|
- lib/github_issues_cli/command/open.rb
|
@@ -85,6 +86,7 @@ files:
|
|
85
86
|
- lib/github_issues_cli/command/push.rb
|
86
87
|
- lib/github_issues_cli/command/show.rb
|
87
88
|
- lib/github_issues_cli/command_manager.rb
|
89
|
+
- lib/github_issues_cli/extensions/git.rb
|
88
90
|
homepage: https://github.com/tomaszdurka/github_issues_cli.git
|
89
91
|
licenses:
|
90
92
|
- MIT
|
@@ -105,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
107
|
version: '0'
|
106
108
|
requirements: []
|
107
109
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
110
|
+
rubygems_version: 2.4.6
|
109
111
|
signing_key:
|
110
112
|
specification_version: 4
|
111
113
|
summary: Command line tool for managing issues, pull-requests on GitHub platform
|