geet 0.2.0 → 0.2.1
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/.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
|