rubygems-update 3.2.20 → 3.2.24

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/Manifest.txt +0 -1
  4. data/bundler/CHANGELOG.md +56 -0
  5. data/bundler/lib/bundler.rb +5 -6
  6. data/bundler/lib/bundler/build_metadata.rb +2 -2
  7. data/bundler/lib/bundler/cli.rb +1 -0
  8. data/bundler/lib/bundler/cli/doctor.rb +11 -1
  9. data/bundler/lib/bundler/cli/install.rb +7 -8
  10. data/bundler/lib/bundler/cli/lock.rb +5 -1
  11. data/bundler/lib/bundler/cli/update.rb +8 -3
  12. data/bundler/lib/bundler/current_ruby.rb +4 -4
  13. data/bundler/lib/bundler/definition.rb +46 -85
  14. data/bundler/lib/bundler/dsl.rb +11 -22
  15. data/bundler/lib/bundler/feature_flag.rb +0 -2
  16. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  17. data/bundler/lib/bundler/fetcher/downloader.rb +1 -2
  18. data/bundler/lib/bundler/index.rb +1 -5
  19. data/bundler/lib/bundler/installer.rb +5 -12
  20. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  21. data/bundler/lib/bundler/lockfile_parser.rb +2 -20
  22. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  24. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-config.1 +1 -4
  28. data/bundler/lib/bundler/man/bundle-config.1.ronn +0 -3
  29. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-update.1 +4 -4
  45. data/bundler/lib/bundler/man/bundle-update.1.ronn +3 -3
  46. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle.1 +1 -1
  48. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  49. data/bundler/lib/bundler/plugin.rb +2 -0
  50. data/bundler/lib/bundler/plugin/index.rb +4 -1
  51. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  52. data/bundler/lib/bundler/resolver.rb +3 -1
  53. data/bundler/lib/bundler/rubygems_ext.rb +22 -6
  54. data/bundler/lib/bundler/runtime.rb +1 -3
  55. data/bundler/lib/bundler/settings.rb +9 -8
  56. data/bundler/lib/bundler/source/rubygems.rb +4 -17
  57. data/bundler/lib/bundler/source_list.rb +40 -21
  58. data/bundler/lib/bundler/spec_set.rb +5 -10
  59. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  60. data/bundler/lib/bundler/version.rb +1 -1
  61. data/lib/rubygems.rb +1 -1
  62. data/lib/rubygems/commands/cert_command.rb +42 -38
  63. data/lib/rubygems/config_file.rb +1 -1
  64. data/lib/rubygems/gemcutter_utilities.rb +12 -4
  65. data/lib/rubygems/package/io_source.rb +4 -0
  66. data/lib/rubygems/request.rb +1 -1
  67. data/lib/rubygems/specification.rb +6 -2
  68. data/lib/rubygems/uninstaller.rb +36 -5
  69. data/lib/rubygems/util/licenses.rb +107 -2
  70. data/rubygems-update.gemspec +1 -1
  71. data/setup.rb +1 -2
  72. data/test/rubygems/test_gem_commands_push_command.rb +0 -5
  73. data/test/rubygems/test_gem_commands_setup_command.rb +3 -3
  74. data/test/rubygems/test_gem_commands_signin_command.rb +7 -0
  75. data/test/rubygems/test_gem_ext_rake_builder.rb +2 -0
  76. data/test/rubygems/test_gem_gemcutter_utilities.rb +12 -6
  77. data/test/rubygems/test_gem_installer.rb +1 -1
  78. data/test/rubygems/test_gem_package.rb +8 -1
  79. data/test/rubygems/test_gem_server.rb +4 -4
  80. data/test/rubygems/test_gem_uninstaller.rb +9 -2
  81. data/test/rubygems/test_require.rb +0 -2
  82. metadata +3 -4
  83. data/Rakefile +0 -396
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  <%- end -%>
17
17
  spec.required_ruby_version = ">= <%= config[:required_ruby_version] %>"
18
18
 
19
- spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
19
+ spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
20
20
 
21
21
  spec.metadata["homepage_uri"] = spec.homepage
22
22
  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.2.20".freeze
4
+ VERSION = "2.2.24".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
data/lib/rubygems.rb CHANGED
@@ -8,7 +8,7 @@
8
8
  require 'rbconfig'
9
9
 
