Fix #104218: Shaman unit test TestGarbageCollect is unstable
Copy files instead of hard-linking. The hard-links seemed to have some weird behaviour, at least on Windows 10 where I tested this.
This commit is contained in:
parent
c1fe3fb740
commit
87ff1187ef
@ -23,6 +23,8 @@
|
|||||||
package filestore
|
package filestore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -75,7 +77,7 @@ func (s *Store) MustStoreFileForTest(checksum string, filesize int64, contents [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LinkTestFileStore creates a copy of _test_file_store by hard-linking files into a temporary directory.
|
// LinkTestFileStore creates a copy of _test_file_store in a temporary directory.
|
||||||
// Panics if there are any errors.
|
// Panics if there are any errors.
|
||||||
func LinkTestFileStore(cloneTo string) {
|
func LinkTestFileStore(cloneTo string) {
|
||||||
_, myFilename, _, _ := runtime.Caller(0)
|
_, myFilename, _, _ := runtime.Caller(0)
|
||||||
@ -96,7 +98,7 @@ func LinkTestFileStore(cloneTo string) {
|
|||||||
if info.IsDir() {
|
if info.IsDir() {
|
||||||
return os.MkdirAll(targetPath, 0755)
|
return os.MkdirAll(targetPath, 0755)
|
||||||
}
|
}
|
||||||
err = os.Link(visitPath, targetPath)
|
err = copyFile(visitPath, targetPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -107,3 +109,33 @@ func LinkTestFileStore(cloneTo string) {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func copyFile(sourcePath, destPath string) error {
|
||||||
|
// Open the source file.
|
||||||
|
srcFile, err := os.Open(sourcePath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not open %q: %w", sourcePath, err)
|
||||||
|
}
|
||||||
|
defer srcFile.Close()
|
||||||
|
|
||||||
|
// Create the destination file.
|
||||||
|
destFile, err := os.Create(destPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not create %q: %w", destPath, err)
|
||||||
|
}
|
||||||
|
defer destFile.Close()
|
||||||
|
|
||||||
|
// Copy the contents from source to destination.
|
||||||
|
_, err = io.Copy(destFile, srcFile)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not copy contents of %q to %q: %w", sourcePath, destPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flush any buffered data to ensure completion.
|
||||||
|
err = destFile.Sync()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not sync buffer of %q to disk: %w", destPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user