licensed 2.6.0 → 2.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94e3cbc840104e6f0d4733c82ea38805aa2db680070708b88f107420405a1956
4
- data.tar.gz: d04aea6f7ac531c7ab5826b90ece5f3bd0936845a7d8a0e0e44d54c7119e9f08
3
+ metadata.gz: 399ad5d09b5d158f3c1a51aa719dd0f353bf9a4714d495d3998dd0e38c6b7009
4
+ data.tar.gz: 72a61d16fa72990cb12421bb29db09c80c15436eb5a85f962ffab089e78f7c99
5
5
  SHA512:
6
- metadata.gz: aab7fc74e7905ab4acad59d1e997c3ea95c8121299ba5cd52ae96bc2a7451314de1155754d5c41fe7834037217469e49b8b2fc4c88b68b1b08036bedc06a0ee7
7
- data.tar.gz: 8572722b1cfca8af7527278f269b410a7c4edc699dc0ffba6e991e2ececb78d575addf0fe548ae95ac6347b7c59431ec553d1c0003b8a4abbd3f2dbfd534abc5
6
+ metadata.gz: 4c267eaf2523970f7e890e8e08eca972fa07cf3b616f66dc68ba010677014cd3ab8f08f7d7496c22345b4cd9801e6386015ff13e0064eed5ee850c12b068f8a5
7
+ data.tar.gz: ea1f68a031f398a43036648850325f34b44f28e5cfb9da630cc6d6bbdbe8e3b82b5d467b030256d4ed78bb4dda7e7c5820f5dd7fb97af08afe10105db8fc2946
@@ -18,7 +18,7 @@ jobs:
18
18
  - name: Set up Ruby 2.6
19
19
  uses: actions/setup-ruby@v1
20
20
  with:
21
- version: 2.6.x
21
+ ruby-version: 2.6.x
22
22
 
23
23
  - name: Build package
24
24
  run: script/packages/linux
@@ -39,7 +39,7 @@ jobs:
39
39
  - name: Set up Ruby 2.6
40
40
  uses: actions/setup-ruby@v1
41
41
  with:
42
- version: 2.6.x
42
+ ruby-version: 2.6.x
43
43
 
44
44
  - name: Build package
45
45
  run: script/packages/mac
@@ -60,7 +60,7 @@ jobs:
60
60
  - name: Set up Ruby 2.6
61
61
  uses: actions/setup-ruby@v1
62
62
  with:
63
- version: 2.6.x
63
+ ruby-version: 2.6.x
64
64
 
65
65
  - name: Build gem
66
66
  run: gem build *.gemspec
@@ -88,7 +88,7 @@ jobs:
88
88
  - name: Set up Ruby 2.6
89
89
  uses: actions/setup-ruby@v1
90
90
  with:
91
- version: 2.6.x
91
+ ruby-version: 2.6.x
92
92
 
93
93
  - name: Download linux package
94
94
  uses: actions/download-artifact@master
@@ -15,11 +15,11 @@ jobs:
15
15
  - name: Setup node
16
16
  uses: actions/setup-node@v1
17
17
  with:
18
- version: 8
18
+ node-version: 8
19
19
  - name: Set up Ruby
20
20
  uses: actions/setup-ruby@v1
21
21
  with:
22
- version: 2.6.x
22
+ ruby-version: 2.6.x
23
23
  - name: Bootstrap
24
24
  run: script/bootstrap
25
25
  - name: Set up fixtures
@@ -37,7 +37,7 @@ jobs:
37
37
  - name: Set up Ruby
38
38
  uses: actions/setup-ruby@v1
39
39
  with:
40
- version: 2.6.x
40
+ ruby-version: 2.6.x
41
41
  - name: Set up Bundler
42
42
  run: |
43
43
  yes | gem uninstall bundler --all
@@ -60,7 +60,7 @@ jobs:
60
60
  - name: Set up Ruby
