move core logic to internal/core package, bump to 0.1.3
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user