go-billy icon indicating copy to clipboard operation
go-billy copied to clipboard

memfs doesn't handle creating and opening files in directory which is a symlink

Open gildor478 opened this issue 6 years ago • 0 comments

Whenever I create a symlink to a directory, I cannot create/open files using this symlink. It works perfectly, if I use "osfs".

Here is a test for this bug:

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"gopkg.in/src-d/go-billy.v4/memfs"
	"gopkg.in/src-d/go-billy.v4/util"
)

func TestSymlink_Mkdir(t *testing.T) {
	fs := memfs.New()
	//fs := osfs.New("/tmp")
	require.NoError(t, fs.MkdirAll("dir", 0755))
	require.NoError(t, util.WriteFile(fs, "dir/file.txt", nil, 0644))
	require.NoError(t, fs.Symlink("dir", "link"))

	_, err := fs.Stat("dir/file.txt")
	assert.NoError(t, err, "reading directly /dir/file.txt")
	_, err = fs.Stat("link/file.txt")
	assert.NoError(t, err, "reading /dir/file.txt through /link")

	fd, err := fs.Create("link/file2.txt")
	assert.NoError(t, err)
	assert.NoError(t, fd.Close())
	_, err = fs.Stat("dir/file2.txt")
	assert.NoError(t, err, "reading file2.txt created into the /link")
}

Let me know if I have made a mistake.

gildor478 avatar Jul 12 '19 23:07 gildor478