summaryrefslogtreecommitdiff
path: root/internal/file/symlink.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-04 23:47:32 +0300
committerPaul Buetow <paul@buetow.org>2026-07-04 23:47:32 +0300
commit8228ba742f6b23a93e6a00006feba29225ea89c7 (patch)
tree0147bbb82f99a6056f43492b661ede7fea7e8bea /internal/file/symlink.go
parent6a2796f31444b21488ab9d383292841613a1d9c7 (diff)
refactor
Diffstat (limited to 'internal/file/symlink.go')
-rw-r--r--internal/file/symlink.go56
1 files changed, 0 insertions, 56 deletions
diff --git a/internal/file/symlink.go b/internal/file/symlink.go
deleted file mode 100644
index 8d014c2..0000000
--- a/internal/file/symlink.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package file
-
-import (
- "fmt"
- "log"
- "os"
-)
-
-// haveSymlink ensures f.path is a symlink pointing at f.symlinkTarget.
-//
-// Idempotency and clobber policy:
-// - already points at the target: nothing to do.
-// - points elsewhere: the link is removed and recreated.
-// - a real file/dir is in the way: it is renamed to "<path>.old" before the
-// link is created (matching the Rexfile's rename-existing behavior).
-func (f *File) haveSymlink() error {
- log.Printf("processing symlink: %s -> %s", f.path, f.symlinkTarget)
-
- if f.symlinkTarget == "" {
- return fmt.Errorf("symlink %s has no target", f.path)
- }
-
- info, err := os.Lstat(f.path)
- switch {
- case err == nil && info.Mode()&os.ModeSymlink != 0:
- current, err := os.Readlink(f.path)
- if err != nil {
- return fmt.Errorf("failed to read symlink %s: %w", f.path, err)
- }
- if current == f.symlinkTarget {
- log.Printf("symlink %s already points at %s", f.path, f.symlinkTarget)
- return nil
- }
- log.Printf("repointing symlink %s from %s to %s", f.path, current, f.symlinkTarget)
- if err := os.Remove(f.path); err != nil {
- return fmt.Errorf("failed to remove stale symlink %s: %w", f.path, err)
- }
-
- case err == nil:
- old := f.path + ".old"
- log.Printf("%s is a real file/dir, renaming to %s", f.path, old)
- if err := os.Rename(f.path, old); err != nil {
- return fmt.Errorf("failed to move existing %s aside: %w", f.path, err)
- }
-
- case !os.IsNotExist(err):
- return fmt.Errorf("failed to stat %s: %w", f.path, err)
- }
-
- if err := os.Symlink(f.symlinkTarget, f.path); err != nil {
- return fmt.Errorf("failed to create symlink %s -> %s: %w", f.path, f.symlinkTarget, err)
- }
-
- log.Printf("created symlink %s -> %s", f.path, f.symlinkTarget)
- return nil
-}