move core logic to internal/core package, bump to 0.1.3

This commit is contained in:
2026-03-05 14:56:28 +00:00
parent bc02c93acc
commit 0215a53fcf
8 changed files with 232 additions and 230 deletions
+34 -94
View File
@@ -6,9 +6,11 @@ import (
"os"
"path/filepath"
"strings"
"sigil/internal/core"
)
const version = "0.1.2"
const version = "0.1.3"
func main() {
if len(os.Args) < 2 {
@@ -69,7 +71,7 @@ func applyCmd(args []string) error {
return fmt.Errorf("unknown flag %q", arg)
}
repo, err := repoPath()
repo, err := core.RepoPath()
if err != nil {
return err
}
@@ -87,7 +89,7 @@ func applyCmd(args []string) error {
}
pkgDir := filepath.Join(repo, entry.Name())
configPath := filepath.Join(pkgDir, configFileName)
configPath := filepath.Join(pkgDir, core.ConfigFileName)
if _, err := os.Stat(configPath); err != nil {
if errors.Is(err, os.ErrNotExist) {
continue
@@ -95,20 +97,20 @@ func applyCmd(args []string) error {
return err
}
cfg, err := loadConfig(configPath)
cfg, err := core.LoadConfig(configPath)
if err != nil {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
targetRoot, err := selectTarget(cfg)
targetRoot, err := core.SelectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
if errors.Is(err, core.ErrTargetDisabled) {
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err)
}
filesDir := filepath.Join(pkgDir, filesDirName)
filesDir := filepath.Join(pkgDir, core.FilesDirName)
if _, err := os.Stat(filesDir); err != nil {
if errors.Is(err, os.ErrNotExist) {
continue
@@ -116,11 +118,11 @@ func applyCmd(args []string) error {
return err
}
if err := applyPackage(filesDir, targetRoot, cfg); err != nil {
if err := core.ApplyPackage(filesDir, targetRoot, cfg); err != nil {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
stale, err := findStaleLinks(filesDir, targetRoot)
stale, err := core.FindStaleLinks(filesDir, targetRoot)
if err != nil {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
@@ -132,11 +134,11 @@ func applyCmd(args []string) error {
}
if prune {
return removeLinks(stales, false)
return core.RemoveLinks(stales, false)
}
fmt.Printf("Stale links found: %d\n", len(stales))
return handleStaleLinks(stales)
return core.HandleStaleLinks(stales)
}
func addCmd(args []string) error {
@@ -164,7 +166,7 @@ func addCmd(args []string) error {
return fmt.Errorf("%s is a symlink; refusing to add", absPath)
}
repo, err := repoPath()
repo, err := core.RepoPath()
if err != nil {
return err
}
@@ -184,12 +186,12 @@ func addCmd(args []string) error {
var pkgName string
matchedPkg, err := findPackageByTarget(repo, defaultTarget)
matchedPkg, err := core.FindPackageByTarget(repo, defaultTarget)
if err != nil {
return err
}
if matchedPkg != "" {
ok, err := promptYesNo(fmt.Sprintf("Merge into existing package %q?", matchedPkg), true)
ok, err := core.PromptYesNo(fmt.Sprintf("Merge into existing package %q?", matchedPkg), true)
if err != nil {
return err
}
@@ -200,7 +202,7 @@ func addCmd(args []string) error {
if pkgName == "" {
var err error
pkgName, err = promptWithDefault("Package name", defaultPkg)
pkgName, err = core.PromptWithDefault("Package name", defaultPkg)
if err != nil {
return err
}
@@ -212,12 +214,12 @@ func addCmd(args []string) error {
targetRootInput := defaultTarget
if pkgName != matchedPkg || matchedPkg == "" {
var err error
targetRootInput, err = promptWithDefault("Target path", defaultTarget)
targetRootInput, err = core.PromptWithDefault("Target path", defaultTarget)
if err != nil {
return err
}
}
targetRoot, err := filepath.Abs(expandHome(targetRootInput))
targetRoot, err := filepath.Abs(core.ExpandHome(targetRootInput))
if err != nil {
return err
}
@@ -230,14 +232,14 @@ func addCmd(args []string) error {
return err
}
filesDir := filepath.Join(pkgDir, filesDirName)
filesDir := filepath.Join(pkgDir, core.FilesDirName)
if err := os.MkdirAll(filesDir, 0o755); err != nil {
return err
}
configPath := filepath.Join(pkgDir, configFileName)
configPath := filepath.Join(pkgDir, core.ConfigFileName)
if !pkgExists {
if err := writeConfig(configPath, targetRoot); err != nil {
if err := core.WriteConfig(configPath, targetRoot); err != nil {
return err
}
}
@@ -245,7 +247,7 @@ func addCmd(args []string) error {
if pkgExists {
return errors.New("cannot merge a directory into an existing package yet")
}
if err := moveDirContents(absPath, filesDir); err != nil {
if err := core.MoveDirContents(absPath, filesDir); err != nil {
return err
}
} else {
@@ -271,86 +273,24 @@ func addCmd(args []string) error {
}
}
cfg, err := loadConfig(configPath)
cfg, err := core.LoadConfig(configPath)
if err != nil {
return err
}
return applyPackage(filesDir, targetRoot, cfg)
return core.ApplyPackage(filesDir, targetRoot, cfg)
}
func unlinkCmd(args []string) error {
return removeOrUnlink(args, false)
return core.RemoveOrUnlink(args, false)
}
func removeCmd(args []string) error {
return removeOrUnlink(args, true)
}
func removeOrUnlink(args []string, isRemove bool) error {
_ = isRemove // commands are identical, flag kept for clarity
flags, pkgSpec, err := parsePackageFlags(args)
if err != nil {
return err
}
pkgName, relPath, err := resolvePackageSpec(pkgSpec)
if err != nil {
return err
}
repo, err := repoPath()
if err != nil {
return err
}
pkgDir := filepath.Join(repo, pkgName)
configPath := filepath.Join(pkgDir, configFileName)
cfg, err := loadConfig(configPath)
if err != nil {
return err
}
targetRoot, err := selectTarget(cfg)
if err != nil {
return err
}
filesDir := filepath.Join(pkgDir, filesDirName)
if _, err := os.Stat(filesDir); err != nil {
return err
}
if relPath == "" {
if err := restorePackage(filesDir, targetRoot, flags.dryRun); err != nil {
return err
}
if flags.dryRun {
return nil
}
if err := os.RemoveAll(pkgDir); err != nil {
return err
}
fmt.Printf("removed package %s\n", pkgName)
return nil
}
if err := restorePath(filesDir, targetRoot, relPath, flags.dryRun); err != nil {
return err
}
if flags.dryRun {
return nil
}
if err := os.RemoveAll(filepath.Join(filesDir, relPath)); err != nil {
return err
}
fmt.Printf("removed %s:%s\n", pkgName, relPath)
return nil
return core.RemoveOrUnlink(args, true)
}
func statusCmd() error {
repo, err := repoPath()
repo, err := core.RepoPath()
if err != nil {
return err
}
@@ -369,23 +309,23 @@ func statusCmd() error {
totalPackages++
pkgDir := filepath.Join(repo, entry.Name())
configPath := filepath.Join(pkgDir, configFileName)
cfg, err := loadConfig(configPath)
configPath := filepath.Join(pkgDir, core.ConfigFileName)
cfg, err := core.LoadConfig(configPath)
if err != nil {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
targetRoot, err := selectTarget(cfg)
targetRoot, err := core.SelectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
if errors.Is(err, core.ErrTargetDisabled) {
totalPackages-- // don't count disabled packages
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err)
}
filesDir := filepath.Join(pkgDir, filesDirName)
stale, err := findStaleLinks(filesDir, targetRoot)
filesDir := filepath.Join(pkgDir, core.FilesDirName)
stale, err := core.FindStaleLinks(filesDir, targetRoot)
if err != nil {
return fmt.Errorf("%s: %w", entry.Name(), err)
}