10
10
  module Gem
11
- VERSION = "3.2.20".freeze
11
+ VERSION = "3.2.24".freeze
12
12
  end
13
13
 
14
14
  # Must be first since it unloads the prelude from 1.9.2
@@ -7,37 +7,9 @@ class Gem::Commands::CertCommand < Gem::Command
7
7
  super 'cert', 'Manage RubyGems certificates and signing settings',
8
8
  :add => [], :remove => [], :list => [], :build => [], :sign => []
9
9
 
10
- OptionParser.accept OpenSSL::X509::Certificate do |certificate_file|
11
- begin
12
- certificate = OpenSSL::X509::Certificate.new File.read certificate_file
13
- rescue Errno::ENOENT
14
- raise OptionParser::InvalidArgument, "#{certificate_file}: does not exist"
15
- rescue OpenSSL::X509::CertificateError
16
- raise OptionParser::InvalidArgument,
17
- "#{certificate_file}: invalid X509 certificate"
18
- end
19
- [certificate, certificate_file]
20
- end
21
-
22
- OptionParser.accept OpenSSL::PKey::RSA do |key_file|
23
- begin
24
- passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
25
- key = OpenSSL::PKey::RSA.new File.read(key_file), passphrase
26
- rescue Errno::ENOENT
27
- raise OptionParser::InvalidArgument, "#{key_file}: does not exist"
28
- rescue OpenSSL::PKey::RSAError
29
- raise OptionParser::InvalidArgument, "#{key_file}: invalid RSA key"
30
- end
31
-
32
- raise OptionParser::InvalidArgument,
33
- "#{key_file}: private key not found" unless key.private?
34
-
35
- key
36
- end
37
-
38
- add_option('-a', '--add CERT', OpenSSL::X509::Certificate,
39
- 'Add a trusted certificate.') do |(cert, _), options|
40
- options[:add] << cert
10
+ add_option('-a', '--add CERT',
11
+ 'Add a trusted certificate.') do |cert_file, options|
12
+ options[:add] << open_cert(cert_file)
41
13
  end
42
14
 
