tractive 1.0.3 → 1.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d01e25bb5de4180b95349f37e698b9717900155092fe35e43b293d9192bef63
4
- data.tar.gz: 0a7fe333d0b26b440ddd5c0e9b2e6728a58da011080a33094ae0c7cf4e2254fe
3
+ metadata.gz: 55fc3cea20d6e9afb060ab67f70582da9e5940a58b8b5c3a2e8e52612a2f3c8b
4
+ data.tar.gz: 6b86875665351d16687fdc2c12dfca715fb7ec340c2d4d2e7f9fc98ecd7df460
5
5
  SHA512:
6
- metadata.gz: 1be7e6bf606c4482e7f04ae4b752ebaa483618a7831326e0862ddc70919c5480963860468691981a7a0c562569b18071c4c4b977b1ca2cdf83543ae898181aa1
7
- data.tar.gz: 9afb81d65732dac50a9285823ab68305811e4a081af14119eb2f93fc9fb3554a0cef45d1342354decdb56a60d755caa97445030fbbe3545bced627ede70b9ae3
6
+ metadata.gz: 0f584eaf4348c98152368e9dfbd38090b136e52ac334f1755f5fda6b944a374775ef97acab214aa87a8a2228f86a1363e8a7230e6851760517a40449f3424572
7
+ data.tar.gz: 8fe4530ec8f978e9742c9f7e6f1b06c1b2ea17efc6a25f4c9db497dffb26733b267b6e4a2d3b079f99ea7b7af9e3b39e4c55bc58c7ca763b1e28cbbbcac9560c
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ Gemfile.lock
data/.rubocop.yml CHANGED
@@ -25,6 +25,9 @@ Style/Documentation:
25
25
  Style/GlobalVars:
26
26
  Enabled: false
27
27
 
28
+ Style/HashTransformKeys:
29
+ Enabled: false
30
+
28
31
  Metrics/AbcSize:
29
32
  Enabled: false
30
33
 
data/README.adoc CHANGED
@@ -297,6 +297,8 @@ trac:
297
297
  ticketbaseurl: https://example.org/trac/foobar/ticket
298
298
  ----
299
299
 
300
+ `ticketbaseurl:`::: The Trac Url which will be added in Github issues. A link will be added in the footer of Github issue to link it to Trac ticket.
301
+
300
302
  [[config-github]]
301
303
  ==== GitHub configuration
302
304
 
@@ -385,25 +387,55 @@ The pattern of a mapping is like:
385
387
  +
386
388
  [source,yaml]
387
389
  ----
388
- blocker: '#blocker'
389
- critical: '#critical'
390
- major: '#major'
391
- medium: '#medium'
392
- minor: '#minor'
393
- trivial: '#easy'
394
- waiting: '#pending'
395
- n/a:
390
+ trivial:
391
+ name: trivial
392
+ color: ff0000
393
+ major:
394
+ name: major
395
+ color: b44647
396
+ minor:
397
+ name: minor
398
+ color: f7347a
399
+ medium:
400
+ name: medium
401
+ color: f3c77c
396
402
  ----
397
403
 
398
404
  `priority:`::: Priority of the Trac ticket.
399
405
  +
400
406
  [source,yaml]
401
407
  ----
402
- Low: '@low'
403
- High: '@high'
408
+ Low:
409
+ name: low
410
+ color: 22dd00
411
+ High:
412
+ name: high
413
+ color: ff0000
404
414
  ----
405
415
 
406
416
 
417
+ `tracstate:`::: Status of the Trac ticket.
418
+ +
419
+ [source,yaml]
420
+ ----
421
+ accepted:
422
+ name: accepted
423
+ color: 22dd00
424
+ assigned:
425
+ name: assigned
426
+ color: aadd88
427
+ closed:
428
+ name: closed
429
+ color: ee00aa
430
+ new:
431
+ name: new
432
+ color:
433
+ ----
434
+
435
+
436
+ NOTE: As `severity`, `priority` and `tracstate` are converted into `labels` on github so there is an option to specify the `color` for those labels.
437
+
438
+
407
439
  ==== User mapping
408
440
 
409
441
  `users:`:: a one-to-one mapping between Trac usernames or email addresses to
