export-pull-requests 0.2.2 → 0.3.4

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/Changes +28 -0
  3. data/README.md +14 -3
  4. data/bin/epr +37 -7
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1415cd62e08619538dbdec7223e66a1f60fab235
4
- data.tar.gz: a58ad25901d787bbb288f9c1727993f2dc2fd68c
3
+ metadata.gz: 88245d15b5031425be423a98f42b42451a5e7810
4
+ data.tar.gz: 1d60dce9efefbb4d282110b537756ac31a8d6a06
5
5
  SHA512:
6
- metadata.gz: 338d6bd1513bf8f18d654662a783e50d15aba5d5b5e2164dd745c8af033139e83533e5ef6966b2b44442a793697c054d54f8b6cd425d04c8b4d51330e0ac43bd
7
- data.tar.gz: 2d562890c7fe9795cab0d11f1712e39cd47ace2c2e977493513622e5c4f3ea2b05b14f2e032c8f44ad671e5256ec870a75e6472cc473a3fea7eb0c64065577dc
6
+ metadata.gz: 49af965c7fb6817c8bf8dcdbfbf07608e4b384abf35b2af56692b1f04dcdac63378e8f01bcb015b3d3af78395b431c1a5a5c4090b0199045a15516b5b15c9e49
7
+ data.tar.gz: c3f868be0eaeb4a760ae8e71f5a49d3a855dba2662149b361b8ef5e6fcdbfe9316f1b458bcce5bead831a629966edb3a8007724fff77d40823ddeb7f63fb5404
data/Changes CHANGED
@@ -1,3 +1,31 @@
1
+ v0.3.4 2021-02-12
2
+ --------------------
3
+ Bug Fixes:
4
+ * Bitbucket username not exported for PRs under 2.0 API (#20)
5
+
6
+ v0.3.3 2019-05-01
7
+ --------------------
8
+ Bug Fixes:
9
+ * GitHub PR only exports were output as an "issue" instead of "PR"
10
+
11
+ v0.3.2 2019-02-09
12
+ --------------------
13
+ Bug Fixes:
14
+ * Don't supply assignee or milestone for GitHub if nil
15
+
16
+ --------------------
17
+ v0.3.1 2019-01-28
18
+ --------------------
19
+ Enhancements:
20
+ * Add support for filtering on milestones and labels to GitLab
21
+
22
+ --------------------
23
+ v0.3.0 2019-01-10
24
+ --------------------
25
+ Enhancements:
26
+ * Add support for filtering on milestones and labels (GitHub only)
27
+ * Add support for filtering on assignees (GitHub only, thanks Caroline Boyden)
28
+
1
29
  --------------------
2
30
  v0.2.2 2018-11-30
3
31
  --------------------
data/README.md CHANGED
@@ -16,10 +16,13 @@ This installs the `epr` executable.
16
16
 
17
17
  ## Usage
18
18
 
19
- usage: epr [-bhv] [-e url] [-s state] [-t token] [-c user1,user2...] user/repo1 [user/repo2...]
19
+ usage: epr [options] user/repo1 [user/repo2...]
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/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)
23
26
  -h, --help Show this message
24
27
  -p, --provider=NAME Service provider: bitbucket, github, or gitlab; defaults to github
25
28
  -s, --state=STATE Export items in the given state, defaults to open
@@ -63,12 +66,16 @@ Export all issues from a GitLab project:
63
66
 
64
67
  ## Service Notes
65
68
 