43
15
  add_option('-l', '--list [FILTER]',
@@ -60,15 +32,15 @@ class Gem::Commands::CertCommand < Gem::Command
60
32
  options[:build] << email_address
61
33
  end
62
34
 
63
- add_option('-C', '--certificate CERT', OpenSSL::X509::Certificate,
64
- 'Signing certificate for --sign') do |(cert, cert_file), options|
65
- options[:issuer_cert] = cert
35
+ add_option('-C', '--certificate CERT',
36
+ 'Signing certificate for --sign') do |cert_file, options|
37
+ options[:issuer_cert] = open_cert(cert_file)
66
38
  options[:issuer_cert_file] = cert_file
67
39
  end
68
40
 
69
- add_option('-K', '--private-key KEY', OpenSSL::PKey::RSA,
70
- 'Key for --sign or --build') do |key, options|
71
- options[:key] = key
41
+ add_option('-K', '--private-key KEY',
42
+ 'Key for --sign or --build') do |key_file, options|
43
+ options[:key] = open_private_key(key_file)
72
44
  end
73
45
 
74
46
  add_option('-s', '--sign CERT',
@@ -97,7 +69,39 @@ class Gem::Commands::CertCommand < Gem::Command
97
69
  say "Added '#{certificate.subject}'"
98
70
  end
99
71
 
72
+ def check_openssl
73
+ return if Gem::HAVE_OPENSSL
74
+
75
+ alert_error "OpenSSL library is required for the cert command"
76
+ terminate_interaction 1
77
+ end
78
+
79
+ def open_cert(certificate_file)
80
+ check_openssl
81
+ OpenSSL::X509::Certificate.new File.read certificate_file
82
+ rescue Errno::ENOENT
83
+ raise OptionParser::InvalidArgument, "#{certificate_file}: does not exist"
84
+ rescue OpenSSL::X509::CertificateError
85
+ raise OptionParser::InvalidArgument,
86
+ "#{certificate_file}: invalid X509 certificate"
87
+ end
88
+
89
+ def open_private_key(key_file)
90
+ check_openssl
91
+ passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
92
+ key = OpenSSL::PKey::RSA.new File.read(key_file), passphrase
93
+ raise OptionParser::InvalidArgument,
94
+ "#{key_file}: private key not found" unless key.private?
95
+ key
96
+ rescue Errno::ENOENT
97
+ raise OptionParser::InvalidArgument, "#{key_file}: does not exist"
98
+ rescue OpenSSL::PKey::RSAError
99
+ raise OptionParser::InvalidArgument, "#{key_file}: invalid RSA key"
100
+ end
101
+
100
102
  def execute
103
+ check_openssl
104
+
101
105
  options[:add].each do |certificate|
102
106
  add_certificate certificate
103
107
  end
@@ -311,4 +315,4 @@ For further reading on signing gems see `ri Gem::Security`.
311
315
  # It's simple, but is all we need
312
316
  email =~ /\A.+@.+\z/
313
317
  end
314
- end if Gem::HAVE_OPENSSL
318
+ end
@@ -320,7 +320,7 @@ if you believe they were disclosed to a third party.
320
320
  config = load_file(credentials_path).merge(host => api_key)
321
321
 
322
322
  dirname = File.dirname credentials_path
323
- Dir.mkdir(dirname) unless File.exist? dirname
323
+ FileUtils.mkdir_p(dirname) unless File.exist? dirname
324
324
 
325
325
  Gem.load_yaml
326
326
 
@@ -31,7 +31,8 @@ module Gem::GemcutterUtilities
31
31
 
32
32
  def add_otp_option
33
33
  add_option('--otp CODE',
34
- 'Digit code for multifactor authentication') do |value, options|
34
+ 'Digit code for multifactor authentication',
35
+ 'You can also use the environment variable GEM_HOST_OTP_CODE') do |value, options|
35
36
  options[:otp] = value
36
37
  end
37
38
  end
@@ -51,6 +52,13 @@ module Gem::GemcutterUtilities
51
52
  end
52
53
  end
53
54
 
55
+ ##
56
+ # The OTP code from the command options or from the user's configuration.
57
+
58
+ def otp
59
+ options[:otp] || ENV["GEM_HOST_OTP_CODE"]
60
+ end
61
+
54
62
  ##
55
63
  # The host to connect to either from the RUBYGEMS_HOST environment variable
56
64
  # or from the user's configuration
@@ -126,7 +134,7 @@ module Gem::GemcutterUtilities
126
134
  response = rubygems_api_request(:put, "api/v1/api_key",
127
135
  sign_in_host, scope: scope) do |request|
128
136
  request.basic_auth email, password
129
- request["OTP"] = options[:otp] if options[:otp]
137
+ request["OTP"] = otp if otp
130
138
  request.body = URI.encode_www_form({:api_key => api_key }.merge(update_scope_params))
131
139
  end
132
140
 
@@ -159,7 +167,7 @@ module Gem::GemcutterUtilities
159
167
  response = rubygems_api_request(:post, "api/v1/api_key",
160
168
  sign_in_host, scope: scope) do |request|
161
169
  request.basic_auth email, password
162
- request["OTP"] = options[:otp] if options[:otp]
170
+ request["OTP"] = otp if otp
163
171
  request.body = URI.encode_www_form({ name: key_name }.merge(scope_params))
164
172
  end
165
173
 
@@ -224,7 +232,7 @@ module Gem::GemcutterUtilities
224
232
  request_method = Net::HTTP.const_get method.to_s.capitalize
225
233
 
226
234
  Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
227
- req["OTP"] = options[:otp] if options[:otp]
235
+ req["OTP"] = otp if otp
228
236
  block.call(req)
229
237
  end
230
238
  end
@@ -32,10 +32,14 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
32
32
 
33
33
  def with_read_io
34
34
  yield io
35
+ ensure
36
+ io.rewind
35
37
  end
36
38
 
37
39
  def with_write_io
38
40
  yield io
41
+ ensure
42
+ io.rewind
39
43
  end
40
44
 
41
45
  def path
@@ -44,7 +44,7 @@ class Gem::Request
44
44
  end
45
45
 
46
46
  def self.configure_connection_for_https(connection, cert_files)
47
- raise Gem::Exception.new('OpenSSl is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources') unless Gem::HAVE_OPENSSL
47
+ raise Gem::Exception.new('OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources') unless Gem::HAVE_OPENSSL
48
48
 
49
49
  connection.use_ssl = true
50
50
  connection.verify_mode =
@@ -2421,7 +2421,6 @@ class Gem::Specification < Gem::BasicSpecification
2421
2421
  # still have their default values are omitted.
2422
2422
 
2423
2423
  def to_ruby
2424
- require_relative 'openssl'
2425
2424
  mark_version
2426
2425
  result = []
2427
2426
  result << "# -*- encoding: utf-8 -*-"
@@ -2455,16 +2454,21 @@ class Gem::Specification < Gem::BasicSpecification
2455
2454
  :has_rdoc,
2456
2455
  :default_executable,
2457
2456
  :metadata,
2457
+ :signing_key,
2458
2458
  ]
