mirror of
https://github.com/ddworken/hishtory.git
synced 2025-02-04 12:39:57 +01:00
Swap from os.Rename to a custom implementation that copies files to support cross-device renames, as needed for making ~/.hishtory/ a tmpfs for tests
This commit is contained in:
parent
069705ef41
commit
c0f33a3456
@ -88,7 +88,7 @@ func BackupAndRestoreWithId(t testing.TB, id string) func() {
|
||||
}
|
||||
for _, file := range renameFiles {
|
||||
touchFile(file)
|
||||
Check(t, os.Rename(file, getBackPath(file, id)))
|
||||
Check(t, rename(file, getBackPath(file, id)))
|
||||
}
|
||||
copyFiles := []string{
|
||||
path.Join(homedir, ".zshrc"),
|
||||
@ -113,7 +113,7 @@ func BackupAndRestoreWithId(t testing.TB, id string) func() {
|
||||
Check(t, os.RemoveAll(path.Join(homedir, data.GetHishtoryPath())))
|
||||
Check(t, os.MkdirAll(path.Join(homedir, data.GetHishtoryPath()), os.ModePerm))
|
||||
for _, file := range renameFiles {
|
||||
checkError(os.Rename(getBackPath(file, id), file))
|
||||
checkError(rename(getBackPath(file, id), file))
|
||||
}
|
||||
for _, file := range copyFiles {
|
||||
checkError(copy(getBackPath(file, id), file))
|
||||
@ -154,7 +154,17 @@ setopt SHARE_HISTORY
|
||||
checkError(err)
|
||||
}
|
||||
|
||||
// Similar to os.Rename, except it supports renaming cross-mount
|
||||
func rename(src, dst string) error {
|
||||
err := copy(src, dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.Remove(src)
|
||||
}
|
||||
|
||||
func copy(src, dst string) error {
|
||||
// Copy the contents of the file
|
||||
in, err := os.Open(src)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -171,7 +181,17 @@ func copy(src, dst string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return out.Close()
|
||||
err = out.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// And copy the permissions
|
||||
srcStat, err := in.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.Chmod(dst, srcStat.Mode())
|
||||
}
|
||||
|
||||
func BackupAndRestoreEnv(k string) func() {
|
||||
|
Loading…
Reference in New Issue
Block a user