@@ -412,7 +444,8 @@ GitHub usernames for users, in the following pattern:
412
444
  [source,yaml]
413
445
  ----
414
446
  users:
415
- - email: {Trac email or username}
447
+ {Trac email or username}:
448
+ email: {Github email}
416
449
  name: {name of the person}
417
450
  username: {username on GitHub}
418
451
  ...
@@ -423,10 +456,12 @@ EXAMPLE:
423
456
  [source,yaml]
424
457
  ----
425
458
  users:
426
- - email: matthew@example.org
459
+ matthew@gmail.org:
460
+ email: matthew@example.org
427
461
  name: Matthew
428
462
  username: example-matt
429
- - email: valencia
463
+ valencia:
464
+ email: valencia
430
465
  name: Valencia
431
466
  username: example-vale
432
467
  ----
@@ -434,7 +469,8 @@ users:
434
469
  If you don't want to map a user, you can just leave the `username` empty like below:
435
470
  ----
436
471
  users:
437
- - email: matthew@example.org
472
+ matthew@gmail.org:
473
+ email: matthew@example.org
438
474
  name: Matthew
439
475
  username:
440
476
  ----
data/config.example.yaml CHANGED
@@ -54,14 +54,38 @@ labels:
54
54
 
55
55
  # less useful, but also possible:
56
56
  priority:
57
- Low: '@low'
58
- High: '@high'
57
+ Low:
58
+ name: low
59
+ color: 22dd00
60
+ High:
61
+ name: high
62
+ color: ff0000
59
63
  severity:
60
- blocker: '#high'
61
- critical: '#critical'
62
- major: '#major'
63
- minor: '#minor'
64
- trivial: '#trivial'
64
+ trivial:
65
+ name: trivial
66
+ color: ff0000
67
+ major:
68
+ name: major
69
+ color: b44647
70
+ minor:
71
+ name: minor
72
+ color: f7347a
73
+ medium:
74
+ name: medium
75
+ color: f3c77c
76
+ tracstate:
77
+ accepted:
78
+ name: accepted
79
+ color: 22dd00
80
+ assigned:
81
+ name: assigned
82
+ color: aadd88
83
+ closed:
84
+ name: closed
85
+ color: ee00aa
86
+ new:
87
+ name: new
88
+ color:
65
89
  version:
66
90
  '1.3': v1.3
67
91
  '1.4': v1.4
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GithubApi
4
+ class Client
5
+ module Labels
6
+ def list_labels(repo, params = {})
7
+ JSON.parse(
8
+ RestClient.get(
9
+ "https://api.github.com/repos/#{repo}/labels",
10
+ {
11
+ "Authorization" => "token #{@token}",
12
+ params: params
13
+ }
14
+ )
15
+ )
16
+ end
17
+ alias labels list_labels
18
+
19
+ def create_label(repo, params)
20
+ JSON.parse(
21
+ RestClient.post(
22
+ "https://api.github.com/repos/#{repo}/labels",
23
+ params.to_json,
24
+ {
25
+ "Authorization" => "token #{@token}",
26
+ "Accept" => "application/vnd.github.v3+json"
27
+ }
28
+ )
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "client/issues"
4
+ require_relative "client/labels"
4
5
  require_relative "client/milestones"
5
6
 
6
7
  # Service to perform github actions
7
8
  module GithubApi
8
9
  class Client
9
10
  include GithubApi::Client::Issues
11
+ include GithubApi::Client::Labels
10
12
  include GithubApi::Client::Milestones
11
13
 
12
14
  def initialize(options = {})
data/lib/tractive/info.rb CHANGED
@@ -34,11 +34,11 @@ module Tractive
34
34
  "milestones" => milestones,
35
35
  "labels" => {
36
36
  "type" => Utilities.make_hash("type_", types),
37
- "component" => Utilities.make_hash("component_", components),
38
37
  "resolution" => Utilities.make_hash("resolution_", resolutions),
39
- "severity" => Utilities.make_hash("severity", severity),
40
- "priority" => Utilities.make_hash("priority_", priorities),
41
- "tracstate" => Utilities.make_hash("tracstate_", tracstates)
38
+ "component" => Utilities.make_each_hash(components, %w[name color], "component: "),
39
+ "severity" => Utilities.make_each_hash(severity, %w[name color]),
40
+ "priority" => Utilities.make_each_hash(priorities, %w[name color]),
41
+ "tracstate" => Utilities.make_each_hash(tracstates, %w[name color])
42
42
  }
43
43
  }
