Allow add to merge into existing package

This commit is contained in:
2026-02-19 17:21:55 +00:00
parent 76aeb0c19e
commit 6333da0a3b
2 changed files with 15 additions and 5 deletions

View File

@@ -11,7 +11,7 @@ go run . <command>
## Commands ## Commands
- `sigil apply` - apply symlinks from `~/.dotfiles` - `sigil apply` - apply symlinks from `~/.dotfiles`
- `sigil add <path>` - add an existing file or folder - `sigil add <path>` - add an existing file or folder (merges into existing package for single files)
## Repo layout ## Repo layout

14
main.go
View File

@@ -247,8 +247,9 @@ func addCmd(args []string) error {
} }
pkgDir := filepath.Join(repo, pkgName) pkgDir := filepath.Join(repo, pkgName)
pkgExists := false
if _, err := os.Stat(pkgDir); err == nil { if _, err := os.Stat(pkgDir); err == nil {
return fmt.Errorf("package %q already exists", pkgName) pkgExists = true
} else if !errors.Is(err, os.ErrNotExist) { } else if !errors.Is(err, os.ErrNotExist) {
return err return err
} }
@@ -259,11 +260,15 @@ func addCmd(args []string) error {
} }
configPath := filepath.Join(pkgDir, configFileName) configPath := filepath.Join(pkgDir, configFileName)
if !pkgExists {
if err := writeConfig(configPath, targetRoot); err != nil { if err := writeConfig(configPath, targetRoot); err != nil {
return err return err
} }
}
if info.IsDir() { if info.IsDir() {
if pkgExists {
return errors.New("cannot merge a directory into an existing package yet")
}
if err := moveDirContents(absPath, filesDir); err != nil { if err := moveDirContents(absPath, filesDir); err != nil {
return err return err
} }
@@ -280,6 +285,11 @@ func addCmd(args []string) error {
if err := os.MkdirAll(filepath.Dir(destPath), 0o755); err != nil { if err := os.MkdirAll(filepath.Dir(destPath), 0o755); err != nil {
return err return err
} }
if _, err := os.Stat(destPath); err == nil {
return fmt.Errorf("destination already exists: %s", destPath)
} else if !errors.Is(err, os.ErrNotExist) {
return err
}
if err := os.Rename(absPath, destPath); err != nil { if err := os.Rename(absPath, destPath); err != nil {
return err return err
} }