make relative links when the canonical and new db paths are in the same directory

This commit is contained in:
vyzo 2021-07-28 11:56:23 +03:00 committed by Jennifer Wang
parent c25ed49f0d
commit 21b1059ba5

View File

@ -355,7 +355,7 @@ func (b *Blockstore) movingGC() error {
panic(fmt.Errorf("error renaming old badger db dir from %s to %s: %w; USER ACTION REQUIRED", dbPath, backupPath, err)) //nolint
}
if err = os.Symlink(newPath, dbPath); err != nil {
if err = b.symlink(newPath, dbPath); err != nil {
// same here; the db path is pointing to the void. panic and let the user fix.
panic(fmt.Errorf("error symlinking new badger db dir from %s to %s: %w; USER ACTION REQUIRED", newPath, dbPath, err)) //nolint
}
@ -367,6 +367,18 @@ func (b *Blockstore) movingGC() error {
return nil
}
// symlink creates a symlink from path to linkPath; the link is relative if the two are
// in the same directory
func (b *Blockstore) symlink(path, linkTo string) error {
pathDir := filepath.Dir(path)
linkDir := filepath.Dir(linkTo)
if pathDir == linkDir {
path = filepath.Base(path)
}
return os.Symlink(path, linkTo)
}
// doCopy copies a badger blockstore to another, with an optional filter; if the filter
// is not nil, then only cids that satisfy the filter will be copied.
func (b *Blockstore) doCopy(from, to *badger.DB) error {