Class: MilkTea::PackageLock
- Inherits:
-
Object
- Object
- MilkTea::PackageLock
- Defined in:
- lib/milk_tea/packages/lock.rb
Defined Under Namespace
Classes: CheckResult, LockedPackage, Result
Class Method Summary collapse
- .check(path, source_resolver: PackageSourceResolver.new) ⇒ Object
- .load(path, source_resolver: PackageSourceResolver.new) ⇒ Object
- .locked_packages(path, source_resolver: PackageSourceResolver.new) ⇒ Object
- .write(path, source_resolver: PackageSourceResolver.new) ⇒ Object
Instance Method Summary collapse
- #check ⇒ Object
-
#initialize(path, source_resolver: PackageSourceResolver.new) ⇒ PackageLock
constructor
A new instance of PackageLock.
- #load ⇒ Object
- #locked_packages ⇒ Object
- #write ⇒ Object
Constructor Details
#initialize(path, source_resolver: PackageSourceResolver.new) ⇒ PackageLock
Returns a new instance of PackageLock.
42 43 44 45 |
# File 'lib/milk_tea/packages/lock.rb', line 42 def initialize(path, source_resolver: PackageSourceResolver.new) @path = File.(path) @source_resolver = source_resolver end |
Class Method Details
.check(path, source_resolver: PackageSourceResolver.new) ⇒ Object
30 31 32 |
# File 'lib/milk_tea/packages/lock.rb', line 30 def self.check(path, source_resolver: PackageSourceResolver.new) new(path, source_resolver:).check end |
.load(path, source_resolver: PackageSourceResolver.new) ⇒ Object
26 27 28 |
# File 'lib/milk_tea/packages/lock.rb', line 26 def self.load(path, source_resolver: PackageSourceResolver.new) new(path, source_resolver:).load end |
.locked_packages(path, source_resolver: PackageSourceResolver.new) ⇒ Object
34 35 36 |
# File 'lib/milk_tea/packages/lock.rb', line 34 def self.locked_packages(path, source_resolver: PackageSourceResolver.new) new(path, source_resolver:).locked_packages end |
.write(path, source_resolver: PackageSourceResolver.new) ⇒ Object
38 39 40 |
# File 'lib/milk_tea/packages/lock.rb', line 38 def self.write(path, source_resolver: PackageSourceResolver.new) new(path, source_resolver:).write end |
Instance Method Details
#check ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/milk_tea/packages/lock.rb', line 91 def check lock_path, expected_content = rendered_lockfile return CheckResult.new(lock_path:, expected_content:, actual_content: nil, status: :missing) unless File.file?(lock_path) actual_content = File.read(lock_path) status = actual_content == expected_content ? :current : :stale CheckResult.new(lock_path:, expected_content:, actual_content:, status:) rescue SystemCallError => e raise PackageLockError, "failed to read #{lock_path || File.join(@path, 'package.lock')}: #{e.}" end |
#load ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/milk_tea/packages/lock.rb', line 47 def load _root_manifest, _lock_path, _root_package_name, root_package_id, records_by_id = locked_records raise PackageLockError, "package.lock missing root package #{root_package_id}" unless records_by_id.key?(root_package_id) build_locked_node(root_package_id, records_by_id, {}, []) end |
#locked_packages ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/milk_tea/packages/lock.rb', line 55 def locked_packages _root_manifest, lock_path, _root_package_name, root_package_id, schema_version, packages = lockfile_context records_by_id = packages.each_with_object({}) do |entry, records| record = build_locked_package_record(entry, lock_path, schema_version) if records.key?(record[:instance_id]) raise PackageLockError, "duplicate package instance #{record[:instance_id]} in #{lock_path}" end records[record[:instance_id]] = record end raise PackageLockError, "package.lock missing root package #{root_package_id}" unless records_by_id.key?(root_package_id) records_by_id.values.map do |record| dependency_names = record[:dependency_ids].map do |dependency_id| dependency_record = records_by_id[dependency_id] unless dependency_record raise PackageLockError, "package.lock missing dependency #{dependency_id} referenced by #{record[:package_name]}" end dependency_record[:package_name] end LockedPackage.new( package_name: record[:package_name], instance_id: record[:instance_id], identity: record[:identity], manifest_path: record[:manifest_path], dependency_names:, dependency_ids: record[:dependency_ids], ) end end |
#write ⇒ Object
102 103 104 105 106 107 108 109 110 |
# File 'lib/milk_tea/packages/lock.rb', line 102 def write lock_path, content = rendered_lockfile PackageAtomicWrite.write(lock_path, content) Result.new(lock_path:, content:) rescue SystemCallError => e raise PackageLockError, "failed to write #{lock_path || File.join(@path, 'package.lock')}: #{e.}" end |