dependabot-elm 0.143.6 → 0.144.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/dependabot/elm/file_fetcher.rb +1 -8
- data/lib/dependabot/elm/file_parser.rb +2 -34
- data/lib/dependabot/elm/file_updater.rb +2 -25
- data/lib/dependabot/elm/update_checker.rb +5 -8
- data/lib/dependabot/elm/update_checker/elm_19_version_resolver.rb +1 -1
- metadata +4 -6
- data/lib/dependabot/elm/file_updater/elm_package_updater.rb +0 -67
- data/lib/dependabot/elm/update_checker/elm_18_version_resolver.rb +0 -238
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 12e98ada04d79099d4a388649447a44501a2c3d29f57f7d77dec34e482aae5fa
|
|
4
|
+
data.tar.gz: 0e8546c21d7062bcb7daf0a603513c3a7480e5270f76dd48abc743224406a9f6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8edfb34fd1cac0cfb215909fa70f6b69cd122a7df8d55029465d6366401164eb53bf894fdc742274e5e82f1ae076a08fb1f5e17c5dd40cc87d5bfc2f9dc1cc4a
|
|
7
|
+
data.tar.gz: 1259af17f6eab0ec3bc80c5b2cb4ce3cc4d945f269ebb24fee40e5a22d57ded1ca3dc9458e9cacf8ff9ca143f5919bdab2ac4481d790253d01e62cf88732126b
|
|
@@ -7,8 +7,6 @@ module Dependabot
|
|
|
7
7
|
module Elm
|
|
8
8
|
class FileFetcher < Dependabot::FileFetchers::Base
|
|
9
9
|
def self.required_files_in?(filenames)
|
|
10
|
-
return true if filenames.include?("elm-package.json")
|
|
11
|
-
|
|
12
10
|
filenames.include?("elm.json")
|
|
13
11
|
end
|
|
14
12
|
|
|
@@ -21,7 +19,6 @@ module Dependabot
|
|
|
21
19
|
def fetch_files
|
|
22
20
|
fetched_files = []
|
|
23
21
|
|
|
24
|
-
fetched_files << elm_package if elm_package
|
|
25
22
|
fetched_files << elm_json if elm_json
|
|
26
23
|
|
|
27
24
|
# NOTE: We *do not* fetch the exact-dependencies.json file, as it is
|
|
@@ -32,17 +29,13 @@ module Dependabot
|
|
|
32
29
|
end
|
|
33
30
|
|
|
34
31
|
def check_required_files_present
|
|
35
|
-
return if
|
|
32
|
+
return if elm_json
|
|
36
33
|
|
|
37
34
|
path = Pathname.new(File.join(directory, "elm.json")).
|
|
38
35
|
cleanpath.to_path
|
|
39
36
|
raise Dependabot::DependencyFileNotFound, path
|
|
40
37
|
end
|
|
41
38
|
|
|
42
|
-
def elm_package
|
|
43
|
-
@elm_package ||= fetch_file_if_present("elm-package.json")
|
|
44
|
-
end
|
|
45
|
-
|
|
46
39
|
def elm_json
|
|
47
40
|
@elm_json ||= fetch_file_if_present("elm.json")
|
|
48
41
|
end
|
|
@@ -16,7 +16,6 @@ module Dependabot
|
|
|
16
16
|
def parse
|
|
17
17
|
dependency_set = DependencySet.new
|
|
18
18
|
|
|
19
|
-
dependency_set += elm_package_dependencies if elm_package
|
|
20
19
|
dependency_set += elm_json_dependencies if elm_json
|
|
21
20
|
|
|
22
21
|
dependency_set.dependencies.sort_by(&:name)
|
|
@@ -24,27 +23,6 @@ module Dependabot
|
|
|
24
23
|
|
|
25
24
|
private
|
|
26
25
|
|
|
27
|
-
def elm_package_dependencies
|
|
28
|
-
dependency_set = DependencySet.new
|
|
29
|
-
|
|
30
|
-
parsed_package_file.fetch("dependencies").each do |name, req|
|
|
31
|
-
dependency_set <<
|
|
32
|
-
Dependency.new(
|
|
33
|
-
name: name,
|
|
34
|
-
version: version_for(req)&.to_s,
|
|
35
|
-
requirements: [{
|
|
36
|
-
requirement: req, # 4.0 <= v <= 4.0
|
|
37
|
-
groups: [], # we don't have this (its dev vs non-dev)
|
|
38
|
-
source: nil, # elm-package only has elm-package sources
|
|
39
|
-
file: "elm-package.json"
|
|
40
|
-
}],
|
|
41
|
-
package_manager: "elm"
|
|
42
|
-
)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
dependency_set
|
|
46
|
-
end
|
|
47
|
-
|
|
48
26
|
# For docs on elm.json, see:
|
|
49
27
|
# https://github.com/elm/compiler/blob/master/docs/elm.json/application.md
|
|
50
28
|
# https://github.com/elm/compiler/blob/master/docs/elm.json/package.md
|
|
@@ -98,9 +76,9 @@ module Dependabot
|
|
|
98
76
|
end
|
|
99
77
|
|
|
100
78
|
def check_required_files
|
|
101
|
-
return if elm_json
|
|
79
|
+
return if elm_json
|
|
102
80
|
|
|
103
|
-
raise "No elm.json
|
|
81
|
+
raise "No elm.json"
|
|
104
82
|
end
|
|
105
83
|
|
|
106
84
|
def version_for(version_requirement)
|
|
@@ -111,22 +89,12 @@ module Dependabot
|
|
|
111
89
|
req.requirements.first.last
|
|
112
90
|
end
|
|
113
91
|
|
|
114
|
-
def parsed_package_file
|
|
115
|
-
@parsed_package_file ||= JSON.parse(elm_package.content)
|
|
116
|
-
rescue JSON::ParserError
|
|
117
|
-
raise Dependabot::DependencyFileNotParseable, elm_package.path
|
|
118
|
-
end
|
|
119
|
-
|
|
120
92
|
def parsed_elm_json
|
|
121
93
|
@parsed_elm_json ||= JSON.parse(elm_json.content)
|
|
122
94
|
rescue JSON::ParserError
|
|
123
95
|
raise Dependabot::DependencyFileNotParseable, elm_json.path
|
|
124
96
|
end
|
|
125
97
|
|
|
126
|
-
def elm_package
|
|
127
|
-
@elm_package ||= get_original_file("elm-package.json")
|
|
128
|
-
end
|
|
129
|
-
|
|
130
98
|
def elm_json
|
|
131
99
|
@elm_json ||= get_original_file("elm.json")
|
|
132
100
|
end
|
|
@@ -6,12 +6,10 @@ require "dependabot/file_updaters/base"
|
|
|
6
6
|
module Dependabot
|
|
7
7
|
module Elm
|
|
8
8
|
class FileUpdater < Dependabot::FileUpdaters::Base
|
|
9
|
-
require_relative "file_updater/elm_package_updater"
|
|
10
9
|
require_relative "file_updater/elm_json_updater"
|
|
11
10
|
|
|
12
11
|
def self.updated_files_regex
|
|
13
12
|
[
|
|
14
|
-
/^elm-package\.json$/,
|
|
15
13
|
/^elm\.json$/
|
|
16
14
|
]
|
|
17
15
|
end
|
|
@@ -19,16 +17,6 @@ module Dependabot
|
|
|
19
17
|
def updated_dependency_files
|
|
20
18
|
updated_files = []
|
|
21
19
|
|
|
22
|
-
elm_package_files.each do |file|
|
|
23
|
-
next unless file_changed?(file)
|
|
24
|
-
|
|
25
|
-
updated_files <<
|
|
26
|
-
updated_file(
|
|
27
|
-
file: file,
|
|
28
|
-
content: updated_elm_package_content(file)
|
|
29
|
-
)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
20
|
elm_json_files.each do |file|
|
|
33
21
|
next unless file_changed?(file)
|
|
34
22
|
|
|
@@ -47,16 +35,9 @@ module Dependabot
|
|
|
47
35
|
private
|
|
48
36
|
|
|
49
37
|
def check_required_files
|
|
50
|
-
return if elm_json_files.any?
|
|
51
|
-
|
|
52
|
-
raise "No elm.json or elm-package.json!"
|
|
53
|
-
end
|
|
38
|
+
return if elm_json_files.any?
|
|
54
39
|
|
|
55
|
-
|
|
56
|
-
ElmPackageUpdater.new(
|
|
57
|
-
dependencies: dependencies,
|
|
58
|
-
elm_package_file: file
|
|
59
|
-
).updated_elm_package_file_content
|
|
40
|
+
raise "No elm.json"
|
|
60
41
|
end
|
|
61
42
|
|
|
62
43
|
def updated_elm_json_content(file)
|
|
@@ -66,10 +47,6 @@ module Dependabot
|
|
|
66
47
|
).updated_content
|
|
67
48
|
end
|
|
68
49
|
|
|
69
|
-
def elm_package_files
|
|
70
|
-
dependency_files.select { |f| f.name.end_with?("elm-package.json") }
|
|
71
|
-
end
|
|
72
|
-
|
|
73
50
|
def elm_json_files
|
|
74
51
|
dependency_files.select { |f| f.name.end_with?("elm.json") }
|
|
75
52
|
end
|
|
@@ -10,7 +10,6 @@ module Dependabot
|
|
|
10
10
|
module Elm
|
|
11
11
|
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
|
12
12
|
require_relative "update_checker/requirements_updater"
|
|
13
|
-
require_relative "update_checker/elm_18_version_resolver"
|
|
14
13
|
require_relative "update_checker/elm_19_version_resolver"
|
|
15
14
|
|
|
16
15
|
def latest_version
|
|
@@ -55,17 +54,15 @@ module Dependabot
|
|
|
55
54
|
|
|
56
55
|
def version_resolver
|
|
57
56
|
@version_resolver ||=
|
|
58
|
-
|
|
57
|
+
begin
|
|
58
|
+
unless dependency.requirements.any? { |r| r.fetch(:file) == "elm.json" }
|
|
59
|
+
raise Dependabot::DependencyFileNotResolvable, "No elm.json found"
|
|
60
|
+
end
|
|
61
|
+
|
|
59
62
|
Elm19VersionResolver.new(
|
|
60
63
|
dependency: dependency,
|
|
61
64
|
dependency_files: dependency_files
|
|
62
65
|
)
|
|
63
|
-
else
|
|
64
|
-
Elm18VersionResolver.new(
|
|
65
|
-
dependency: dependency,
|
|
66
|
-
dependency_files: dependency_files,
|
|
67
|
-
candidate_versions: candidate_versions
|
|
68
|
-
)
|
|
69
66
|
end
|
|
70
67
|
end
|
|
71
68
|
|
|
@@ -29,7 +29,7 @@ module Dependabot
|
|
|
29
29
|
return current_version if unlock_requirement == :none
|
|
30
30
|
|
|
31
31
|
# Otherwise, we gotta check a few conditions to see if bumping
|
|
32
|
-
# wouldn't also bump other deps in elm
|
|
32
|
+
# wouldn't also bump other deps in elm.json
|
|
33
33
|
fetch_latest_resolvable_version(unlock_requirement)
|
|
34
34
|
end
|
|
35
35
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-elm
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.144.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dependabot-common
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - '='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 0.144.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - '='
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 0.144.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: byebug
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -190,12 +190,10 @@ files:
|
|
|
190
190
|
- lib/dependabot/elm/file_parser.rb
|
|
191
191
|
- lib/dependabot/elm/file_updater.rb
|
|
192
192
|
- lib/dependabot/elm/file_updater/elm_json_updater.rb
|
|
193
|
-
- lib/dependabot/elm/file_updater/elm_package_updater.rb
|
|
194
193
|
- lib/dependabot/elm/metadata_finder.rb
|
|
195
194
|
- lib/dependabot/elm/requirement.rb
|
|
196
195
|
- lib/dependabot/elm/update_checker.rb
|
|
197
196
|
- lib/dependabot/elm/update_checker/cli_parser.rb
|
|
198
|
-
- lib/dependabot/elm/update_checker/elm_18_version_resolver.rb
|
|
199
197
|
- lib/dependabot/elm/update_checker/elm_19_version_resolver.rb
|
|
200
198
|
- lib/dependabot/elm/update_checker/requirements_updater.rb
|
|
201
199
|
- lib/dependabot/elm/version.rb
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "dependabot/elm/file_updater"
|
|
4
|
-
|
|
5
|
-
module Dependabot
|
|
6
|
-
module Elm
|
|
7
|
-
class FileUpdater
|
|
8
|
-
class ElmPackageUpdater
|
|
9
|
-
def initialize(elm_package_file:, dependencies:)
|
|
10
|
-
@elm_package_file = elm_package_file
|
|
11
|
-
@dependencies = dependencies
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def updated_elm_package_file_content
|
|
15
|
-
dependencies.
|
|
16
|
-
select { |dep| requirement_changed?(elm_package_file, dep) }.
|
|
17
|
-
reduce(elm_package_file.content.dup) do |content, dep|
|
|
18
|
-
updated_content = content
|
|
19
|
-
|
|
20
|
-
updated_content = update_requirement(
|
|
21
|
-
content: updated_content,
|
|
22
|
-
filename: elm_package_file.name,
|
|
23
|
-
dependency: dep
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
next updated_content unless content == updated_content
|
|
27
|
-
|
|
28
|
-
raise "Expected content to change!"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
attr_reader :elm_package_file, :dependencies
|
|
35
|
-
|
|
36
|
-
def requirement_changed?(file, dependency)
|
|
37
|
-
changed_requirements =
|
|
38
|
-
dependency.requirements - dependency.previous_requirements
|
|
39
|
-
|
|
40
|
-
changed_requirements.any? { |f| f[:file] == file.name }
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def update_requirement(content:, filename:, dependency:)
|
|
44
|
-
updated_req =
|
|
45
|
-
dependency.requirements.
|
|
46
|
-
find { |r| r.fetch(:file) == filename }.
|
|
47
|
-
fetch(:requirement)
|
|
48
|
-
|
|
49
|
-
old_req =
|
|
50
|
-
dependency.previous_requirements.
|
|
51
|
-
find { |r| r.fetch(:file) == filename }.
|
|
52
|
-
fetch(:requirement)
|
|
53
|
-
|
|
54
|
-
return content unless old_req
|
|
55
|
-
|
|
56
|
-
dep = dependency
|
|
57
|
-
regex =
|
|
58
|
-
/"#{Regexp.quote(dep.name)}"\s*:\s+"#{Regexp.quote(old_req)}"/
|
|
59
|
-
|
|
60
|
-
content.gsub(regex) do |declaration|
|
|
61
|
-
declaration.gsub(%("#{old_req}"), %("#{updated_req}"))
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "open3"
|
|
4
|
-
require "dependabot/shared_helpers"
|
|
5
|
-
require "dependabot/errors"
|
|
6
|
-
require "dependabot/elm/file_parser"
|
|
7
|
-
require "dependabot/elm/update_checker"
|
|
8
|
-
require "dependabot/elm/update_checker/cli_parser"
|
|
9
|
-
require "dependabot/elm/update_checker/requirements_updater"
|
|
10
|
-
require "dependabot/elm/requirement"
|
|
11
|
-
|
|
12
|
-
module Dependabot
|
|
13
|
-
module Elm
|
|
14
|
-
class UpdateChecker
|
|
15
|
-
class Elm18VersionResolver
|
|
16
|
-
class UnrecoverableState < StandardError; end
|
|
17
|
-
|
|
18
|
-
def initialize(dependency:, dependency_files:, candidate_versions:)
|
|
19
|
-
@dependency = dependency
|
|
20
|
-
@dependency_files = dependency_files
|
|
21
|
-
@candidate_versions = candidate_versions
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def latest_resolvable_version(unlock_requirement:)
|
|
25
|
-
raise "Invalid unlock setting: #{unlock_requirement}" unless %i(none own all).include?(unlock_requirement)
|
|
26
|
-
|
|
27
|
-
# Elm has no lockfile, so we will never create an update PR if
|
|
28
|
-
# unlock requirements are `none`. Just return the current version.
|
|
29
|
-
return current_version if unlock_requirement == :none
|
|
30
|
-
|
|
31
|
-
# Otherwise, we gotta check a few conditions to see if bumping
|
|
32
|
-
# wouldn't also bump other deps in elm-package.json
|
|
33
|
-
candidate_versions.sort.reverse_each do |version|
|
|
34
|
-
return version if can_update?(version, unlock_requirement)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Fall back to returning the dependency's current version, which is
|
|
38
|
-
# presumed to be resolvable
|
|
39
|
-
current_version
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def updated_dependencies_after_full_unlock
|
|
43
|
-
version = latest_resolvable_version(unlock_requirement: :all)
|
|
44
|
-
deps_after_install = fetch_install_metadata(target_version: version)
|
|
45
|
-
|
|
46
|
-
original_dependency_details.map do |original_dep|
|
|
47
|
-
new_version = deps_after_install.fetch(original_dep.name)
|
|
48
|
-
|
|
49
|
-
old_reqs = original_dep.requirements.map do |req|
|
|
50
|
-
requirement_class.new(req[:requirement])
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
next if old_reqs.all? { |req| req.satisfied_by?(new_version) }
|
|
54
|
-
|
|
55
|
-
new_requirements =
|
|
56
|
-
RequirementsUpdater.new(
|
|
57
|
-
requirements: original_dep.requirements,
|
|
58
|
-
latest_resolvable_version: new_version.to_s
|
|
59
|
-
).updated_requirements
|
|
60
|
-
|
|
61
|
-
Dependency.new(
|
|
62
|
-
name: original_dep.name,
|
|
63
|
-
version: new_version.to_s,
|
|
64
|
-
requirements: new_requirements,
|
|
65
|
-
previous_version: original_dep.version,
|
|
66
|
-
previous_requirements: original_dep.requirements,
|
|
67
|
-
package_manager: original_dep.package_manager
|
|
68
|
-
)
|
|
69
|
-
end.compact
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
private
|
|
73
|
-
|
|
74
|
-
attr_reader :dependency, :dependency_files, :candidate_versions
|
|
75
|
-
|
|
76
|
-
def can_update?(version, unlock_requirement)
|
|
77
|
-
deps_after_install = fetch_install_metadata(target_version: version)
|
|
78
|
-
|
|
79
|
-
result = check_install_result(deps_after_install, version)
|
|
80
|
-
|
|
81
|
-
# If the install was clean then we can definitely update
|
|
82
|
-
return true if result == :clean_bump
|
|
83
|
-
|
|
84
|
-
# Otherwise, we can still update if the result was a forced full
|
|
85
|
-
# unlock and we're allowed to unlock other requirements
|
|
86
|
-
return false unless unlock_requirement == :all
|
|
87
|
-
|
|
88
|
-
result == :forced_full_unlock_bump
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def check_install_result(deps_after_install, target_version)
|
|
92
|
-
# This can go one of 5 ways:
|
|
93
|
-
# 1) We bump our dep and no other dep is bumped
|
|
94
|
-
# 2) We bump our dep and another dep is bumped too
|
|
95
|
-
# Scenario: NoRedInk/datetimepicker bump to 3.0.2 also
|
|
96
|
-
# bumps elm-css to 14
|
|
97
|
-
# 3) We bump our dep but actually elm-package doesn't bump it
|
|
98
|
-
# Scenario: elm-css bump to 14 but datetimepicker is at 3.0.1
|
|
99
|
-
# 4) We bump our dep but elm-package just says
|
|
100
|
-
# "Packages configured successfully!"
|
|
101
|
-
# Narrator: they weren't
|
|
102
|
-
# Scenario: impossible dependency (i.e. elm-css 999.999.999)
|
|
103
|
-
# a <= v < b where a is greater than latest version
|
|
104
|
-
# 5) We bump our dep but elm-package blows up (not handled here)
|
|
105
|
-
# Scenario: rtfeldman/elm-css 14 && rtfeldman/hashed-class 1.0.0
|
|
106
|
-
# I'm not sure what's different from this scenario
|
|
107
|
-
# to 3), why it blows up instead of just rolling
|
|
108
|
-
# elm-css back to version 9 which is what
|
|
109
|
-
# hashed-class requires
|
|
110
|
-
|
|
111
|
-
# 4) We bump our dep but elm-package just says
|
|
112
|
-
# "Packages configured successfully!"
|
|
113
|
-
return :empty_elm_stuff_bug if deps_after_install.empty?
|
|
114
|
-
|
|
115
|
-
version_after_install = deps_after_install.fetch(dependency.name)
|
|
116
|
-
|
|
117
|
-
# 3) We bump our dep but actually elm-package doesn't bump it
|
|
118
|
-
return :downgrade_bug if version_after_install < target_version
|
|
119
|
-
|
|
120
|
-
other_top_level_deps_bumped =
|
|
121
|
-
original_dependency_details.
|
|
122
|
-
reject { |dep| dep.name == dependency.name }.
|
|
123
|
-
select do |dep|
|
|
124
|
-
reqs = dep.requirements.map { |r| r.fetch(:requirement) }
|
|
125
|
-
reqs = reqs.map { |r| requirement_class.new(r) }
|
|
126
|
-
reqs.any? { |r| !r.satisfied_by?(deps_after_install[dep.name]) }
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# 2) We bump our dep and another dep is bumped
|
|
130
|
-
return :forced_full_unlock_bump if other_top_level_deps_bumped.any?
|
|
131
|
-
|
|
132
|
-
# 1) We bump our dep and no other dep is bumped
|
|
133
|
-
:clean_bump
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def fetch_install_metadata(target_version:)
|
|
137
|
-
@install_cache ||= {}
|
|
138
|
-
@install_cache[target_version.to_s] ||=
|
|
139
|
-
SharedHelpers.in_a_temporary_directory do
|
|
140
|
-
write_temporary_dependency_files(target_version: target_version)
|
|
141
|
-
|
|
142
|
-
# Elm package install outputs a preview of the actions to be
|
|
143
|
-
# performed. We can use this preview to calculate whether it
|
|
144
|
-
# would do anything funny
|
|
145
|
-
command = "yes n | elm-package install"
|
|
146
|
-
response = run_shell_command(command)
|
|
147
|
-
|
|
148
|
-
deps_after_install = CliParser.decode_install_preview(response)
|
|
149
|
-
|
|
150
|
-
deps_after_install
|
|
151
|
-
rescue SharedHelpers::HelperSubprocessFailed => e
|
|
152
|
-
# 5) We bump our dep but elm-package blows up
|
|
153
|
-
handle_elm_package_errors(e)
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def run_shell_command(command)
|
|
158
|
-
start = Time.now
|
|
159
|
-
stdout, process = Open3.capture2e(command)
|
|
160
|
-
time_taken = Time.now - start
|
|
161
|
-
|
|
162
|
-
# Raise an error with the output from the shell session if Elm
|
|
163
|
-
# returns a non-zero status
|
|
164
|
-
return stdout if process.success?
|
|
165
|
-
|
|
166
|
-
raise SharedHelpers::HelperSubprocessFailed.new(
|
|
167
|
-
message: stdout,
|
|
168
|
-
error_context: {
|
|
169
|
-
command: command,
|
|
170
|
-
time_taken: time_taken,
|
|
171
|
-
process_exit_value: process.to_s
|
|
172
|
-
}
|
|
173
|
-
)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def handle_elm_package_errors(error)
|
|
177
|
-
if error.message.include?("I cannot find a set of packages that " \
|
|
178
|
-
"works with your constraints")
|
|
179
|
-
raise Dependabot::DependencyFileNotResolvable, error.message
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
if error.message.include?("You are using Elm 0.18.0, but")
|
|
183
|
-
raise Dependabot::DependencyFileNotResolvable, error.message
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
# I don't know any other errors
|
|
187
|
-
raise error
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def write_temporary_dependency_files(target_version:)
|
|
191
|
-
dependency_files.each do |file|
|
|
192
|
-
path = file.name
|
|
193
|
-
FileUtils.mkdir_p(Pathname.new(path).dirname)
|
|
194
|
-
|
|
195
|
-
File.write(
|
|
196
|
-
path,
|
|
197
|
-
updated_elm_package_content(file.content, target_version)
|
|
198
|
-
)
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
def updated_elm_package_content(content, version)
|
|
203
|
-
json = JSON.parse(content)
|
|
204
|
-
|
|
205
|
-
new_requirement = RequirementsUpdater.new(
|
|
206
|
-
requirements: dependency.requirements,
|
|
207
|
-
latest_resolvable_version: version.to_s
|
|
208
|
-
).updated_requirements.first[:requirement]
|
|
209
|
-
|
|
210
|
-
json["dependencies"][dependency.name] = new_requirement
|
|
211
|
-
JSON.dump(json)
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def original_dependency_details
|
|
215
|
-
@original_dependency_details ||=
|
|
216
|
-
Elm::FileParser.new(
|
|
217
|
-
dependency_files: dependency_files,
|
|
218
|
-
source: nil
|
|
219
|
-
).parse
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
def current_version
|
|
223
|
-
return unless dependency.version
|
|
224
|
-
|
|
225
|
-
version_class.new(dependency.version)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
def version_class
|
|
229
|
-
Elm::Version
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
def requirement_class
|
|
233
|
-
Elm::Requirement
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
end
|