subbundle 0.2.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 +4 -4
- data/lib/subbundle/version.rb +1 -1
- data/lib/subbundle.rb +11 -62
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f314bee2a82122f608dd196ca7d585040228d34a6384cd91fb241bd5f8a26024
|
4
|
+
data.tar.gz: 86bfe4f35f803cf3ccad15033180799a7651b7b9857e1ee87adecf3195a09ddd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d873244bbed04592e5820e85f3087479cb474b65668f17ac5617fc17797d8ea6621b561b06b9e316dfea893704c576586371f856f34d26a412d43be2300e90d9
|
7
|
+
data.tar.gz: 5f744728a2e2aabb5f574fe3c5a2ba041feb84e5de4ba99c82ac45586e7497d124db0c594361cb52d4f9f079f0f2b8cf846bca6fdbd717ba57532a4e308e7eea
|
data/lib/subbundle/version.rb
CHANGED
data/lib/subbundle.rb
CHANGED
@@ -1,73 +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
|
7
|
-
|
8
|
-
|
7
|
+
def self.setup(*gems)
|
8
|
+
# Don't write to the lockfile.
|
9
|
+
Bundler::Definition.no_lock = true
|
9
10
|
|
10
|
-
|
11
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
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
|
-
setup_from_subbundle(gems, subbundle_lockfile_path)
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.setup_from_subbundle(gems, subbundle_lockfile_path)
|
38
|
-
subbundle_lockfile = Bundler::LockfileParser.new(Bundler.read_file(subbundle_lockfile_path))
|
39
|
-
dependencies = subbundle_lockfile.dependencies.slice(*gems).values
|
40
|
-
source_list = build_source_list(subbundle_lockfile.sources)
|
41
|
-
definition = Bundler::Definition.new(subbundle_lockfile_path, dependencies, source_list, {})
|
42
|
-
if definition.nothing_changed?
|
43
|
-
setup_runtime(definition)
|
44
|
-
true
|
45
|
-
else
|
46
|
-
subbundle_lockfile_path.delete
|
47
|
-
false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.build_source_list(sources)
|
52
|
-
sources.compact.each_with_object(Bundler::SourceList.new) do |source, source_list|
|
53
|
-
case source
|
54
|
-
when Bundler::Source::Git
|
55
|
-
source_list.add_git_source(source.options)
|
56
|
-
when Bundler::Source::Path, Bundler::Source::Gemspec
|
57
|
-
source_list.add_path_source(source.options)
|
58
|
-
when Bundler::Source::Rubygems
|
59
|
-
next if source.remotes.empty?
|
60
|
-
source_list.add_rubygems_source(source.options)
|
61
|
-
else
|
62
|
-
raise "unhandled: #{source.inspect}"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.setup_runtime(definition)
|
68
|
-
runtime = Bundler::Runtime.new(Bundler.root, definition)
|
69
|
-
# This is not ideal, let's revisit later.
|
70
|
-
Bundler.instance_variable_set(:@load, runtime)
|
71
|
-
Bundler.ui.silence { runtime.setup }
|
20
|
+
Bundler.require
|
72
21
|
end
|
73
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
|
+
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-
|
11
|
+
date: 2022-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|