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 +4 -4
- data/lib/subbundle/version.rb +1 -1
- data/lib/subbundle.rb +11 -67
- 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,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
|
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
|
-
# 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
|
+
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:
|