Files
iris-context/config/migrate.go
T
VERSE 3d76a3ee88 feat: toml config support (#9)
## What's new
- TOML config support 
- add config init command to justfile
https://github.com/versenilvis/IRIS/pull/9/commits/a5bb6c23d74ca73385b3590d2eb275ce6429906b
- add copy binary file to local bin on reload
https://github.com/versenilvis/IRIS/pull/9/commits/4da3acdbc58c28f20fa0021d15fec82823ba392b
- init config on setup
https://github.com/versenilvis/IRIS/pull/9/commits/fb48b6bb832f38e24fab9211d92858bab9a58a07

## Fix
- add lsof to support macos because /proc filesystem is Linux-specific
and does not exist on macOS 0439d829573864fcf902fc4127f7d45384bfab01
- git push doesnt suggest current branch, fix
https://github.com/versenilvis/IRIS/pull/9/commits/b498532b401b764a4a1a2c70b3cb44b7caf72320
- use timeout context for lsof command in reload handler
https://github.com/versenilvis/IRIS/pull/9/commits/1a2baee951e6538a729da12aedfe53960e51102d
2026-05-30 22:05:06 +07:00

91 lines
1.7 KiB
Go

package config
import (
"encoding/json"
"os"
"path/filepath"
"time"
)
type legacyState struct {
Mode string `json:"mode"`
}
type legacyUpdateState struct {
SeenVersion string `json:"seen_version"`
LastCheck int64 `json:"last_check"`
}
func MigrateFromLegacyJSON() error {
statePath, err := StatePath()
if err != nil {
return err
}
if _, statErr := os.Stat(statePath); statErr == nil {
return nil
}
home, homeErr := os.UserHomeDir()
if homeErr != nil {
return homeErr
}
legacyDir := filepath.Join(home, ".iris")
legacyStatePath := filepath.Join(legacyDir, "state.json")
legacyUpdatePath := filepath.Join(legacyDir, "update_state.json")
hasLegacyState := false
if _, err := os.Stat(legacyStatePath); err == nil {
hasLegacyState = true
}
hasLegacyUpdate := false
if _, err := os.Stat(legacyUpdatePath); err == nil {
hasLegacyUpdate = true
}
if !hasLegacyState && !hasLegacyUpdate {
return nil
}
state := DefaultState()
if hasLegacyState {
data, err := os.ReadFile(legacyStatePath)
if err == nil {
var ls legacyState
if err := json.Unmarshal(data, &ls); err == nil {
if ls.Mode == "history" || ls.Mode == "spec" {
state.LastMode = ls.Mode
}
}
}
}
if hasLegacyUpdate {
data, err := os.ReadFile(legacyUpdatePath)
if err == nil {
var lu legacyUpdateState
if err := json.Unmarshal(data, &lu); err == nil {
state.Updater.SeenVersion = lu.SeenVersion
if lu.LastCheck > 0 {
state.Updater.LastCheckTime = time.Unix(lu.LastCheck, 0)
}
}
}
}
if err := SaveState(state); err != nil {
return err
}
if hasLegacyState {
_ = os.Rename(legacyStatePath, legacyStatePath+".bak")
}
if hasLegacyUpdate {
_ = os.Rename(legacyUpdatePath, legacyUpdatePath+".bak")
}
return nil
}