2459
2459
 
2460
2460
  @@attributes.each do |attr_name|
2461
2461
  next if handled.include? attr_name
2462
2462
  current_value = self.send(attr_name)
2463
2463
  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
2464
- result << " s.#{attr_name} = #{ruby_code current_value}" unless defined?(OpenSSL::PKey::RSA) && current_value.is_a?(OpenSSL::PKey::RSA)
2464
+ result << " s.#{attr_name} = #{ruby_code current_value}"
2465
2465
  end
2466
2466
  end
2467
2467
 
2468
+ if String === signing_key
2469
+ result << " s.signing_key = #{signing_key.dump}.freeze"
2470
+ end
2471
+
2468
2472
  if @installed_by_version
2469
2473
  result << nil
2470
2474
  result << " s.installed_by_version = \"#{Gem::VERSION}\" if s.respond_to? :installed_by_version"
@@ -70,6 +70,9 @@ class Gem::Uninstaller
70
70
  # only add user directory if install_dir is not set
71
71
  @user_install = false
72
72
  @user_install = options[:user_install] unless options[:install_dir]
73
+
74
+ # Optimization: populated during #uninstall
75
+ @default_specs_matching_uninstall_params = []
73
76
  end
74
77
 
75
78
  ##
@@ -98,10 +101,8 @@ class Gem::Uninstaller
98
101
  default_specs, list = list.partition do |spec|
99
102
  spec.default_gem?
100
103
  end
101
-
102
- default_specs.each do |default_spec|
103
- say "Gem #{default_spec.full_name} cannot be uninstalled because it is a default gem"
104
- end
104
+ warn_cannot_uninstall_default_gems(default_specs - list)
105
+ @default_specs_matching_uninstall_params = default_specs
105
106
 
106
107
  list, other_repo_specs = list.partition do |spec|
107
108
  @gem_home == spec.base_dir or
@@ -270,7 +271,7 @@ class Gem::Uninstaller
270
271
  end
271
272
 
272
273
  safe_delete { FileUtils.rm_r gemspec }
273
- say "Successfully uninstalled #{spec.full_name}"
274
+ announce_deletion_of(spec)
274
275
 
275
276
  Gem::Specification.reset
276
277
  end
@@ -373,4 +374,34 @@ class Gem::Uninstaller
373
374
 
374
375
  raise e
375
376
  end
377
+
378
+ private
379
+
380
+ def announce_deletion_of(spec)
381
+ name = spec.full_name
382
+ say "Successfully uninstalled #{name}"
383
+ if default_spec_matches?(spec)
384
+ say(
385
+ "There was both a regular copy and a default copy of #{name}. The " \
386
+ "regular copy was successfully uninstalled, but the default copy " \
387
+ "was left around because default gems can't be removed."
388
+ )
389
+ end
390
+ end
391
+
392
+ # @return true if the specs of any default gems are `==` to the given `spec`.
393
+ def default_spec_matches?(spec)
394
+ !default_specs_that_match(spec).empty?
395
+ end
396
+
397
+ # @return [Array] specs of default gems that are `==` to the given `spec`.
398
+ def default_specs_that_match(spec)
399
+ @default_specs_matching_uninstall_params.select {|default_spec| spec == default_spec }
400
+ end
401
+
402
+ def warn_cannot_uninstall_default_gems(specs)
403
+ specs.each do |spec|
404
+ say "Gem #{spec.full_name} cannot be uninstalled because it is a default gem"
405
+ end
406
+ end
376
407
  end
@@ -18,6 +18,8 @@ class Gem::Licenses
18
18
  AFL-2.1
19
19
  AFL-3.0
20
20
  AGPL-1.0