44
44
  end
data/lib/tractive/main.rb CHANGED
@@ -8,9 +8,7 @@ module Tractive
8
8
  @opts = opts
9
9
  @cfg = YAML.load_file(@opts[:config])
10
10
 
11
- @cfg["users"] = @cfg["users"].map { |user| [user["email"], user["username"]] }.to_h
12
-
13
- Tractive::Utilities.setup_logger(output_stream: @opts[:log_file] || $stderr, verbose: @opts[:verbose])
11
+ Tractive::Utilities.setup_logger(output_stream: @opts[:logfile] || $stderr, verbose: @opts[:verbose])
14
12
  @db = Tractive::Utilities.setup_db!(@cfg["trac"]["database"])
15
13
  rescue Sequel::DatabaseConnectionError, Sequel::AdapterNotFound, URI::InvalidURIError, Sequel::DatabaseError => e
16
14
  $logger.error e.message
@@ -6,7 +6,7 @@ module Migrator
6
6
  def initialize(args)
7
7
  @tracticketbaseurl = args[:cfg]["trac"]["ticketbaseurl"]
8
8
  @attachurl = args[:opts][:attachurl] || args[:cfg].dig("attachments", "url")
9
- @changeset_base_url = args[:cfg]["trac"]["changeset_base_url"]
9
+ @changeset_base_url = args[:cfg]["trac"]["changeset_base_url"] || ""
10
10
  @singlepost = args[:opts][:singlepost]
11
11
  @labels_cfg = args[:cfg]["labels"].transform_values(&:to_h)
12
12
  @milestonesfromtrac = args[:cfg]["milestones"]
@@ -15,11 +15,16 @@ module Migrator
15
15
  @repo = args[:cfg]["github"]["repo"]
16
16
  @client = GithubApi::Client.new(access_token: args[:cfg]["github"]["token"])
17
17
  @wiki_attachments_url = args[:cfg]["trac"]["wiki_attachments_url"]
18
+ @revmap_file_path = args[:opts][:revmapfile] || args[:cfg]["revmap_path"]
18
19
 
19
20
  load_milestone_map
21
+ create_labels_on_github(@labels_cfg["severity"].values)
22
+ create_labels_on_github(@labels_cfg["priority"].values)
23
+ create_labels_on_github(@labels_cfg["tracstate"].values)
24
+ create_labels_on_github(@labels_cfg["component"].values)
20
25
 
21
26
  @uri_parser = URI::Parser.new
22
- @twf_to_markdown = Migrator::Converter::TwfToMarkdown.new(@tracticketbaseurl, @attachurl, @changeset_base_url, @wiki_attachments_url)
27
+ @twf_to_markdown = Migrator::Converter::TwfToMarkdown.new(@tracticketbaseurl, @attachurl, @changeset_base_url, @wiki_attachments_url, @revmap_file_path)
23
28
  end
24
29
 
25
30
  def compose(ticket)
@@ -74,7 +79,6 @@ module Migrator
74
79
 
75
80
  badges = Set[]
76
81
 
77
- badges.add(@labels_cfg.fetch("component", {})[ticket[:component]])
78
82
  badges.add(@labels_cfg.fetch("type", {})[ticket[:type]])
79
83
  badges.add(@labels_cfg.fetch("resolution", {})[ticket[:resolution]])
80
84
  badges.add(@labels_cfg.fetch("version", {})[ticket[:version]])
@@ -82,6 +86,8 @@ module Migrator
82
86
  labels.add(@labels_cfg.fetch("severity", {})[ticket[:severity]])
83
87
  labels.add(@labels_cfg.fetch("priority", {})[ticket[:priority]])
84
88
  labels.add(@labels_cfg.fetch("tracstate", {})[ticket[:status]])
89
+ labels.add(@labels_cfg.fetch("component", {})[ticket[:component]])
90
+
85
91
  labels.delete(nil)
86
92
 