61
61
  uses: actions/setup-ruby@v1
62
62
  with:
63
- version: 2.6.x
63
+ ruby-version: 2.6.x
64
64
  - name: Setup Haskell
65
65
  uses: actions/setup-haskell@v1
66
66
  with:
@@ -83,7 +83,7 @@ jobs:
83
83
  - name: Set up Ruby
84
84
  uses: actions/setup-ruby@v1
85
85
  with:
86
- version: ${{matrix.ruby}}
86
+ ruby-version: ${{matrix.ruby}}
87
87
  - name: Set up Bundler
88
88
  run: gem install bundler
89
89
  - name: Bootstrap
@@ -104,7 +104,7 @@ jobs:
104
104
  - name: Set up Ruby
105
105
  uses: actions/setup-ruby@v1
106
106
  with:
107
- version: 2.6.x
107
+ ruby-version: 2.6.x
108
108
  - name: Bootstrap
109
109
  run: script/bootstrap
110
110
  - name: Set up fixtures
@@ -126,7 +126,7 @@ jobs:
126
126
  - name: Set up Ruby
127
127
  uses: actions/setup-ruby@v1
128
128
  with:
129
- version: 2.6.x
129
+ ruby-version: 2.6.x
130
130
  - name: Bootstrap
131
131
  run: script/bootstrap
132
132
  - name: Set up fixtures
@@ -144,11 +144,11 @@ jobs:
144
144
  - name: Setup node
145
145
  uses: actions/setup-node@v1
146
146
  with:
147
- version: ${{ matrix.node_version }}
147
+ node-version: ${{ matrix.node_version }}
148
148
  - name: Set up Ruby
149
149
  uses: actions/setup-ruby@v1
150
150
  with:
151
- version: 2.6.x
151
+ ruby-version: 2.6.x
152
152
  - name: Bootstrap
153
153
  run: script/bootstrap
154
154
  - name: Set up fixtures
@@ -163,7 +163,7 @@ jobs:
163
163
  - name: Set up Ruby
164
164
  uses: actions/setup-ruby@v1
165
165
  with:
166
- version: 2.6.x
166
+ ruby-version: 2.6.x
167
167
  - name: Bootstrap
168
168
  run: script/bootstrap
169
169
  - name: Gradle version
@@ -186,7 +186,7 @@ jobs:
186
186
  - name: Set up Ruby
187
187
  uses: actions/setup-ruby@v1
188
188
  with:
189
- version: 2.6.x
189
+ ruby-version: 2.6.x
190
190
  - name: Bootstrap
191
191
  run: script/bootstrap
192
192
  - name: Install virtualenv
@@ -208,7 +208,7 @@ jobs:
208
208
  - name: Set up Ruby
209
209
  uses: actions/setup-ruby@v1
210
210
  with:
211
- version: 2.6.x
211
+ ruby-version: 2.6.x
212
212
  - name: Bootstrap
213
213
  run: script/bootstrap
214
214
  - name: Install pipenv
@@ -232,7 +232,7 @@ jobs:
232
232
  - name: Set up Ruby
233
233
  uses: actions/setup-ruby@v1
234
234
  with:
235
- version: 2.6.x
235
+ ruby-version: 2.6.x
236
236
  - name: Bootstrap
237
237
  run: script/bootstrap
238
238
  - name: Set up fixtures
@@ -255,10 +255,23 @@ jobs:
255
255
  - name: Set up Ruby
256
256
  uses: actions/setup-ruby@v1
257
257
  with:
258
- version: 2.6.x
258
+ ruby-version: 2.6.x
259
259
  - name: Bootstrap
260
260
  run: script/bootstrap
261
261
  - name: Set up fixtures
262
262
  run: script/source-setup/mix
263
263
  - name: Run tests
264
264
  run: script/test mix