21
+ AGPL-1.0-only
22
+ AGPL-1.0-or-later
21
23
  AGPL-3.0
22
24
  AGPL-3.0-only
23
25
  AGPL-3.0-or-later
@@ -25,6 +27,7 @@ class Gem::Licenses
25
27
  AML
26
28
  AMPAS
27
29
  ANTLR-PD
30
+ ANTLR-PD-fallback
28
31
  APAFML
29
32
  APL-1.0
30
33
  APSL-1.0
@@ -48,29 +51,41 @@ class Gem::Licenses
48
51
  BSD-2-Clause-FreeBSD
49
52
  BSD-2-Clause-NetBSD
50
53
  BSD-2-Clause-Patent
54
+ BSD-2-Clause-Views
51
55
  BSD-3-Clause
52
56
  BSD-3-Clause-Attribution
53
57
  BSD-3-Clause-Clear
54
58
  BSD-3-Clause-LBNL
59
+ BSD-3-Clause-Modification
60
+ BSD-3-Clause-No-Military-License
55
61
  BSD-3-Clause-No-Nuclear-License
56
62
  BSD-3-Clause-No-Nuclear-License-2014
57
63
  BSD-3-Clause-No-Nuclear-Warranty
64
+ BSD-3-Clause-Open-MPI
58
65
  BSD-4-Clause
66
+ BSD-4-Clause-Shortened
59
67
  BSD-4-Clause-UC
60
68
  BSD-Protection
61
69
  BSD-Source-Code
62
70
  BSL-1.0
71
+ BUSL-1.1
63
72
  Bahyph
64
73
  Barr
65
74
  Beerware
66
75
  BitTorrent-1.0
67
76
  BitTorrent-1.1
77
+ BlueOak-1.0.0
68
78
  Borceux
79
+ C-UDA-1.0
80
+ CAL-1.0
81
+ CAL-1.0-Combined-Work-Exception
69
82
  CATOSL-1.1
70
83
  CC-BY-1.0
71
84
  CC-BY-2.0
72
85
  CC-BY-2.5
73
86
  CC-BY-3.0
87
+ CC-BY-3.0-AT
88
+ CC-BY-3.0-US
74
89
  CC-BY-4.0
75
90
  CC-BY-NC-1.0
76
91
  CC-BY-NC-2.0
@@ -81,6 +96,7 @@ class Gem::Licenses
81
96
  CC-BY-NC-ND-2.0
82
97
  CC-BY-NC-ND-2.5
83
98
  CC-BY-NC-ND-3.0
99
+ CC-BY-NC-ND-3.0-IGO
84
100
  CC-BY-NC-ND-4.0
85
101
  CC-BY-NC-SA-1.0
86
102
  CC-BY-NC-SA-2.0
@@ -94,12 +110,17 @@ class Gem::Licenses
94
110
  CC-BY-ND-4.0
95
111
  CC-BY-SA-1.0
96
112
  CC-BY-SA-2.0
113
+ CC-BY-SA-2.0-UK
114
+ CC-BY-SA-2.1-JP
97
115
  CC-BY-SA-2.5
98
116
  CC-BY-SA-3.0
117
+ CC-BY-SA-3.0-AT
99
118
  CC-BY-SA-4.0
119
+ CC-PDDC
100
120
  CC0-1.0
101
121
  CDDL-1.0
102
122
  CDDL-1.1
123
+ CDL-1.0
103
124
  CDLA-Permissive-1.0
104
125
  CDLA-Sharing-1.0
105
126
  CECILL-1.0
@@ -108,6 +129,11 @@ class Gem::Licenses
108
129
  CECILL-2.1
109
130
  CECILL-B
110
131
  CECILL-C
132
+ CERN-OHL-1.1
133
+ CERN-OHL-1.2
134
+ CERN-OHL-P-2.0
135
+ CERN-OHL-S-2.0
136
+ CERN-OHL-W-2.0
111
137
  CNRI-Jython
112
138
  CNRI-Python
113
139
  CNRI-Python-GPL-Compatible
@@ -123,12 +149,14 @@ class Gem::Licenses
123
149
  Cube
124
150
  D-FSL-1.0
125
151
  DOC
152
+ DRL-1.0
126
153
  DSDP
127
154
  Dotseqn
128
155
  ECL-1.0
129
156
  ECL-2.0
130
157
  EFL-1.0