87
93
  keywords = ticket[:keywords]
@@ -97,7 +103,7 @@ module Migrator
97
103
  milestone = @milestonemap[ticket[:milestone]]
98
104
 
99
105
  # compute footer
100
- footer = "_Issue migrated from trac:#{ticket[:id]} at #{Time.now}_"
106
+ footer = "_Issue migrated from #{trac_ticket_link(ticket)} at #{Time.now}_"
101
107
 
102
108
  # compute badgetabe
103
109
  #
@@ -116,7 +122,8 @@ module Migrator
116
122
  # compose body
117
123
  body = [badgetable, body, footer].join("\n\n___\n")
118
124
 
119
- labels.add("owner:#{github_assignee}")
125
+ labels.add("name" => "owner:#{github_assignee}") unless github_assignee.nil? || github_assignee.empty?
126
+ labels = labels.map { |label| label["name"] }
120
127
 
121
128
  issue = {
122
129
  "title" => ticket[:summary],
@@ -129,7 +136,7 @@ module Migrator
129
136
 
130
137
  if @users.key?(ticket[:owner])
131
138
  owner = trac_mail(ticket[:owner])
132
- github_owner = @users[owner]
139
+ github_owner = @users[owner]["username"]
133
140
  $logger.debug("..owner in trac: #{owner}")
134
141
  $logger.debug("..assignee in GitHub: #{github_owner}")
135
142
  issue["assignee"] = github_owner
@@ -155,11 +162,11 @@ module Migrator
155
162
  private
156
163
 
157
164
  def map_user(user)
158
- @users[user] || user
165
+ @users.fetch(user, {})["email"] || user
159
166
  end
160
167
 
161
168
  def map_assignee(user)
162
- @users[user]
169
+ @users.fetch(user, {})["email"]
163
170
  end
164
171
 
165
172
  def load_milestone_map
@@ -168,9 +175,9 @@ module Migrator
168
175
  newmilestonekeys = @milestonesfromtrac.keys - @milestonemap.keys
169
176
 
170
177
  newmilestonekeys.each do |milestonelabel|
171
- milestone = {
178
+ milestone = {
172
179
  "title" => milestonelabel.to_s,
173
- "state" => @milestonesfromtrac[milestonelabel][:completed].nil? ? "open" : "closed",
180
+ "state" => @milestonesfromtrac[milestonelabel][:completed].to_i.zero? ? "open" : "closed",
174
181
  "description" => @milestonesfromtrac[milestonelabel][:description] || "no description in trac",
175
182
  "due_on" => "2012-10-09T23:39:01Z"
176
183
  }
@@ -194,6 +201,30 @@ module Migrator
194
201
  nil
195
202
  end
196
203
 
204
+ def create_labels_on_github(labels)
205
+ return if labels.nil? || labels.empty?
206
+
207
+ page = 1
208
+ existing_labels = []
209
+ result = @client.labels(@repo, per_page: 100, page: page).map { |label| label["name"] }
210
+
211
+ until result.empty?
212
+ existing_labels += result
213
+ page += 1
214
+ result = @client.labels(@repo, per_page: 100, page: page).map { |label| label["name"] }
215
+ end
216
+
217
+ new_labels = labels.reject { |label| existing_labels.include?(label["name"]&.strip) }
218
+
219
+ new_labels.each do |label|
220
+ params = { name: label["name"] }
221
+ params["color"] = label["color"] unless label["color"].nil?
222
+
223
+ @client.create_label(@repo, params)
224
+ $logger.info("Created label: #{label["name"]}")
225
+ end
226
+ end
227
+
197
228
  def ticket_change(append, meta)
198
229
  # kind
199
230
  kind = if meta[:ticket]
@@ -243,7 +274,7 @@ module Migrator
243
274
  changeset = body.match(/In \[changeset:"(\d+)/).to_a[1]
244
275
  text += if changeset
245
276
  # changesethash = @revmap[changeset]
246
- "_committed #{Tractive::Utilities.map_changeset(changeset)}_"
277
+ "_committed #{Tractive::Utilities.map_changeset(changeset, @revmap, @changeset_base_url)}_"
247
278
  else
248
279
  "_commented_\n\n"
249
280
  end
@@ -302,6 +333,12 @@ module Migrator
302
333
  !(%w[keywords cc reporter version].include?(kind) ||
303
334
  (kind == "comment" && (newvalue.nil? || newvalue.lstrip.empty?)))
304
335
  end
336
+
337
+ def trac_ticket_link(ticket)
338
+ return "trac:#{ticket[:id]}" unless @tracticketbaseurl
339
+
340
+ "[trac:#{ticket[:id]}](#{@tracticketbaseurl}/#{ticket[:id]})"
341
+ end
305
342
  end
306
343
  end
307
344
  end
@@ -4,11 +4,12 @@ module Migrator
4
4
  module Converter
5
5
  # twf => Trac wiki format
6
6
  class TwfToMarkdown
7
- def initialize(base_url, attach_url, changeset_base_url, wiki_attachments_url)
7
+ def initialize(base_url, attach_url, changeset_base_url, wiki_attachments_url, revmap_file_path)
8
8
  @base_url = base_url
9
9
  @attach_url = attach_url
10
10
  @changeset_base_url = changeset_base_url
11
11
  @wiki_attachments_url = wiki_attachments_url
12
+ @revmap = load_revmap_file(revmap_file_path)
12
13
  end
13
14
 
14
15
  def convert(str)
@@ -26,6 +27,24 @@ module Migrator
26
27
 
27
28
  private
28
29
 
30
+ def load_revmap_file(revmapfile)
31
+ # load revision mapping file and convert it to a hash.
32
+ # This revmap file allows to map between SVN revisions (rXXXX)
33
+ # and git commit sha1 hashes.
34
+ revmap = nil
35
+ if revmapfile
36
+ File.open(revmapfile, "r:UTF-8") do |f|
37
+ $logger.info("loading revision map #{revmapfile}")
38
+
39
+ revmap = f.each_line
40
+ .map { |line| line.split(/\s+\|\s+/) }
41
+ .map { |rev, sha| [rev.gsub(/^r/, ""), sha] }.to_h # remove leading "r" if present
42
+ end
43
+ end
44
+
45
+ revmap
46
+ end
47
+
29
48
  # CommitTicketReference
30
49
  def convert_ticket_reference(str)
31
50
  str.gsub!(/\{\{\{\n(#!CommitTicketReference .+?)\}\}\}/m, '\1')
@@ -72,9 +91,10 @@ module Migrator
72
91
  str.gsub!(%r{#{Regexp.quote(changeset_base_url)}/(\d+)/?}, '[changeset:\1]') if changeset_base_url
73
92
  str.gsub!(/\[changeset:"r(\d+)".*\]/, '[changeset:\1]')
74
93
  str.gsub!(/\[changeset:r(\d+)\]/, '[changeset:\1]')
75
- str.gsub!(/\br(\d+)\b/) { Tractive::Utilities.map_changeset(Regexp.last_match[1]) }
76
- str.gsub!(/\[changeset:"(\d+)".*\]/) { Tractive::Utilities.map_changeset(Regexp.last_match[1]) }
77
- str.gsub!(/\[changeset:"(\d+).*\]/) { Tractive::Utilities.map_changeset(Regexp.last_match[1]) }
94
+ str.gsub!(/\br(\d+)\b/) { Tractive::Utilities.map_changeset(Regexp.last_match[1], @revmap, changeset_base_url) }
95
+ str.gsub!(/\[changeset:"(\d+)".*\]/) { Tractive::Utilities.map_changeset(Regexp.last_match[1], @revmap, changeset_base_url) }
96
+ str.gsub!(/\[changeset:(\d+).*\]/) { Tractive::Utilities.map_changeset(Regexp.last_match[1], @revmap, changeset_base_url) }
97
+ str.gsub!(/\[(\d+)\]/) { Tractive::Utilities.map_changeset(Regexp.last_match[1], @revmap, changeset_base_url) }
78
98
  end
79
99
 
80
100
  # Font styles
@@ -58,7 +58,7 @@ module Migrator
58
58
  @dry_run = args[:opts][:dryrun]
59
59
  @output_file = File.new(dry_run_output_file, "w+")
60
60
  @delimiter = "{"
61
- @revmap = load_revmap_file(args[:opts][:revmapfile] || args[:cfg]["revmapfile"])
61
+ @revmap = load_revmap_file(args[:opts][:revmapfile] || args[:cfg]["revmap_path"])
62
62
  @safetychecks = safetychecks
63
63
  @start_ticket = (start_ticket || (@last_created_issue + 1)).to_i
64
64
  @filter_closed = filter_closed
@@ -87,7 +87,7 @@ module Migrator
87
87
 
88
88
  revmap = f.each_line
89
89
  .map { |line| line.split(/\s+\|\s+/) }
90
- .map { |rev, sha, _| [rev.gsub(/^r/, ""), sha] }.to_h # remove leading "r" if present
90
+ .map { |rev, sha| [rev.gsub(/^r/, ""), sha] }.to_h # remove leading "r" if present
91
91
  end
92
92
  end
93
93
 
@@ -19,8 +19,11 @@ module Tractive
19
19
  def filter_column(options)
20
20
  return self if options.nil? || options.values.compact.empty?
21
21
 
22
- if options[:operator].downcase == "like"
22
+ case options[:operator].downcase
23
+ when "like"
23
24
  where { Sequel.like(options[:column_name].to_sym, options[:column_value]) }
25
+ when "not like"
26
+ where { ~Sequel.like(options[:column_name].to_sym, options[:column_value]) }
24
27
  else
25
28
  where { Sequel.lit("#{options[:column_name]} #{options[:operator]} '#{options[:column_value]}'") }
26
29
  end
@@ -7,11 +7,11 @@ module Tractive
7
7
  array.map { |i| [i, "#{prefix}#{i}"] }.to_h
8
8
  end
9
9
 
10
- def make_each_hash(values, keys)
10
+ def make_each_hash(values, keys, prefix = "")
11
11
  values.map do |value|
12
12
  value = [value] unless value.is_a?(Array)
13
- keys.zip(value).to_h
14
- end
13
+ [value[0], keys.zip(value.map { |v| "#{prefix}#{v}" }).to_h]
14
+ end.to_h
15
15
  end
16
16
 
17
17
  def setup_db!(db_url)
@@ -45,11 +45,13 @@ module Tractive
45
45
  end
46
46
 
47
47
  # returns the git commit hash for a specified revision (using revmap hash)
48
- def map_changeset(str)
49
- if @revmap&.key?(str)
50
- "[r#{str}](../commit/#{@revmap[str]}) #{@revmap[str]}"
48
+ def map_changeset(str, revmap, changeset_base_url = "")
49
+ if revmap&.key?(str)
50
+ base_url = changeset_base_url
51
+ base_url += "/" if base_url[-1] && base_url[-1] != "/"
52
+ "#{base_url}#{revmap[str].strip}"
51
53
  else
52
- str
54
+ "[#{str}]"
53
55
  end
54
56
  end
55
57
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tractive
4
- VERSION = "1.0.3"
4
+ VERSION = "1.0.7"
5
5
  end
data/tractive.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.metadata["homepage_uri"] = spec.homepage
17
17
  spec.metadata["source_code_uri"] = "https://github.com/ietf-ribose/tractive"
18
18
  spec.metadata["changelog_uri"] = "https://github.com/ietf-ribose/tractive"
19
+ spec.metadata["rubygems_mfa_required"] = "true"
19
20
 
20
21
  # Specify which files should be added to the gem when it is released.
21
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tractive
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-15 00:00:00.000000000 Z
11
+ date: 2021-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -124,7 +124,6 @@ files:
124
124
  - ".ruby-version"
125
125
  - CODE_OF_CONDUCT.md
126
126
  - Gemfile
127
- - Gemfile.lock
128
127
  - LICENSE.md
129
128
  - README.adoc
130
129
  - Rakefile
@@ -140,6 +139,7 @@ files:
140
139
  - lib/tractive/github_api.rb
141
140
  - lib/tractive/github_api/client.rb
142
141
  - lib/tractive/github_api/client/issues.rb
142
+ - lib/tractive/github_api/client/labels.rb
143
143
  - lib/tractive/github_api/client/milestones.rb
144
144
  - lib/tractive/graceful_quit.rb
145
145
  - lib/tractive/info.rb
@@ -170,6 +170,7 @@ metadata:
170
170
  homepage_uri: https://github.com/ietf-ribose/tractive
171
171
  source_code_uri: https://github.com/ietf-ribose/tractive
172
172
  changelog_uri: https://github.com/ietf-ribose/tractive
173
+ rubygems_mfa_required: 'true'
173
174
  post_install_message:
174
175
  rdoc_options: []
175
176
  require_paths:
data/Gemfile.lock DELETED
@@ -1,100 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- tractive (1.0.3)
5
- mysql2
6
- ox
7
- rest-client
8
- sequel
9
- sqlite3
10
- thor
11
-
12
- GEM
13
- remote: https://rubygems.org/
14
- specs:
15
- addressable (2.8.0)
16
- public_suffix (>= 2.0.2, < 5.0)
17
- ast (2.4.2)
18
- coderay (1.1.3)
19
- crack (0.4.5)
20
- rexml
21
- diff-lcs (1.4.4)
22
- domain_name (0.5.20190701)
23
- unf (>= 0.0.5, < 1.0.0)
24
- hashdiff (1.0.1)
25
- http-accept (1.7.0)
26
- http-cookie (1.0.4)
27
- domain_name (~> 0.5)
28
- method_source (1.0.0)
29
- mime-types (3.3.1)
30
- mime-types-data (~> 3.2015)
31
- mime-types-data (3.2021.0901)
32
- mysql2 (0.5.3)
33
- netrc (0.11.0)
34
- ox (2.14.5)
35
- parallel (1.21.0)
36
- parser (3.0.2.0)
37
- ast (~> 2.4.1)
38
- pry (0.14.1)
39
- coderay (~> 1.1)
40
- method_source (~> 1.0)
41
- public_suffix (4.0.6)
42
- rainbow (3.0.0)
43
- rake (13.0.6)
44
- regexp_parser (2.1.1)
45
- rest-client (2.1.0)
46
- http-accept (>= 1.7.0, < 2.0)
47
- http-cookie (>= 1.0.2, < 2.0)
48
- mime-types (>= 1.16, < 4.0)
49
- netrc (~> 0.8)
50
- rexml (3.2.5)
51
- rspec (3.10.0)
52
- rspec-core (~> 3.10.0)
53
- rspec-expectations (~> 3.10.0)
54
- rspec-mocks (~> 3.10.0)
55
- rspec-core (3.10.1)
56
- rspec-support (~> 3.10.0)
57
- rspec-expectations (3.10.1)
58
- diff-lcs (>= 1.2.0, < 2.0)
59
- rspec-support (~> 3.10.0)
60
- rspec-mocks (3.10.2)
61
- diff-lcs (>= 1.2.0, < 2.0)
62
- rspec-support (~> 3.10.0)
63
- rspec-support (3.10.2)
64
- rubocop (1.22.1)
65
- parallel (~> 1.10)
66
- parser (>= 3.0.0.0)
67
- rainbow (>= 2.2.2, < 4.0)
68
- regexp_parser (>= 1.8, < 3.0)
69
- rexml
70
- rubocop-ast (>= 1.12.0, < 2.0)
71
- ruby-progressbar (~> 1.7)
72
- unicode-display_width (>= 1.4.0, < 3.0)
73
- rubocop-ast (1.12.0)
74
- parser (>= 3.0.1.1)
75
- ruby-progressbar (1.11.0)
76
- sequel (5.49.0)
77
- sqlite3 (1.4.2)
78
- thor (1.1.0)
79
- unf (0.1.4)
80
- unf_ext
81
- unf_ext (0.0.8)
82
- unicode-display_width (2.1.0)
83
- webmock (3.14.0)
84
- addressable (>= 2.8.0)
85
- crack (>= 0.3.2)
86
- hashdiff (>= 0.4.0, < 2.0.0)
87
-
88
- PLATFORMS
89
- ruby
90
-
91
- DEPENDENCIES
92
- pry
93
- rake (~> 13.0)
94
- rspec (~> 3.0)
95
- rubocop (~> 1.7)
96
- tractive!
97
- webmock (~> 3.14)
98
-
99
- BUNDLED WITH
100
- 2.1.2