Module: Kobold::Manager::Lifecycle

Included in:
Kobold::Manager
Defined in:
lib/Kobold/manager/lifecycle.rb

Overview

Dependency lifecycle: add, remove, update.

Instance Method Summary collapse

Instance Method Details

#add(config_path:, repo:, source:, name: nil, **options) ⇒ Object

Add a dependency to an existing .kobold config file.



8
9
10
11
12
13
14
15
16
17
# File 'lib/Kobold/manager/lifecycle.rb', line 8

def add(config_path:, repo:, source:, name: nil, **options)
  name ||= repo.split("/").last
  config = resolve_config(config_path)
  dep = build_dep_entry(repo, source, options)
  config.add_dependency(name, dep)
  Config.write(config.path, config)

  action = register_and_clone(repo, source)
  { config_path: config.path, name: name, slug: Database.slugify(repo), action: action }
end

#remove(config_path:, dependency_name:, cleanup: false) ⇒ Object

Remove a dependency from a .kobold config file.



20
21
22
23
24
25
26
27
28
29
# File 'lib/Kobold/manager/lifecycle.rb', line 20

def remove(config_path:, dependency_name:, cleanup: false)
  config = resolve_config(config_path)
  dep = config.dependency(dependency_name)
  raise Errors::DependencyNotFound, dependency_name unless dep

  result = cleanup ? cleanup_dependency(dep, config) : { removed_worktree: nil, removed_symlink: false }
  config.remove_dependency(dependency_name)
  Config.write(config.path, config)
  result.merge(config_path: config.path, name: dependency_name)
end

#update(config_path:, dependency_name:) ⇒ Object

Update a dependency's commit SHA to the latest on its branch.



32
33
34
35
36
37
38
39
40
41
# File 'lib/Kobold/manager/lifecycle.rb', line 32

def update(config_path:, dependency_name:)
  config = resolve_config(config_path)
  dep = config.dependency(dependency_name)
  raise Errors::DependencyNotFound, dependency_name unless dep
  raise Errors::ConfigError, "Dependency '#{dependency_name}' has no branch to update from" unless dep["branch"]

  result = perform_update(config, dependency_name, dep)
  Config.write(config.path, config)
  result.merge(config_path: config.path, name: dependency_name)
end

#update_all(config_path: Dir.pwd) ⇒ Object

Update all dependencies with a branch specified.



44
45
46
47
48
49
50
51
52
53
# File 'lib/Kobold/manager/lifecycle.rb', line 44

def update_all(config_path: Dir.pwd)
  config = resolve_config(config_path)
  results = []
  config.each_dependency do |name, dep|
    next unless dep["branch"]

    results << safe_update(config, name)
  end
  results
end