265
+
266
+ manifest:
267
+ runs-on: ubuntu-latest
268
+ steps:
269
+ - uses: actions/checkout@master
270
+ - name: Set up Ruby
271
+ uses: actions/setup-ruby@v1
272
+ with:
273
+ ruby-version: 2.6.x
274
+ - name: Bootstrap
275
+ run: script/bootstrap
276
+ - name: Run tests
277
+ run: script/test manifest
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## 2.6.1
10
+ 2019-10-26
11
+
12
+ ### Changed
13
+ - Performance improvements during dependency enumeration (:tada: @krzysztof-pawlik-gat https://github.com/github/licensed/pull/204, https://github.com/github/licensed/pull/207) (https://github.com/github/licensed/pull/210)
14
+
9
15
  ## 2.6.0
10
16
  2019-10-22
11
17
 
@@ -229,4 +235,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
229
235
 
230
236
  Initial release :tada:
231
237
 
232
- [Unreleased]: https://github.com/github/licensed/compare/2.6.0...HEAD
238
+ [Unreleased]: https://github.com/github/licensed/compare/2.6.1...HEAD
@@ -5,7 +5,7 @@ module Licensed
5
5
  module Sources
6
6
  class Bower < Source
7
7
  def enabled?
8
- [@config.pwd.join(".bowerrc"), @config.pwd.join("bower.json")].any? do |path|
8
+ [config.pwd.join(".bowerrc"), config.pwd.join("bower.json")].any? do |path|
9
9
  File.exist?(path)
10
10
  end
11
11
  end
@@ -30,7 +30,7 @@ module Licensed
30
30
  # Returns a parsed ".bowerrc" configuration, or an empty hash if not found
31
31
  def bower_config
32
32
  @bower_config ||= begin
33
- path = @config.pwd.join(".bowerrc")
33
+ path = config.pwd.join(".bowerrc")
34
34
  path.exist? ? JSON.parse(path.read) : {}
35
35
  end
36
36
  end
@@ -38,7 +38,7 @@ module Licensed
38
38
  # Returns the expected path to bower components.
39
39
  # Note this does not validate that the returned path is valid
40
40
  def bower_path
41
- pwd = bower_config["cwd"] ? Pathname.new(bower_config["cwd"]).expand_path : @config.pwd
41
+ pwd = bower_config["cwd"] ? Pathname.new(bower_config["cwd"]).expand_path : config.pwd
42
42
  pwd.join bower_config["directory"] || "bower_components"
43
43
  end
44
44
  end
@@ -264,7 +264,7 @@ module Licensed
264
264
  # Defaults to [:development, :test] + ::Bundler.settings[:without]
265
265
  def exclude_groups
266
266
  @exclude_groups ||= begin
267
- exclude = Array(@config.dig("bundler", "without"))
267
+ exclude = Array(config.dig("bundler", "without"))
268
268
  exclude = DEFAULT_WITHOUT_GROUPS if exclude.empty?
269
269
  exclude.uniq.map(&:to_sym)
270
270
  end
@@ -272,7 +272,7 @@ module Licensed
272
272
 
273
273
  # Returns the path to the Bundler Gemfile
274
274
  def gemfile_path
275
- @gemfile_path ||= GEMFILES.map { |g| @config.pwd.join g }
275
+ @gemfile_path ||= GEMFILES.map { |g| config.pwd.join g }
276
276
  .find { |f| f.exist? }
277
277
  end
278
278
 
@@ -285,10 +285,10 @@ module Licensed
285
285
  # Returns the configured bundler executable to use, or "bundle" by default.
286
286
  def bundler_exe
287
287
  @bundler_exe ||= begin
288
- exe = @config.dig("bundler", "bundler_exe")
288
+ exe = config.dig("bundler", "bundler_exe")
289
289
  return "bundle" unless exe
290
290
  return exe if Licensed::Shell.tool_available?(exe)
291
- @config.root.join(exe)
291
+ config.root.join(exe)
292
292
  end
293
293
  end
294
294
 
@@ -43,7 +43,7 @@ module Licensed
43
43
  end
44
44
  end
45
45
 
46
- package_ids.map { |id| package_info(id) }.concat(missing)
46
+ Parallel.map(package_ids) { |id| package_info(id) }.concat(missing)
47
47
  end
48
48
 
49
49
  # Returns the packages document directory and search root directory
@@ -52,7 +52,7 @@ module Licensed
52
52
  unless package["haddock-html"]
53
53
  # default to a local vendor directory if haddock-html property
54
54
  # isn't available
55
- return [File.join(@config.pwd, "vendor", package["name"]), nil]
55
+ return [File.join(config.pwd, "vendor", package["name"]), nil]
56
56
  end
57
57
 
58
58
  html_dir = package["haddock-html"]
@@ -85,7 +85,7 @@ module Licensed
85
85
 
86
86
  results.merge new_packages
87
87
 
88
- dependencies = new_packages.flat_map { |n| package_dependencies(n) }
88
+ dependencies = Parallel.map(new_packages, &method(:package_dependencies)).flatten
89
89
 
90
90
  return results if dependencies.empty?
91
91
 
@@ -131,10 +131,10 @@ module Licensed
131
131
  # Returns an array of ghc package DB locations as specified in the app
132
132
  # configuration
133
133
  def package_db_args
134
- @package_db_args ||= Array(@config.dig("cabal", "ghc_package_db")).map do |path|
134
+ @package_db_args ||= Array(config.dig("cabal", "ghc_package_db")).map do |path|
135
135
  next "--#{path}" if %w(global user).include?(path)
136
136
  path = realized_ghc_package_path(path)
137
- path = File.expand_path(path, @config.root)
137
+ path = File.expand_path(path, config.root)
138
138
 
139
139
  next unless File.exist?(path)
140
140
  "--package-db=#{path}"
@@ -196,14 +196,14 @@ module Licensed
196
196
 
197
197
  # Returns the targets to search for `build-depends` in a cabal file
198
198
  def cabal_file_targets
199
- targets = Array(@config.dig("cabal", "cabal_file_targets"))
199
+ targets = Array(config.dig("cabal", "cabal_file_targets"))
200
200
  targets.push(*DEFAULT_TARGETS) if targets.empty?
201
201
  targets
202
202
  end
203
203
 
204
204
  # Returns an array of the local directory cabal package files
205
205
  def cabal_files
206
- @cabal_files ||= Dir.glob(File.join(@config.pwd, "*.cabal"))
206
+ @cabal_files ||= Dir.glob(File.join(config.pwd, "*.cabal"))
207
207
  end
208
208
 
209
209
  # Returns the ghc cli tool version
@@ -49,12 +49,12 @@ module Licensed
49
49
  end
50
50
 
51
51
  def composer_application_path
52
- setting = @config.dig("composer", "application_path") || DEFAULT_COMPOSER_APPLICATON_PATH
53
- File.expand_path(setting, @config.pwd)
52
+ setting = config.dig("composer", "application_path") || DEFAULT_COMPOSER_APPLICATON_PATH
53
+ File.expand_path(setting, config.pwd)
54
54
  end
55
55
 
56
56
  def composer_lock
57
- @config.pwd.join("composer.lock")
57
+ config.pwd.join("composer.lock")
58
58
  end
59
59
  end
60
60
  end
@@ -10,8 +10,8 @@ module Licensed
10
10
 
11
11
  def enumerate_dependencies
12
12
  packages.map do |package|
13
- package_dir = @config.pwd.join("vendor", package[:name])
14
- search_root = @config.pwd.join("vendor", package[:project])
13
+ package_dir = config.pwd.join("vendor", package[:name])
14
+ search_root = config.pwd.join("vendor", package[:project])
15
15
 
16
16
  Dependency.new(
17
17
  name: package[:name],
@@ -52,7 +52,7 @@ module Licensed
52
52
  end
53
53
 
54
54
  def gopkg_lock_path
55
- @config.pwd.join("Gopkg.lock")
55
+ config.pwd.join("Gopkg.lock")
56
56
  end
57
57
 
58
58
  # Returns a list of go standard packages
@@ -20,7 +20,7 @@ module Licensed
20
20
  git_submodules_command.lines.map do |line|
21
21
  displaypath, toplevel, version, homepage = line.strip.split
22
22
  name = File.basename(displaypath)
23
- submodule_path = if toplevel == @config.pwd.to_s
23
+ submodule_path = if toplevel == config.pwd.to_s
24
24
  name
25
25
  else
26
26
  parent = File.basename(toplevel)
@@ -31,7 +31,7 @@ module Licensed
31
31
  Licensed::Dependency.new(
32
32
  name: submodule_path,
33
33
  version: version,
34
- path: @config.pwd.join(displaypath),
34
+ path: config.pwd.join(displaypath),
35
35
  metadata: {
36
36
  "type" => self.class.type,
37
37
  "name" => name,
@@ -50,7 +50,7 @@ module Licensed
50
50
  end
51
51
 
52
52
  def gitmodules_path
53
- @config.pwd.join(".gitmodules")
53
+ config.pwd.join(".gitmodules")
54
54
  end
55
55
  end
56
56
  end
@@ -54,7 +54,7 @@ module Licensed
54
54
  def root_package_deps
55
55
  # check for ignored packages to avoid raising errors calling `go list`
56
56
  # when ignored package is not found
57
- Array(root_package["Deps"]).map { |name| package_info(name) }
57
+ Parallel.map(Array(root_package["Deps"])) { |name| package_info(name) }
58
58
  end
59
59
 
60
60
  # Returns the list of dependencies as returned by "go list -json -deps"
@@ -196,12 +196,12 @@ module Licensed
196
196
  def gopath
197
197
  return @gopath if defined?(@gopath)
198
198
 
199
- path = @config.dig("go", "GOPATH")
199
+ path = config.dig("go", "GOPATH")
200
200
  @gopath = if path.nil? || path.empty?
201
201
  ENV["GOPATH"]
202
202
  else
203
203
  root = begin
204
- @config.root
204
+ config.root
205
205
  rescue Licensed::Shell::Error
206
206
  Pathname.pwd
207
207
  end
@@ -12,7 +12,7 @@ module Licensed
12
12
  end
13
13
 
14
14
  def enumerate_dependencies
15
- packages.map do |package_name, sources|
15
+ Parallel.map(packages) do |package_name, sources|
16
16
  Licensed::Sources::Manifest::Dependency.new(
17
17
  name: package_name,
18
18
  version: contents_version(*sources),
@@ -28,10 +28,10 @@ module Licensed
28
28
 
29
29
  # Returns the license path for a package specified in the configuration.
30
30
  def configured_license_path(package_name)
31
- license_path = @config.dig("manifest", "licenses", package_name)
31
+ license_path = config.dig("manifest", "licenses", package_name)
32
32
  return unless license_path
33
33
 
34
- license_path = @config.root.join(license_path)
34
+ license_path = config.root.join(license_path)
35
35
  return unless license_path.exist?
36
36
  license_path
37
37
  end
@@ -46,7 +46,7 @@ module Licensed
46
46
  # don't allow the workspace root to be used as common prefix
47
47
  # the project this is run for should be excluded from the manifest,
48
48
  # or ignored in the config. any license in the root should be ignored.
49
- return common_prefix if common_prefix != @config.root
49
+ return common_prefix if common_prefix != config.root
50
50
  end
51
51
 
52
52
  # use the first (or only) sources directory to find license information
@@ -61,7 +61,7 @@ module Licensed
61
61
  manifest.each_with_object({}) do |(src, package_name), hsh|
62
62
  next if src.nil? || src.empty?
63
63
  hsh[package_name] ||= []
64
- hsh[package_name] << File.join(@config.root, src)
64
+ hsh[package_name] << File.join(config.root, src)
65
65
  end
66
66
  end
67
67
 
@@ -79,15 +79,15 @@ module Licensed
79
79
 
80
80
  # Returns the manifest location for the app
81
81
  def manifest_path
82
- path = @config.dig("manifest", "path")
83
- return @config.root.join(path) if path
82
+ path = config.dig("manifest", "path")
83
+ return config.root.join(path) if path
84
84
 
85
- @config.cache_path.join("manifest.json")
85
+ config.cache_path.join("manifest.json")
86
86
  end
87
87
 
88
88
  # Returns whether a manifest should be generated automatically
89
89
  def generate_manifest?
90
- !File.exist?(manifest_path) && !@config.dig("manifest", "dependencies").nil?
90
+ !File.exist?(manifest_path) && !config.dig("manifest", "dependencies").nil?
91
91
  end
92
92
 
93
93
  # Returns a manifest of files generated automatically based on patterns
@@ -128,7 +128,7 @@ module Licensed
128
128
  # Returns the project dependencies specified from the licensed configuration
129
129
  def configured_dependencies
130
130
  @configured_dependencies ||= begin
131
- dependencies = @config.dig("manifest", "dependencies")&.dup || {}
131
+ dependencies = config.dig("manifest", "dependencies")&.dup || {}
132
132
 
133
133
  dependencies.each do |name, patterns|
134
134
  # map glob pattern(s) listed for the dependency to a listing
@@ -142,7 +142,7 @@ module Licensed
142
142
 
143
143
  # Returns the set of project files that are included in dependency evaluation
144
144
  def included_files
145
- @sources ||= all_files - files_from_pattern_list(@config.dig("manifest", "exclude"))
145
+ @sources ||= all_files - files_from_pattern_list(config.dig("manifest", "exclude"))
146
146
  end
147
147
 
148
148
  # Finds and returns all files in the project that match
@@ -151,7 +151,7 @@ module Licensed
151
151
  return Set.new if patterns.nil? || patterns.empty?
152
152
 
153
153
  # evaluate all patterns from the project root
154
- Dir.chdir @config.root do
154
+ Dir.chdir config.root do
155
155
  Array(patterns).reduce(Set.new) do |files, pattern|
156
156
  if pattern.start_with?("!")
157
157
  # if the pattern is an exclusion, remove all matching files
@@ -9,11 +9,10 @@ module Licensed
9
9
  end
10
10
 
11
11
  def enabled?
12
- Licensed::Shell.tool_available?("npm") && File.exist?(@config.pwd.join("package.json"))
12
+ Licensed::Shell.tool_available?("npm") && File.exist?(config.pwd.join("package.json"))
13
13
  end
14
14
 
15
15
  def enumerate_dependencies
16
- @yarn_lock_present = File.exist?(@config.pwd.join("yarn.lock"))
17
16
  packages.map do |name, package|
18
17
  path = package["path"]
19
18
  Dependency.new(
@@ -49,7 +48,7 @@ module Licensed
49
48
  # package name to it's metadata
50
49
  def recursive_dependencies(dependencies, result = {})
51
50
  dependencies.each do |name, dependency|
52
- next if @yarn_lock_present && dependency["missing"]
51
+ next if yarn_lock_present && dependency["missing"]
53
52
  (result[name] ||= []) << dependency
54
53
  recursive_dependencies(dependency["dependencies"] || {}, result)
55
54
  end
@@ -60,6 +59,11 @@ module Licensed
60
59
  def package_metadata_command
61
60
  Licensed::Shell.execute("npm", "list", "--json", "--production", "--long", allow_failure: true)
62
61
  end
62
+
63
+ # Returns true if a yarn.lock file exists in the current directory
64
+ def yarn_lock_present
65
+ @yarn_lock_present ||= File.exist?(config.pwd.join("yarn.lock"))
66
+ end
63
67
  end
64
68
  end
65
69
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require "json"
2
+
3
3
  require "English"
4
+ require "json"
5
+ require "parallel"
4
6
 
5
7
  module Licensed
6
8
  module Sources
@@ -10,11 +12,11 @@ module Licensed
10
12
 
11
13
  def enabled?
12
14
  return unless virtual_env_pip && Licensed::Shell.tool_available?(virtual_env_pip)
13
- File.exist?(@config.pwd.join("requirements.txt"))
15
+ File.exist?(config.pwd.join("requirements.txt"))
14
16
  end
15
17
 
16
18
  def enumerate_dependencies
17
- packages_from_requirements_txt.map do |package_name|
19
+ Parallel.map(packages_from_requirements_txt, in_threads: Parallel.processor_count) do |package_name|
18
20
  package = package_info(package_name)
19
21
  location = File.join(package["Location"], package["Name"].gsub("-", "_") + "-" + package["Version"] + ".dist-info")
20
22
  Dependency.new(
@@ -33,7 +35,7 @@ module Licensed
33
35
  private
34
36
 
35
37
  def packages_from_requirements_txt
36
- File.read(@config.pwd.join("requirements.txt"))
38
+ File.read(config.pwd.join("requirements.txt"))
37
39
  .lines
38
40
  .reject { |line| line.include?("://") }
39
41
  .map { |line| line.strip.match(PACKAGE_REGEX) { |match| match.captures.first } }
@@ -61,8 +63,8 @@ module Licensed
61
63
  def virtual_env_dir
62
64
  return @virtual_env_dir if defined?(@virtual_env_dir)
63
65
  @virtual_env_dir = begin
64
- venv_dir = @config.dig("python", "virtual_env_dir")
65
- File.expand_path(venv_dir, @config.root) if venv_dir
66
+ venv_dir = config.dig("python", "virtual_env_dir")
67
+ File.expand_path(venv_dir, config.root) if venv_dir
66
68
  end
67
69
  end
68
70
  end
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "parallel"
4
+
3
5
  module Licensed
4
6
  module Sources
5
7
  class Pipenv < Source
6
8
  def enabled?
7
- Licensed::Shell.tool_available?("pipenv") && File.exist?(@config.pwd.join("Pipfile.lock"))
9
+ Licensed::Shell.tool_available?("pipenv") && File.exist?(config.pwd.join("Pipfile.lock"))
8
10
  end
9
11
 
10
12
  def enumerate_dependencies
11
- pakages_from_pipfile_lock.map do |package_name|
13
+ Parallel.map(pakages_from_pipfile_lock, in_threads: Parallel.processor_count) do |package_name|
12
14
  package = package_info(package_name)
13
15
  location = File.join(package["Location"], package["Name"].gsub("-", "_") + "-" + package["Version"] + ".dist-info")
14
16
  Dependency.new(
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Licensed
3
- VERSION = "2.6.0".freeze
3
+ VERSION = "2.6.1".freeze
4
4
 
5
5
  def self.previous_major_versions
6
6
  major_version = Gem::Version.new(Licensed::VERSION).segments.first
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency "tomlrb", "~> 1.2"
30
30
  spec.add_dependency "bundler", ">= 1.10"
31
31
  spec.add_dependency "ruby-xxHash", "~> 0.4"
32
+ spec.add_dependency "parallel", ">= 0.18.0"
32
33
 
33
34
  spec.add_development_dependency "rake", "~> 10.0"
34
35
  spec.add_development_dependency "minitest", "~> 5.8"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: licensed
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-22 00:00:00.000000000 Z
11
+ date: 2019-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: licensee
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.4'
97
+ - !ruby/object:Gem::Dependency
98
+ name: parallel
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.18.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.18.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement