export-pull-requests 0.3.0 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changes +27 -0
- data/README.md +9 -5
- data/bin/epr +48 -19
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9aa3a32a54b67ebcc317255f9575cd1cb92eabef
|
4
|
+
data.tar.gz: e614ed2ff03d1d3571513fe0923bf0162bc45c38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d584c1f5406cba8733a910513a8079f37d2544cc07656f0484a856d4d38b0121892e9ef49cd809bca61a614ec75f27d2491f1af4a02dad7ac65685224013061a
|
7
|
+
data.tar.gz: 53b26f30445b60c26955e2212396cd069ab262374a50876938f40b7c131d91472bd3aebf43093738428d8181e298a3020b167aac23df7b5018e8dc1768507ce1
|
data/Changes
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
v0.3.5 2021-03-16
|
2
|
+
--------------------
|
3
|
+
Enhancements:
|
4
|
+
* Add Merged column containing PR merge time
|
5
|
+
* Exit with failure if attempting to export GitHub milestones for PRs
|
6
|
+
|
7
|
+
v0.3.4 2021-02-12
|
8
|
+
--------------------
|
9
|
+
Bug Fixes:
|
10
|
+
* Bitbucket username not exported for PRs under 2.0 API (#20)
|
11
|
+
|
12
|
+
v0.3.3 2019-05-01
|
13
|
+
--------------------
|
14
|
+
Bug Fixes:
|
15
|
+
* GitHub PR only exports were output as an "issue" instead of "PR"
|
16
|
+
|
17
|
+
v0.3.2 2019-02-09
|
18
|
+
--------------------
|
19
|
+
Bug Fixes:
|
20
|
+
* Don't supply assignee or milestone for GitHub if nil
|
21
|
+
|
22
|
+
--------------------
|
23
|
+
v0.3.1 2019-01-28
|
24
|
+
--------------------
|
25
|
+
Enhancements:
|
26
|
+
* Add support for filtering on milestones and labels to GitLab
|
27
|
+
|
1
28
|
--------------------
|
2
29
|
v0.3.0 2019-01-10
|
3
30
|
--------------------
|
data/README.md
CHANGED
@@ -20,9 +20,9 @@ This installs the `epr` executable.
|
|
20
20
|
-b, --body Include the issue/pr body description in the output (GitHub only)
|
21
21
|
-c, --creator=USER1,USER2,... Export PRs created by given username(s); prepend `!' to exclude user
|
22
22
|
-e, --endpoint=URL Endpoint URL for 'enterprise', etc... repositories
|
23
|
-
-m, --milestone=WHAT Export items assigned to the given milestone (GitHub only)
|
24
|
-
-a, --assignee=USER Export items assigned to the given user (GitHub only)
|
25
|
-
-l, --labels=LABEL(S) Export items with the given label(s) (GitHub only)
|
23
|
+
-m, --milestone=WHAT Export items assigned to the given milestone (GitHub/GitLab only)
|
24
|
+
-a, --assignee=USER Export items assigned to the given user (GitHub/GitLab only)
|
25
|
+
-l, --labels=LABEL(S) Export items with the given label(s) (GitHub/GitLab only)
|
26
26
|
-h, --help Show this message
|
27
27
|
-p, --provider=NAME Service provider: bitbucket, github, or gitlab; defaults to github
|
28
28
|
-s, --state=STATE Export items in the given state, defaults to open
|
@@ -66,12 +66,16 @@ Export all issues from a GitLab project:
|
|
66
66
|
|
67
67
|
## Service Notes
|
68
68
|
|
69
|
-
To connect to a custom/"Enterprise" installation of any of the supported services use the endpoint option (`-e`)
|
69
|
+
To connect to a custom/"Enterprise" installation of any of the supported services use the endpoint option (`-e`).
|
70
|
+
|
71
|
+
The provided URL must point the API endpoint, not the user-facing site. For GitHub this is `http(s)://YOUR-SITE/api/v3`.
|
70
72
|
|
71
73
|
### Bitbucket
|
72
74
|
|
73
75
|
You can use [app passwords](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html) for the API token.
|
74
|
-
Just provide your token
|
76
|
+
Just provide your token info in `bitbucket_username:app_password` format:
|
77
|
+
|
78
|
+
epr -p bitbucket -t bitbucket_username:app_password user/repo1
|
75
79
|
|
76
80
|
### GitLab
|
77
81
|
|
data/bin/epr
CHANGED
@@ -9,7 +9,7 @@ require "github_api"
|
|
9
9
|
require "gitlab"
|
10
10
|
require "bitbucket_rest_api"
|
11
11
|
|
12
|
-
VERSION = "0.3.
|
12
|
+
VERSION = "0.3.5"
|
13
13
|
SERVICES = %w[github gitlab bitbucket]
|
14
14
|
GIT_CONFIGS = %w[epr.token github.oauth-token]
|
15
15
|
|
@@ -70,13 +70,14 @@ def bitbucket(user, repo)
|
|
70
70
|
|
71
71
|
prs = $bitbucket.repos.pull_request.all(user, repo, :page => page, :state => $filter.upcase)
|
72
72
|
prs["values"].each do |pr|
|
73
|
-
next if pr.author && skip_user?(pr.author.
|
73
|
+
next if pr.author && (skip_user?(pr.author.display_name) || skip_user?(pr.author.nickname))
|
74
74
|
|
75
75
|
rows << [
|
76
76
|
repo_name,
|
77
77
|
TYPE_PR,
|
78
78
|
pr.id,
|
79
|
-
|
79
|
+
# With the 2.0 API is this check necessary?
|
80
|
+
pr.author ? pr.author.display_name : no_user,
|
80
81
|
pr.title,
|
81
82
|
pr.state,
|
82
83
|
localtime(pr.created_on),
|
@@ -138,12 +139,12 @@ def github(user, repo)
|
|
138
139
|
options[:endpoint] = $endpoint if $endpoint
|
139
140
|
|
140
141
|
$gh ||= Github.new(options)
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
142
|
+
|
143
|
+
options = { :user => user, :repo => repo, :state => $filter, :labels => $labels }
|
144
|
+
options[:milestone] = $milestone if $milestone
|
145
|
+
options[:assignee] = $assignee if $assignee
|
146
|
+
|
147
|
+
$gh.public_send(method).list(options).each_page do |page|
|
147
148
|
|
148
149
|
next if page.size.zero? # Needed for auto_pagination
|
149
150
|
|
@@ -154,16 +155,28 @@ def github(user, repo)
|
|
154
155
|
|
155
156
|
rows << [
|
156
157
|
"#{user}/#{repo}",
|
157
|
-
item.pull_request
|
158
|
+
# If we're only retrieving PRs then item.pull_request will be nil
|
159
|
+
# It's only populated when retrieving both (issues method).
|
160
|
+
item.pull_request || method == :pull_requests ? TYPE_PR : TYPE_ISSUE,
|
158
161
|
item.number,
|
159
162
|
item.user.login,
|
160
163
|
item.title,
|
161
164
|
item.state,
|
162
165
|
localtime(item.created_at),
|
163
|
-
localtime(item.updated_at)
|
164
|
-
item.html_url,
|
166
|
+
localtime(item.updated_at)
|
165
167
|
]
|
166
168
|
|
169
|
+
# GitHub issues API returns PRs but not their merged_at time. To get that we need to specifically export PRs
|
170
|
+
if item.pull_request && $export != EXPORT_ISSUES
|
171
|
+
rows[-1] << "(use `-x pr` option)"
|
172
|
+
elsif $export != EXPORT_PRS
|
173
|
+
rows[-1] << "N/A"
|
174
|
+
else
|
175
|
+
rows[-1] << (item.merged_at ? localtime(item.merged_at) : nil)
|
176
|
+
end
|
177
|
+
|
178
|
+
rows[-1] << item.html_url
|
179
|
+
|
167
180
|
if $body
|
168
181
|
body = item.body
|
169
182
|
# -3 for "..."
|
@@ -190,10 +203,18 @@ def gitlab(user, repo)
|
|
190
203
|
|
191
204
|
# Do we care about this differing in output?
|
192
205
|
state = $filter == "open" ? "opened" : $filter
|
206
|
+
options = {
|
207
|
+
:milestone => $milestone,
|
208
|
+
:labels => $labels,
|
209
|
+
:state => state
|
210
|
+
}
|
211
|
+
|
212
|
+
# If assignee_id is nil an error is raised
|
213
|
+
options[:assignee_id] = $assignee if $assignee
|
193
214
|
|
194
215
|
$gitlab ||= Gitlab.client(:auth_token => $token, :endpoint => $endpoint || "https://gitlab.com/api/v4")
|
195
216
|
methods.each do |method|
|
196
|
-
$gitlab.public_send(method, "#{user}/#{repo}",
|
217
|
+
$gitlab.public_send(method, "#{user}/#{repo}", options).auto_paginate do |item|
|
197
218
|
next if skip_user?(item.author.username)
|
198
219
|
|
199
220
|
rows << [
|
@@ -205,9 +226,16 @@ def gitlab(user, repo)
|
|
205
226
|
item.title,
|
206
227
|
item.state,
|
207
228
|
localtime(item.created_at),
|
208
|
-
localtime(item.updated_at)
|
209
|
-
item.web_url
|
229
|
+
localtime(item.updated_at)
|
210
230
|
]
|
231
|
+
|
232
|
+
if method == :issues
|
233
|
+
rows[-1] << "N/A"
|
234
|
+
else
|
235
|
+
rows[-1] << (item.merged_at ? localtime(item.merged_at) : nil)
|
236
|
+
end
|
237
|
+
|
238
|
+
rows[-1] << item.web_url
|
211
239
|
end
|
212
240
|
end
|
213
241
|
|
@@ -216,13 +244,14 @@ end
|
|
216
244
|
|
217
245
|
def export_repos(argv)
|
218
246
|
rows = []
|
219
|
-
rows << %w[Repository Type # User Title State Created Updated URL]
|
247
|
+
rows << %w[Repository Type # User Title State Created Updated Merged URL]
|
220
248
|
rows[-1].insert(4, "Body") if $body
|
221
249
|
|
222
250
|
repos = parse_repos(argv)
|
223
251
|
repos.each do |user, repo|
|
224
252
|
case $provider
|
225
253
|
when "github"
|
254
|
+
abort "milestone filtering can only be used with issues" if $milestone && $export == EXPORT_PRS
|
226
255
|
rows.concat(github(user, repo))
|
227
256
|
when "gitlab"
|
228
257
|
rows.concat(gitlab(user, repo))
|
@@ -267,15 +296,15 @@ parser = OptionParser.new do |opts|
|
|
267
296
|
$endpoint = url
|
268
297
|
end
|
269
298
|
|
270
|
-
opts.on "-m", "--milestone=WHAT", "Export items assigned to the given milestone (GitHub only)" do |m|
|
299
|
+
opts.on "-m", "--milestone=WHAT", "Export items assigned to the given milestone (GitHub/GitLab only)" do |m|
|
271
300
|
$milestone = m
|
272
301
|
end
|
273
302
|
|
274
|
-
opts.on "-a", "--assignee=USER", "Export items assigned to the given user (GitHub only)" do |a|
|
303
|
+
opts.on "-a", "--assignee=USER", "Export items assigned to the given user (GitHub/GitLab only)" do |a|
|
275
304
|
$assignee = a
|
276
305
|
end
|
277
306
|
|
278
|
-
opts.on "-l", "--labels=LABEL(S)", "Export items with the given label(s) (GitHub only)" do |l|
|
307
|
+
opts.on "-l", "--labels=LABEL(S)", "Export items with the given label(s) (GitHub/GitLab only)" do |l|
|
279
308
|
$labels = l
|
280
309
|
end
|
281
310
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: export-pull-requests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Skye Shaw
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: github_api
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 12.3.3
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 12.3.3
|
69
69
|
description: Program to export GitHub, GitLab, or Bitbucket pull requests/merge requests
|
70
70
|
and issues to CSV a file.
|
71
71
|
email: skye.shaw@gmail.com
|