subbundle 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: