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