mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-17 14:04:52 +02:00
Function to create symlinks atomically
This commit is contained in:
@@ -12,6 +12,30 @@ import (
|
||||
|
||||
var _ = fmt.Print
|
||||
|
||||
func AtomicCreateSymlink(oldname, newname string) (err error) {
|
||||
err = os.Symlink(oldname, newname)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if !errors.Is(err, fs.ErrExist) {
|
||||
return err
|
||||
}
|
||||
for {
|
||||
tempname := newname + RandomFilename()
|
||||
err = os.Symlink(oldname, tempname)
|
||||
if err == nil {
|
||||
err = os.Rename(tempname, newname)
|
||||
if err != nil {
|
||||
os.Remove(tempname)
|
||||
}
|
||||
return err
|
||||
}
|
||||
if !errors.Is(err, fs.ErrExist) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func AtomicWriteFile(path string, data []byte, perm os.FileMode) (err error) {
|
||||
npath, err := filepath.EvalSymlinks(path)
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
|
||||
Reference in New Issue
Block a user