geet 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/bin/geet +8 -2
- data/geet.gemspec +1 -1
- data/lib/geet/commandline/configuration.rb +3 -1
- data/lib/geet/commandline/editor.rb +4 -2
- data/lib/geet/git/repository.rb +25 -2
- data/lib/geet/github/abstract_issue.rb +5 -2
- data/lib/geet/github/issue.rb +2 -2
- data/lib/geet/gitlab/issue.rb +3 -1
- data/lib/geet/services/list_issues.rb +18 -2
- data/lib/geet/utils/git.rb +30 -0
- data/lib/geet/version.rb +1 -1
- data/spec/integration/list_issues_spec.rb +25 -1
- data/spec/vcr_cassettes/github_com/list_issues_with_assignee.yml +155 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 810fe20ea861a01c88e0cad7fc14bfbb92ee7bf1
|
4
|
+
data.tar.gz: 6aebe64e41a3fc69e6e6e8628d1d3d4bf74a2723
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37d3ef70153f9ff4fa010c3e28883e4e3f5d1ba896e737c6f6597cdfceb9d8e986ab5f1c5cdf2d5c4f1dd179bd1a871e0edf6cf89f98b655b3ab83ca890f5329
|
7
|
+
data.tar.gz: c76276bb1bf6d9147e17fa92eb49baca3cd7f96a90a3c1786b4b6c60964ab24c6daca1df5e1a7164f69f3bebe09cb3683de26c1498b538b1c8f243a8575680d9
|
data/.travis.yml
CHANGED
@@ -2,6 +2,10 @@ language: ruby
|
|
2
2
|
rvm:
|
3
3
|
- 2.3
|
4
4
|
- 2.4
|
5
|
+
- 2.5
|
5
6
|
# API tokens are always required, but not used in testing, since no requests are actually made.
|
6
7
|
env:
|
7
8
|
- GITHUB_API_TOKEN=phony GITLAB_API_TOKEN=phony
|
9
|
+
# Bundler+Rubygems issue; see https://github.com/travis-ci/travis-ci/issues/8978
|
10
|
+
before_install:
|
11
|
+
- gem update --system
|
data/bin/geet
CHANGED
@@ -5,6 +5,7 @@ require_relative '../lib/geet/commandline/configuration.rb'
|
|
5
5
|
require_relative '../lib/geet/commandline/commands.rb'
|
6
6
|
require_relative '../lib/geet/commandline/editor.rb'
|
7
7
|
require_relative '../lib/geet/git/repository.rb'
|
8
|
+
require_relative '../lib/geet/utils/git.rb'
|
8
9
|
Dir[File.join(__dir__, '../lib/geet/services/*.rb')].each { |filename| require filename }
|
9
10
|
|
10
11
|
class GeetLauncher
|
@@ -33,13 +34,18 @@ class GeetLauncher
|
|
33
34
|
|
34
35
|
Services::CreateLabel.new.execute(repository, name, options)
|
35
36
|
when ISSUE_LIST_COMMAND
|
36
|
-
Services::ListIssues.new.execute(repository)
|
37
|
+
Services::ListIssues.new.execute(repository, options)
|
37
38
|
when LABEL_LIST_COMMAND
|
38
39
|
Services::ListLabels.new.execute(repository)
|
39
40
|
when MILESTONE_LIST_COMMAND
|
40
41
|
Services::ListMilestones.new.execute(repository)
|
41
42
|
when PR_CREATE_COMMAND
|
42
|
-
|
43
|
+
# Tricky. It would be best to have Git logic exlusively inside the services,
|
44
|
+
# but at the same time, the summary editing should be out.
|
45
|
+
git = Utils::Git.new(repository)
|
46
|
+
summary = git.cherry('master').size == 1 ? git.show_description('HEAD') : ''
|
47
|
+
|
48
|
+
title, description = Commandline::Editor.new.edit_summary(summary: summary)
|
43
49
|
options[:milestone_pattern] = options.delete(:milestone) if options.key?(:milestone)
|
44
50
|
|
45
51
|
Services::CreatePr.new.execute(repository, title, description, options)
|
data/geet.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.required_ruby_version = '>= 2.3.0'
|
12
12
|
s.authors = ['Saverio Miroddi']
|
13
|
-
s.date = '
|
13
|
+
s.date = '2018-01-14'
|
14
14
|
s.email = ['saverio.pub2@gmail.com']
|
15
15
|
s.homepage = 'https://github.com/saveriomiroddi/geet'
|
16
16
|
s.summary = 'Commandline interface for performing SCM (eg. GitHub) operations (eg. PR creation).'
|
@@ -35,6 +35,7 @@ module Geet
|
|
35
35
|
].freeze
|
36
36
|
|
37
37
|
ISSUE_LIST_OPTIONS = [
|
38
|
+
['-a', '--assignee-pattern john', 'Assignee pattern'],
|
38
39
|
['-u', '--upstream', 'List on the upstream repository'],
|
39
40
|
].freeze
|
40
41
|
|
@@ -48,7 +49,8 @@ module Geet
|
|
48
49
|
['-m', '--milestone number_or_pattern', 'Milestone number or description pattern'],
|
49
50
|
['-r', '--reviewer-patterns john,tom,adrian,kevin', 'Reviewer login patterns'],
|
50
51
|
['-u', '--upstream', 'Create on the upstream repository'],
|
51
|
-
long_help: 'The default editor will be opened for editing title and description
|
52
|
+
long_help: 'The default editor will be opened for editing title and description; if the PR adds one commit only, '\
|
53
|
+
'the content will be prepopulated with the commit description.'
|
52
54
|
]
|
53
55
|
|
54
56
|
PR_LIST_OPTIONS = [
|
@@ -18,8 +18,10 @@ module Geet
|
|
18
18
|
# A summary is a composition with a title and an optional description;
|
19
19
|
# if the description is not found, a blank string is returned.
|
20
20
|
#
|
21
|
-
def edit_summary
|
22
|
-
|
21
|
+
def edit_summary(summary: '')
|
22
|
+
full_summary = summary + IO.read(SUMMARY_TEMPLATE)
|
23
|
+
|
24
|
+
raw_summary = edit_content_in_default_editor(full_summary)
|
23
25
|
|
24
26
|
split_raw_summary(raw_summary)
|
25
27
|
end
|
data/lib/geet/git/repository.rb
CHANGED
@@ -40,6 +40,7 @@ module Geet
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def create_issue(title, description)
|
43
|
+
ask_confirm_action if location_action_with_upstream_repository?
|
43
44
|
attempt_provider_call(:Issue, :create, title, description, api_interface)
|
44
45
|
end
|
45
46
|
|
@@ -55,8 +56,8 @@ module Geet
|
|
55
56
|
attempt_provider_call(:AbstractIssue, :list, api_interface, milestone: milestone)
|
56
57
|
end
|
57
58
|
|
58
|
-
def issues
|
59
|
-
attempt_provider_call(:Issue, :list, api_interface)
|
59
|
+
def issues(assignee: nil)
|
60
|
+
attempt_provider_call(:Issue, :list, api_interface, assignee: assignee)
|
60
61
|
end
|
61
62
|
|
62
63
|
def milestone(number)
|
@@ -68,6 +69,7 @@ module Geet
|
|
68
69
|
end
|
69
70
|
|
70
71
|
def create_pr(title, description, head)
|
72
|
+
ask_confirm_action if location_action_with_upstream_repository?
|
71
73
|
attempt_provider_call(:PR, :create, title, description, head, api_interface)
|
72
74
|
end
|
73
75
|
|
@@ -111,6 +113,17 @@ module Geet
|
|
111
113
|
remote_url
|
112
114
|
end
|
113
115
|
|
116
|
+
# "Lightweight" version of #remote.
|
117
|
+
# Doesn't sanity check for the remote url format; this action is for querying
|
118
|
+
# purposes, any any action that needs to work with the remote, uses #remote.
|
119
|
+
#
|
120
|
+
def has_remote?(name)
|
121
|
+
gitdir_option = "--git-dir #{@location.shellescape}/.git" if @location
|
122
|
+
remote_url = `git #{gitdir_option} ls-remote --get-url #{name}`.strip
|
123
|
+
|
124
|
+
remote_url != name
|
125
|
+
end
|
126
|
+
|
114
127
|
# PROVIDER
|
115
128
|
|
116
129
|
def extract_env_api_token
|
@@ -173,6 +186,16 @@ module Geet
|
|
173
186
|
|
174
187
|
remote(remote_name)[REMOTE_ORIGIN_REGEX, 3]
|
175
188
|
end
|
189
|
+
|
190
|
+
def ask_confirm_action
|
191
|
+
puts "WARNING! The action will be performed on a fork, but an upstream repository has been found!"
|
192
|
+
print "Press Enter to continue, or Ctrl+C to exit now."
|
193
|
+
gets
|
194
|
+
end
|
195
|
+
|
196
|
+
def location_action_with_upstream_repository?
|
197
|
+
has_remote?('upstream') && !@upstream
|
198
|
+
end
|
176
199
|
end
|
177
200
|
end
|
178
201
|
end
|
@@ -22,9 +22,12 @@ module Geet
|
|
22
22
|
|
23
23
|
# See https://developer.github.com/v3/issues/#list-issues-for-a-repository
|
24
24
|
#
|
25
|
-
def self.list(api_interface, only_issues: false, milestone: nil)
|
25
|
+
def self.list(api_interface, only_issues: false, milestone: nil, assignee: nil)
|
26
26
|
api_path = 'issues'
|
27
|
-
|
27
|
+
|
28
|
+
request_params = {}
|
29
|
+
request_params[:milestone] = milestone if milestone
|
30
|
+
request_params[:assignee] = assignee if assignee
|
28
31
|
|
29
32
|
response = api_interface.send_request(api_path, params: request_params, multipage: true)
|
30
33
|
|
data/lib/geet/github/issue.rb
CHANGED
@@ -19,8 +19,8 @@ module Geet
|
|
19
19
|
|
20
20
|
# See https://developer.github.com/v3/issues/#list-issues-for-a-repository
|
21
21
|
#
|
22
|
-
def self.list(api_interface)
|
23
|
-
super(api_interface, only_issues: true)
|
22
|
+
def self.list(api_interface, assignee: nil)
|
23
|
+
super(api_interface, only_issues: true, assignee: assignee)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/geet/gitlab/issue.rb
CHANGED
@@ -11,7 +11,9 @@ module Geet
|
|
11
11
|
@link = link
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.list(api_interface)
|
14
|
+
def self.list(api_interface, assignee: nil)
|
15
|
+
raise "Assignee filtering not currently supported!" if assignee
|
16
|
+
|
15
17
|
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/issues"
|
16
18
|
|
17
19
|
response = api_interface.send_request(api_path, multipage: true)
|
@@ -3,13 +3,29 @@
|
|
3
3
|
module Geet
|
4
4
|
module Services
|
5
5
|
class ListIssues
|
6
|
-
def execute(repository, output: $stdout)
|
7
|
-
|
6
|
+
def execute(repository, assignee_pattern: nil, output: $stdout, **)
|
7
|
+
assignee_thread = find_assignee(repository, assignee_pattern, output) if assignee_pattern
|
8
|
+
|
9
|
+
assignee = assignee_thread&.join&.value
|
10
|
+
|
11
|
+
issues = repository.issues(assignee: assignee)
|
8
12
|
|
9
13
|
issues.each do |issue|
|
10
14
|
output.puts "#{issue.number}. #{issue.title} (#{issue.link})"
|
11
15
|
end
|
12
16
|
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def find_assignee(repository, assignee_pattern, output)
|
21
|
+
output.puts 'Finding assignee...'
|
22
|
+
|
23
|
+
Thread.new do
|
24
|
+
collaborators = repository.collaborators
|
25
|
+
collaborator = collaborators.find { |collaborator| collaborator =~ /#{assignee_pattern}/i }
|
26
|
+
collaborator || raise("No collaborator found for pattern: #{assignee_pattern.inspect}")
|
27
|
+
end
|
28
|
+
end
|
13
29
|
end
|
14
30
|
end
|
15
31
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'shellwords'
|
4
|
+
|
5
|
+
module Geet
|
6
|
+
module Utils
|
7
|
+
# Represents the git program interface; used for performing git operations.
|
8
|
+
#
|
9
|
+
class Git
|
10
|
+
def initialize(repository)
|
11
|
+
@repository = repository
|
12
|
+
end
|
13
|
+
|
14
|
+
# Return the commit shas between HEAD and `limit`, excluding the already applied commits
|
15
|
+
# (which start with `-`)
|
16
|
+
#
|
17
|
+
def cherry(limit)
|
18
|
+
raw_commits = `git cherry #{limit.shellescape}`.strip
|
19
|
+
|
20
|
+
raw_commits.split("\n").grep(/^\+/).map { |line| line[3..-1] }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Show the description ("<subject>\n\n<body>") for the given git object.
|
24
|
+
#
|
25
|
+
def show_description(object)
|
26
|
+
`git show --quiet --format='%s\n\n%b' #{object.shellescape}`.strip
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/geet/version.rb
CHANGED
@@ -10,7 +10,7 @@ describe Geet::Services::ListIssues do
|
|
10
10
|
let(:upstream_repository) { Geet::Git::Repository.new(upstream: true) }
|
11
11
|
|
12
12
|
context 'with github.com' do
|
13
|
-
it 'should list the issues' do
|
13
|
+
it 'should list the default issues' do
|
14
14
|
allow(repository).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo')
|
15
15
|
|
16
16
|
expected_output = <<~STR
|
@@ -31,6 +31,30 @@ describe Geet::Services::ListIssues do
|
|
31
31
|
expect(actual_issue_numbers).to eql(expected_issue_numbers)
|
32
32
|
end
|
33
33
|
|
34
|
+
context 'with assignee filtering' do
|
35
|
+
it 'should list the issues' do
|
36
|
+
allow(repository).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_gh')
|
37
|
+
|
38
|
+
expected_output = <<~STR
|
39
|
+
Finding assignee...
|
40
|
+
12. test issue 3 (https://github.com/donaldduck/testrepo_gh/issues/12)
|
41
|
+
10. test issue 1 (https://github.com/donaldduck/testrepo_gh/issues/10)
|
42
|
+
STR
|
43
|
+
expected_issue_numbers = [12, 10]
|
44
|
+
|
45
|
+
actual_output = StringIO.new
|
46
|
+
|
47
|
+
service_result = VCR.use_cassette('github_com/list_issues_with_assignee') do
|
48
|
+
described_class.new.execute(repository, assignee_pattern: 'donald-fr', output: actual_output)
|
49
|
+
end
|
50
|
+
|
51
|
+
actual_issue_numbers = service_result.map(&:number)
|
52
|
+
|
53
|
+
expect(actual_output.string).to eql(expected_output)
|
54
|
+
expect(actual_issue_numbers).to eql(expected_issue_numbers)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
34
58
|
it 'should list the upstream issues' do
|
35
59
|
allow(upstream_repository).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_2f')
|
36
60
|
allow(upstream_repository).to receive(:remote).with('upstream').and_return('git@github.com:donald-fr/testrepo_u')
|
@@ -0,0 +1,155 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.github.com/repos/donaldduck/testrepo_gh/collaborators
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- application/vnd.github.v3+json
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- api.github.com
|
18
|
+
Authorization:
|
19
|
+
- Basic <GITHUB_CREDENTIALS>
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Server:
|
26
|
+
- GitHub.com
|
27
|
+
Date:
|
28
|
+
- Fri, 05 Jan 2018 22:08:21 GMT
|
29
|
+
Content-Type:
|
30
|
+
- application/json; charset=utf-8
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Status:
|
34
|
+
- 200 OK
|
35
|
+
X-Ratelimit-Limit:
|
36
|
+
- '5000'
|
37
|
+
X-Ratelimit-Remaining:
|
38
|
+
- '4974'
|
39
|
+
X-Ratelimit-Reset:
|
40
|
+
- '1515191050'
|
41
|
+
Cache-Control:
|
42
|
+
- private, max-age=60, s-maxage=60
|
43
|
+
Vary:
|
44
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
45
|
+
Etag:
|
46
|
+
- W/"46dff1ccc47eba7864e9695443ac0ecd"
|
47
|
+
X-Oauth-Scopes:
|
48
|
+
- admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook,
|
49
|
+
delete_repo, gist, notifications, repo, user
|
50
|
+
X-Accepted-Oauth-Scopes:
|
51
|
+
- ''
|
52
|
+
X-Github-Media-Type:
|
53
|
+
- github.v3; format=json
|
54
|
+
Access-Control-Expose-Headers:
|
55
|
+
- ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining,
|
56
|
+
X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
57
|
+
Access-Control-Allow-Origin:
|
58
|
+
- "*"
|
59
|
+
Content-Security-Policy:
|
60
|
+
- default-src 'none'
|
61
|
+
Strict-Transport-Security:
|
62
|
+
- max-age=31536000; includeSubdomains; preload
|
63
|
+
X-Content-Type-Options:
|
64
|
+
- nosniff
|
65
|
+
X-Frame-Options:
|
66
|
+
- deny
|
67
|
+
X-Xss-Protection:
|
68
|
+
- 1; mode=block
|
69
|
+
X-Runtime-Rack:
|
70
|
+
- '0.046658'
|
71
|
+
X-Github-Request-Id:
|
72
|
+
- C360:1BD7D:6A56AF:DE8FF0:5A4FF755
|
73
|
+
body:
|
74
|
+
encoding: ASCII-8BIT
|
75
|
+
string: '[{"login":"pizza-delivery","id":12345678,"avatar_url":"https://avatars0.githubusercontent.com/u/12345678?v=4","gravatar_id":"","url":"https://api.github.com/users/pizza-delivery","html_url":"https://github.com/pizza-delivery","followers_url":"https://api.github.com/users/pizza-delivery/followers","following_url":"https://api.github.com/users/pizza-delivery/following{/other_user}","gists_url":"https://api.github.com/users/pizza-delivery/gists{/gist_id}","starred_url":"https://api.github.com/users/pizza-delivery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pizza-delivery/subscriptions","organizations_url":"https://api.github.com/users/pizza-delivery/orgs","repos_url":"https://api.github.com/users/pizza-delivery/repos","events_url":"https://api.github.com/users/pizza-delivery/events{/privacy}","received_events_url":"https://api.github.com/users/pizza-delivery/received_events","type":"User","site_admin":false,"permissions":{"admin":true,"push":true,"pull":true}},{"login":"donald-fr","id":33847412,"avatar_url":"https://avatars2.githubusercontent.com/u/33847412?v=4","gravatar_id":"","url":"https://api.github.com/users/donald-fr","html_url":"https://github.com/donald-fr","followers_url":"https://api.github.com/users/donald-fr/followers","following_url":"https://api.github.com/users/donald-fr/following{/other_user}","gists_url":"https://api.github.com/users/donald-fr/gists{/gist_id}","starred_url":"https://api.github.com/users/donald-fr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donald-fr/subscriptions","organizations_url":"https://api.github.com/users/donald-fr/orgs","repos_url":"https://api.github.com/users/donald-fr/repos","events_url":"https://api.github.com/users/donald-fr/events{/privacy}","received_events_url":"https://api.github.com/users/donald-fr/received_events","type":"User","site_admin":false,"permissions":{"admin":false,"push":true,"pull":true}}]'
|
76
|
+
http_version:
|
77
|
+
recorded_at: Fri, 05 Jan 2018 22:08:21 GMT
|
78
|
+
- request:
|
79
|
+
method: get
|
80
|
+
uri: https://api.github.com/repos/donaldduck/testrepo_gh/issues?assignee=donald-fr
|
81
|
+
body:
|
82
|
+
encoding: US-ASCII
|
83
|
+
string: ''
|
84
|
+
headers:
|
85
|
+
Accept-Encoding:
|
86
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
87
|
+
Accept:
|
88
|
+
- application/vnd.github.v3+json
|
89
|
+
User-Agent:
|
90
|
+
- Ruby
|
91
|
+
Host:
|
92
|
+
- api.github.com
|
93
|
+
Authorization:
|
94
|
+
- Basic <GITHUB_CREDENTIALS>
|
95
|
+
response:
|
96
|
+
status:
|
97
|
+
code: 200
|
98
|
+
message: OK
|
99
|
+
headers:
|
100
|
+
Server:
|
101
|
+
- GitHub.com
|
102
|
+
Date:
|
103
|
+
- Fri, 05 Jan 2018 22:08:22 GMT
|
104
|
+
Content-Type:
|
105
|
+
- application/json; charset=utf-8
|
106
|
+
Transfer-Encoding:
|
107
|
+
- chunked
|
108
|
+
Status:
|
109
|
+
- 200 OK
|
110
|
+
X-Ratelimit-Limit:
|
111
|
+
- '5000'
|
112
|
+
X-Ratelimit-Remaining:
|
113
|
+
- '4973'
|
114
|
+
X-Ratelimit-Reset:
|
115
|
+
- '1515191050'
|
116
|
+
Cache-Control:
|
117
|
+
- private, max-age=60, s-maxage=60
|
118
|
+
Vary:
|
119
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
120
|
+
Etag:
|
121
|
+
- W/"d6b5b2a00c4e811eac8f00b39a5c172d"
|
122
|
+
X-Oauth-Scopes:
|
123
|
+
- admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook,
|
124
|
+
delete_repo, gist, notifications, repo, user
|
125
|
+
X-Accepted-Oauth-Scopes:
|
126
|
+
- repo
|
127
|
+
X-Github-Media-Type:
|
128
|
+
- github.v3; format=json
|
129
|
+
Access-Control-Expose-Headers:
|
130
|
+
- ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining,
|
131
|
+
X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
132
|
+
Access-Control-Allow-Origin:
|
133
|
+
- "*"
|
134
|
+
Content-Security-Policy:
|
135
|
+
- default-src 'none'
|
136
|
+
Strict-Transport-Security:
|
137
|
+
- max-age=31536000; includeSubdomains; preload
|
138
|
+
X-Content-Type-Options:
|
139
|
+
- nosniff
|
140
|
+
X-Frame-Options:
|
141
|
+
- deny
|
142
|
+
X-Xss-Protection:
|
143
|
+
- 1; mode=block
|
144
|
+
X-Runtime-Rack:
|
145
|
+
- '0.072448'
|
146
|
+
X-Github-Request-Id:
|
147
|
+
- C362:1BD7E:C64D10:166B84B:5A4FF756
|
148
|
+
body:
|
149
|
+
encoding: ASCII-8BIT
|
150
|
+
string: '[{"url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/12","repository_url":"https://api.github.com/repos/donaldduck/testrepo_gh","labels_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/12/comments","events_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/12/events","html_url":"https://github.com/donaldduck/testrepo_gh/issues/12","id":286418444,"number":12,"title":"test
|
151
|
+
issue 3","user":{"login":"donaldduck","id":1595356,"avatar_url":"https://avatars2.githubusercontent.com/u/1595356?v=4","gravatar_id":"","url":"https://api.github.com/users/donaldduck","html_url":"https://github.com/donaldduck","followers_url":"https://api.github.com/users/donaldduck/followers","following_url":"https://api.github.com/users/donaldduck/following{/other_user}","gists_url":"https://api.github.com/users/donaldduck/gists{/gist_id}","starred_url":"https://api.github.com/users/donaldduck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donaldduck/subscriptions","organizations_url":"https://api.github.com/users/donaldduck/orgs","repos_url":"https://api.github.com/users/donaldduck/repos","events_url":"https://api.github.com/users/donaldduck/events{/privacy}","received_events_url":"https://api.github.com/users/donaldduck/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"donald-fr","id":33847412,"avatar_url":"https://avatars2.githubusercontent.com/u/33847412?v=4","gravatar_id":"","url":"https://api.github.com/users/donald-fr","html_url":"https://github.com/donald-fr","followers_url":"https://api.github.com/users/donald-fr/followers","following_url":"https://api.github.com/users/donald-fr/following{/other_user}","gists_url":"https://api.github.com/users/donald-fr/gists{/gist_id}","starred_url":"https://api.github.com/users/donald-fr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donald-fr/subscriptions","organizations_url":"https://api.github.com/users/donald-fr/orgs","repos_url":"https://api.github.com/users/donald-fr/repos","events_url":"https://api.github.com/users/donald-fr/events{/privacy}","received_events_url":"https://api.github.com/users/donald-fr/received_events","type":"User","site_admin":false},"assignees":[{"login":"donald-fr","id":33847412,"avatar_url":"https://avatars2.githubusercontent.com/u/33847412?v=4","gravatar_id":"","url":"https://api.github.com/users/donald-fr","html_url":"https://github.com/donald-fr","followers_url":"https://api.github.com/users/donald-fr/followers","following_url":"https://api.github.com/users/donald-fr/following{/other_user}","gists_url":"https://api.github.com/users/donald-fr/gists{/gist_id}","starred_url":"https://api.github.com/users/donald-fr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donald-fr/subscriptions","organizations_url":"https://api.github.com/users/donald-fr/orgs","repos_url":"https://api.github.com/users/donald-fr/repos","events_url":"https://api.github.com/users/donald-fr/events{/privacy}","received_events_url":"https://api.github.com/users/donald-fr/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2018-01-05T22:06:17Z","updated_at":"2018-01-05T22:06:17Z","closed_at":null,"author_association":"COLLABORATOR","body":""},{"url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/10","repository_url":"https://api.github.com/repos/donaldduck/testrepo_gh","labels_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/10/labels{/name}","comments_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/10/comments","events_url":"https://api.github.com/repos/donaldduck/testrepo_gh/issues/10/events","html_url":"https://github.com/donaldduck/testrepo_gh/issues/10","id":286418384,"number":10,"title":"test
|
152
|
+
issue 1","user":{"login":"donaldduck","id":1595356,"avatar_url":"https://avatars2.githubusercontent.com/u/1595356?v=4","gravatar_id":"","url":"https://api.github.com/users/donaldduck","html_url":"https://github.com/donaldduck","followers_url":"https://api.github.com/users/donaldduck/followers","following_url":"https://api.github.com/users/donaldduck/following{/other_user}","gists_url":"https://api.github.com/users/donaldduck/gists{/gist_id}","starred_url":"https://api.github.com/users/donaldduck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donaldduck/subscriptions","organizations_url":"https://api.github.com/users/donaldduck/orgs","repos_url":"https://api.github.com/users/donaldduck/repos","events_url":"https://api.github.com/users/donaldduck/events{/privacy}","received_events_url":"https://api.github.com/users/donaldduck/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"donald-fr","id":33847412,"avatar_url":"https://avatars2.githubusercontent.com/u/33847412?v=4","gravatar_id":"","url":"https://api.github.com/users/donald-fr","html_url":"https://github.com/donald-fr","followers_url":"https://api.github.com/users/donald-fr/followers","following_url":"https://api.github.com/users/donald-fr/following{/other_user}","gists_url":"https://api.github.com/users/donald-fr/gists{/gist_id}","starred_url":"https://api.github.com/users/donald-fr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donald-fr/subscriptions","organizations_url":"https://api.github.com/users/donald-fr/orgs","repos_url":"https://api.github.com/users/donald-fr/repos","events_url":"https://api.github.com/users/donald-fr/events{/privacy}","received_events_url":"https://api.github.com/users/donald-fr/received_events","type":"User","site_admin":false},"assignees":[{"login":"donald-fr","id":33847412,"avatar_url":"https://avatars2.githubusercontent.com/u/33847412?v=4","gravatar_id":"","url":"https://api.github.com/users/donald-fr","html_url":"https://github.com/donald-fr","followers_url":"https://api.github.com/users/donald-fr/followers","following_url":"https://api.github.com/users/donald-fr/following{/other_user}","gists_url":"https://api.github.com/users/donald-fr/gists{/gist_id}","starred_url":"https://api.github.com/users/donald-fr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/donald-fr/subscriptions","organizations_url":"https://api.github.com/users/donald-fr/orgs","repos_url":"https://api.github.com/users/donald-fr/repos","events_url":"https://api.github.com/users/donald-fr/events{/privacy}","received_events_url":"https://api.github.com/users/donald-fr/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2018-01-05T22:06:01Z","updated_at":"2018-01-05T22:06:01Z","closed_at":null,"author_association":"COLLABORATOR","body":""}]'
|
153
|
+
http_version:
|
154
|
+
recorded_at: Fri, 05 Jan 2018 22:08:22 GMT
|
155
|
+
recorded_with: VCR 3.0.3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saverio Miroddi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simple_scripting
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/geet/services/list_milestones.rb
|
76
76
|
- lib/geet/services/list_prs.rb
|
77
77
|
- lib/geet/services/merge_pr.rb
|
78
|
+
- lib/geet/utils/git.rb
|
78
79
|
- lib/geet/version.rb
|
79
80
|
- spec/integration/create_gist_spec.rb
|
80
81
|
- spec/integration/create_issue_spec.rb
|
@@ -96,6 +97,7 @@ files:
|
|
96
97
|
- spec/vcr_cassettes/create_pr_upstream.yml
|
97
98
|
- spec/vcr_cassettes/github_com/list_issues.yml
|
98
99
|
- spec/vcr_cassettes/github_com/list_issues_upstream.yml
|
100
|
+
- spec/vcr_cassettes/github_com/list_issues_with_assignee.yml
|
99
101
|
- spec/vcr_cassettes/github_com/list_labels.yml
|
100
102
|
- spec/vcr_cassettes/gitlab_com/list_issues.yml
|
101
103
|
- spec/vcr_cassettes/gitlab_com/list_labels.yml
|