subbundle 0.4.0 → 0.5.0

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: becbb56b5711721febdcec6b3beb98ce112a836773ba61a8cb243ffd260b5354
4
- data.tar.gz: 93e1ea03033b96b6af57bebec8a13ca9fe26a3b9eaadf0647fdb70d5790ef942
3
+ metadata.gz: f314bee2a82122f608dd196ca7d585040228d34a6384cd91fb241bd5f8a26024
4
+ data.tar.gz: 86bfe4f35f803cf3ccad15033180799a7651b7b9857e1ee87adecf3195a09ddd
5
5
  SHA512:
6
- metadata.gz: '058f77db697842bd92bc086df81d58fec633b59e2dcd21f3f9dbd10cbcc837bb2b4f7ca73ee19a376266936a3e585b7ea38436b8736df2651cbc55bcd2d6037b'
7
- data.tar.gz: c3d15af9d81f1bd96260cca07a6bce13d8b1686ef145b40e318fb66ae71c18ac0f2abf9b77e6e19d60ba54e5719de04ca5da8dc78cb3a73754fdff115ba8ed39
6
+ metadata.gz: d873244bbed04592e5820e85f3087479cb474b65668f17ac5617fc17797d8ea6621b561b06b9e316dfea893704c576586371f856f34d26a412d43be2300e90d9
7
+ data.tar.gz: 5f744728a2e2aabb5f574fe3c5a2ba041feb84e5de4ba99c82ac45586e7497d124db0c594361cb52d4f9f079f0f2b8cf846bca6fdbd717ba57532a4e308e7eea
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Subbundle
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/subbundle.rb CHANGED
@@ -1,78 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "subbundle/version"
4
+ require "bundler"
4
5
 
5
6
  module Subbundle
6
- def self.setup(*gems, name: nil)
7
- require "bundler"
8
- require "digest/md5"
7
+ def self.setup(*gems)
8
+ # Don't write to the lockfile.
9
+ Bundler::Definition.no_lock = true
9
10
 
10
- name ||= File.basename($PROGRAM_NAME)
11
- gems = gems.map(&:to_s)
11
+ Bundler.definition.tap do |definition|
12
+ definition.dependencies.keep_if { |dependency| gems.include?(dependency.name) }
13
+ definition.locked_deps.keep_if { |name, _| gems.include?(name) }
12
14
 
13
- digest = Digest::MD5.new
14
- digest << Bundler.default_lockfile.to_s
15
- digest.file(Bundler.default_lockfile)
16
- gems.sort.each { |dep| digest << dep }
17
-
18
- subbundle_lockfile_path = Bundler.app_config_path.join("subbundles/#{name}.#{digest.hexdigest}.lock")
19
-
20
- if subbundle_lockfile_path.exist?
21
- return if setup_from_subbundle(gems, subbundle_lockfile_path)
15
+ # Overrides the specs
16
+ spec_set = Bundler::SpecSet.new(definition.instance_variable_get(:@locked_specs).for(definition.dependencies, false, true))
17
+ definition.instance_variable_set(:@locked_specs, spec_set)
22
18
  end
23
19
 
24
- default_lockfile = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
25
- required_dependencies = default_lockfile.dependencies.slice(*gems).values
26
- spec_set = Bundler::SpecSet.new(default_lockfile.specs)
27
- specs = spec_set.for(required_dependencies, false, true)
28
- dependencies = default_lockfile.dependencies.slice(*specs.map(&:name)).values
29
- source_list = build_source_list(specs.map(&:source).uniq)
30
- definition = Bundler::Definition.new(Bundler.default_lockfile, dependencies, source_list, {})
31
- subbundle_lockfile_path.dirname.mkpath
32
- subbundle_lockfile_path.write(Bundler.ui.silence { definition.to_lock })
33
-
34
- # Delete old caches.
35
- Bundler.app_config_path.glob("subbundles/#{name}.*.lock").each do |path|
36
- path.delete if path != subbundle_lockfile_path
37
- end
38
-
39
- setup_from_subbundle(gems, subbundle_lockfile_path)
40
- end
41
-
42
- def self.setup_from_subbundle(gems, subbundle_lockfile_path)
43
- subbundle_lockfile = Bundler::LockfileParser.new(Bundler.read_file(subbundle_lockfile_path))
44
- dependencies = subbundle_lockfile.dependencies.slice(*gems).values
45
- source_list = build_source_list(subbundle_lockfile.sources)
46
- definition = Bundler::Definition.new(subbundle_lockfile_path, dependencies, source_list, {})
47
- if definition.nothing_changed?
48
- setup_runtime(definition)
49
- true
50
- else
51
- subbundle_lockfile_path.delete
52
- false
53
- end
54
- end
55
-
56
- def self.build_source_list(sources)
57
- sources.compact.each_with_object(Bundler::SourceList.new) do |source, source_list|
58
- case source
59
- when Bundler::Source::Git
60
- source_list.add_git_source(source.options)
61
- when Bundler::Source::Path, Bundler::Source::Gemspec
62
- source_list.add_path_source(source.options)
63
- when Bundler::Source::Rubygems
64
- next if source.remotes.empty?
65
- source_list.add_rubygems_source(source.options)
66
- else
67
- raise "unhandled: #{source.inspect}"
68
- end
69
- end
70
- end
71
-
72
- def self.setup_runtime(definition)
73
- runtime = Bundler::Runtime.new(Bundler.root, definition)
74
- # This is not ideal, let's revisit later.
75
- Bundler.instance_variable_set(:@load, runtime)
76
- Bundler.ui.silence { runtime.setup }
20
+ Bundler.require
77
21
  end
78
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subbundle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ngan Pham
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-14 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: