Class: Space::Src::Migration

Inherits:
Object
  • Object
show all
Defined in:
lib/space_src/migration.rb

Overview

One-shot data-preserving migration from the ‘repo-tender` identity to `space-src`. Invoked from CLI.run before dispatch on every run; all operations are idempotent so repeated invocations are safe.

Constant Summary collapse

OLD_APP_NAME =
"repo-tender"
OLD_LABEL =
"io.github.jetpks.repo-tender.sync"

Class Method Summary collapse

Class Method Details

.run(paths:, err:) ⇒ Object

Move old-identity XDG dirs to new-identity locations if the old ones exist and the new ones do not (no-clobber — no data loss). Print a one-line notice to ‘err` only when something is actually moved. Also warn if the old-label launchd plist is still present so the user knows to run `src daemon install`.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/space_src/migration.rb', line 18

def self.run(paths:, err:)
  moved = false

  old_config = File.join(paths.config_home, OLD_APP_NAME)
  new_config = paths.config_dir
  if File.directory?(old_config) && !File.exist?(new_config)
    FileUtils.mv(old_config, new_config)
    moved = true
  end

  old_state = File.join(paths.state_home, OLD_APP_NAME)
  new_state = paths.state_dir
  if File.directory?(old_state) && !File.exist?(new_state)
    FileUtils.mv(old_state, new_state)
    moved = true
  end

  err.puts "space-src: migrated config/state from #{OLD_APP_NAME}" if moved

  old_plist = File.join(paths.launch_agents_dir, "#{OLD_LABEL}.plist")
  if File.exist?(old_plist)
    err.puts "space-src: stale launchd agent found (#{OLD_LABEL}); run `src daemon install` to upgrade"
  end
end