131
158
  EFL-2.0
159
+ EPICS
132
160
  EPL-1.0
133
161
  EPL-2.0
134
162
  EUDatagrid
@@ -144,17 +172,32 @@ class Gem::Licenses
144
172
  FTL
145
173
  Fair
146
174
  Frameworx-1.0
175
+ FreeBSD-DOC
147
176
  FreeImage
177
+ GD
148
178
  GFDL-1.1
179
+ GFDL-1.1-invariants-only
180
+ GFDL-1.1-invariants-or-later
181
+ GFDL-1.1-no-invariants-only
182
+ GFDL-1.1-no-invariants-or-later
149
183
  GFDL-1.1-only
150
184
  GFDL-1.1-or-later
151
185
  GFDL-1.2
186
+ GFDL-1.2-invariants-only
187
+ GFDL-1.2-invariants-or-later
188
+ GFDL-1.2-no-invariants-only
189
+ GFDL-1.2-no-invariants-or-later
152
190
  GFDL-1.2-only
153
191
  GFDL-1.2-or-later
154
192
  GFDL-1.3
193
+ GFDL-1.3-invariants-only
194
+ GFDL-1.3-invariants-or-later
195
+ GFDL-1.3-no-invariants-only
196
+ GFDL-1.3-no-invariants-or-later
155
197
  GFDL-1.3-only
156
198
  GFDL-1.3-or-later
157
199
  GL2PS
200
+ GLWTPL
158
201
  GPL-1.0
159
202
  GPL-1.0+
160
203
  GPL-1.0-only
@@ -178,7 +221,10 @@ class Gem::Licenses
178
221
  Glide
179
222
  Glulxe
180
223
  HPND
224
+ HPND-sell-variant
225
+ HTMLTIDY
181
226
  HaskellReport
227
+ Hippocratic-2.1
182
228
  IBM-pibs
183
229
  ICU
184
230
  IJG
@@ -191,6 +237,7 @@ class Gem::Licenses
191
237
  Intel
192
238
  Intel-ACPI
193
239
  Interbase-1.0
240
+ JPNIC
194
241
  JSON
195
242
  JasPer-2.0
196
243
  LAL-1.2
@@ -221,11 +268,15 @@ class Gem::Licenses
221
268
  LiLiQ-R-1.1
222
269
  LiLiQ-Rplus-1.1
223
270
  Libpng
271
+ Linux-OpenIB
224
272
  MIT
273
+ MIT-0
225
274
  MIT-CMU
275
+ MIT-Modern-Variant
226
276
  MIT-advertising
227
277
  MIT-enna
228
278
  MIT-feh
279
+ MIT-open-group
229
280
  MITNFA
230
281
  MPL-1.0
231
282
  MPL-1.1
@@ -237,12 +288,18 @@ class Gem::Licenses
237
288
  MakeIndex
238
289
  MirOS
239
290
  Motosoto
291
+ MulanPSL-1.0
292
+ MulanPSL-2.0
240
293
  Multics
241
294
  Mup
295
+ NAIST-2003
242
296
  NASA-1.3
243
297
  NBPL-1.0
298
+ NCGL-UK-2.0
244
299
  NCSA
245
300
  NGPL
301
+ NIST-PD
302
+ NIST-PD-fallback
246
303
  NLOD-1.0
247
304
  NLPL
248
305
  NOSL
@@ -251,6 +308,7 @@ class Gem::Licenses
251
308
  NPOSL-3.0
252
309
  NRL
253
310
  NTP
311
+ NTP-0
254
312
  Naumen
255
313
  Net-SNMP
256
314
  NetCDF
@@ -258,11 +316,23 @@ class Gem::Licenses
258
316
  Nokia
259
317
  Noweb
260
318
  Nunit
319
+ O-UDA-1.0
261
320
  OCCT-PL
262
321
  OCLC-2.0
322
+ ODC-By-1.0
263
323
  ODbL-1.0
264
324
  OFL-1.0
325
+ OFL-1.0-RFN
326
+ OFL-1.0-no-RFN
265
327
  OFL-1.1
328
+ OFL-1.1-RFN
329
+ OFL-1.1-no-RFN
330
+ OGC-1.0
331
+ OGDL-Taiwan-1.0
332
+ OGL-Canada-2.0
333
+ OGL-UK-1.0
334
+ OGL-UK-2.0
335
+ OGL-UK-3.0
266
336
  OGTSL