66
- 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`.
67
72
 
68
73
  ### Bitbucket
69
74
 
70
75
  You can use [app passwords](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html) for the API token.
71
- Just provide your token HTTP Auth style using: `username:app_password`.
76
+ Just provide your token info in `bitbucket_username:app_password` format:
77
+
78
+ epr -p bitbucket -t bitbucket_username:app_password user/repo1
72
79
 
73
80
  ### GitLab
74
81
 
@@ -76,6 +83,10 @@ Authentication can be done via a [personal access token](https://gitlab.com/prof
76
83
 
77
84
  Enterprise editions of GitLab have an [issue export feature](https://docs.gitlab.com/ee/user/project/issues/csv_export.html).
78
85
 
86
+ ## See Also
87
+
88
+ - [Batch Labels](https://github.com/sshaw/batchlabels) - Add/remove labels in batches to/from GitHub issues and pull requests.
89
+
79
90
  ## Author
80
91
 
81
92
  Skye Shaw [skye.shaw AT gmail]
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.2.2"
12
+ VERSION = "0.3.4"
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.username)
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
- pr.author ? pr.author.username : no_user,
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,7 +139,13 @@ def github(user, repo)
138
139
  options[:endpoint] = $endpoint if $endpoint
139
140
 
140
141
  $gh ||= Github.new(options)
141
- $gh.public_send(method).list(:user => user, :repo => repo, :state => $filter).each_page do |page|
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|
148
+
142
149
  next if page.size.zero? # Needed for auto_pagination
143
150
 
144
151
  page.each do |item|
@@ -148,7 +155,9 @@ def github(user, repo)
148
155
 
149
156
  rows << [
150
157
  "#{user}/#{repo}",
151
- item.pull_request ? TYPE_PR : TYPE_ISSUE,
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,
152
161
  item.number,
153
162
  item.user.login,
154
163
  item.title,
@@ -184,10 +193,18 @@ def gitlab(user, repo)
184
193
 
185
194
  # Do we care about this differing in output?
186
195
  state = $filter == "open" ? "opened" : $filter
196
+ options = {
197
+ :milestone => $milestone,
198
+ :labels => $labels,
199
+ :state => state
200
+ }
201
+
202
+ # If assignee_id is nil an error is raised
203
+ options[:assignee_id] = $assignee if $assignee
187
204
 
188
205
  $gitlab ||= Gitlab.client(:auth_token => $token, :endpoint => $endpoint || "https://gitlab.com/api/v4")
189
206
  methods.each do |method|
190
- $gitlab.public_send(method, "#{user}/#{repo}", :state => state).auto_paginate do |item|
207
+ $gitlab.public_send(method, "#{user}/#{repo}", options).auto_paginate do |item|
191
208
  next if skip_user?(item.author.username)
192
209
 
193
210
  rows << [
@@ -239,13 +256,14 @@ $exclude_users = []
239
256
  $include_users = []
240
257
  $export = "all"
241
258
  $endpoint = nil
259
+ $milestone = $labels = $assignee = nil
242
260
  $filter = "open"
243
261
  $provider = ENV["EPR_SERVICE"] || SERVICES[0]
244
262
  $token = lookup_token
245
263
  $body = false
246
264
 
247
265
  parser = OptionParser.new do |opts|
248
- opts.banner = "usage: #{File.basename($0)} [-bhv] [-e url] [-s state] [-t token] [-c user1,user2...] user/repo1 [user/repo2...]"
266
+ opts.banner = "usage: #{File.basename($0)} [options] user/repo1 [user/repo2...]"
249
267
 
250
268
  opts.on "-b", "--body", "Include the issue/pr body description in the output (GitHub only)" do
251
269
  $body = true
@@ -260,6 +278,18 @@ parser = OptionParser.new do |opts|
260
278
  $endpoint = url
261
279
  end
262
280
 
281
+ opts.on "-m", "--milestone=WHAT", "Export items assigned to the given milestone (GitHub/GitLab only)" do |m|
282
+ $milestone = m
283
+ end
284
+
285
+ opts.on "-a", "--assignee=USER", "Export items assigned to the given user (GitHub/GitLab only)" do |a|
286
+ $assignee = a
287
+ end
288
+
289
+ opts.on "-l", "--labels=LABEL(S)", "Export items with the given label(s) (GitHub/GitLab only)" do |l|
290
+ $labels = l
291
+ end
292
+
263
293
  opts.on "-h", "--help", "Show this message" do
264
294
  puts opts
265
295
  exit
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.2.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Skye Shaw
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-30 00:00:00.000000000 Z
11
+ date: 2021-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api