267
337
  OLDAP-1.1
268
338
  OLDAP-1.2
@@ -292,7 +362,12 @@ class Gem::Licenses
292
362
  PDDL-1.0
293
363
  PHP-3.0
294
364
  PHP-3.01
365
+ PSF-2.0
366
+ Parity-6.0.0
367
+ Parity-7.0.0
295
368
  Plexus
369
+ PolyForm-Noncommercial-1.0.0
370
+ PolyForm-Small-Business-1.0.0
296
371
  PostgreSQL
297
372
  Python-2.0
298
373
  QPL-1.0
@@ -310,15 +385,21 @@ class Gem::Licenses
310
385
  SGI-B-1.0
311
386
  SGI-B-1.1
312
387
  SGI-B-2.0
388
+ SHL-0.5
389
+ SHL-0.51
313
390
  SISSL
314
391
  SISSL-1.2
315
392
  SMLNJ
316
393
  SMPPL
317
394
  SNIA
318
395
  SPL-1.0
396
+ SSH-OpenSSH
397
+ SSH-short
398
+ SSPL-1.0
319
399
  SWL
320
400
  Saxpath
321
401
  Sendmail
402
+ Sendmail-8.23
322
403
  SimPL-2.0
323
404
  Sleepycat
324
405
  Spencer-86
@@ -326,11 +407,15 @@ class Gem::Licenses
326
407
  Spencer-99
327
408
  StandardML-NJ
328
409
  SugarCRM-1.1.3
410
+ TAPR-OHL-1.0
329
411
  TCL
330
412
  TCP-wrappers
331
413
  TMate
332
414
  TORQUE-1.1
333
415
  TOSL
416
+ TU-Berlin-1.0
417
+ TU-Berlin-2.0
418
+ UCL-1.0
334
419
  UPL-1.0
335
420
  Unicode-DFS-2015
336
421
  Unicode-DFS-2016
@@ -360,16 +445,22 @@ class Gem::Licenses
360
445
  Zimbra-1.3
361
446
  Zimbra-1.4
362
447
  Zlib
448
+ blessing
363
449
  bzip2-1.0.5
364
450
  bzip2-1.0.6
451
+ copyleft-next-0.3.0
452
+ copyleft-next-0.3.1
365
453
  curl
366
454
  diffmark
367
455
  dvipdfm
368
456
  eCos-2.0
369
457
  eGenix
458
+ etalab-2.0
370
459
  gSOAP-1.3b
371
460
  gnuplot
372
461
  iMatix
462
+ libpng-2.0
463
+ libselinux-1.0
373
464
  libtiff
374
465
  mpich2
375
466
  psfrag
@@ -395,12 +486,26 @@ class Gem::Licenses
395
486
  Font-exception-2.0
396
487
  GCC-exception-2.0
397
488
  GCC-exception-3.1
489
+ GPL-3.0-linking-exception
490
+ GPL-3.0-linking-source-exception
491
+ GPL-CC-1.0
492
+ LGPL-3.0-linking-exception
493
+ LLVM-exception
398
494
  LZMA-exception
399
495
  Libtool-exception
400
496
  Linux-syscall-note
401
497
  Nokia-Qt-exception-1.1
402
498
  OCCT-exception-1.0
499
+ OCaml-LGPL-linking-exception
500
+ OpenJDK-assembly-exception-1.0
501
+ PS-or-PDF-font-exception-20170817
502
+ Qt-GPL-exception-1.0
503
+ Qt-LGPL-exception-1.1
403
504
  Qwt-exception-1.0
505
+ SHL-2.0
506
+ SHL-2.1
507
+ Swift-exception
508
+ Universal-FOSS-exception-1.0
404
509
  WxWindows-exception-3.1
405
510
  eCos-exception-2.0
406
511
  freertos-exception-2.0
@@ -413,10 +518,10 @@ class Gem::Licenses
413
518
 
414
519
  REGEXP = %r{
415
520
  \A
416
- (
521
+ (?:
417
522
  #{Regexp.union(LICENSE_IDENTIFIERS)}
418
523
  \+?
419
- (\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
524
+ (?:\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
420
525
  | #{NONSTANDARD}
421
526
  )
422
527
  \Z