Skip to content

Commit b60a04d

Browse files
Nils WireklintNils Wireklint
Nils Wireklint
authored and
Nils Wireklint
committed
Create NewLocalDirectory with path.Parser
1 parent bb96fcb commit b60a04d

File tree

5 files changed

+34
-7
lines changed

5 files changed

+34
-7
lines changed

pkg/blobstore/configuration/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ go_library(
3737
"//pkg/digest",
3838
"//pkg/eviction",
3939
"//pkg/filesystem",
40+
"//pkg/filesystem/path",
4041
"//pkg/grpc",
4142
"//pkg/http",
4243
"//pkg/program",

pkg/blobstore/configuration/new_blob_access.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/buildbarn/bb-storage/pkg/digest"
1919
"github.com/buildbarn/bb-storage/pkg/eviction"
2020
"github.com/buildbarn/bb-storage/pkg/filesystem"
21+
"github.com/buildbarn/bb-storage/pkg/filesystem/path"
2122
"github.com/buildbarn/bb-storage/pkg/grpc"
2223
"github.com/buildbarn/bb-storage/pkg/program"
2324
pb "github.com/buildbarn/bb-storage/pkg/proto/configuration/blobstore"
@@ -217,7 +218,11 @@ func (nc *simpleNestedBlobAccessCreator) newNestedBlobAccessBare(configuration *
217218
} else {
218219
// Persistency is enabled. Reload previous
219220
// persistent state from disk.
220-
persistentStateDirectory, err := filesystem.NewLocalDirectory(persistent.StateDirectoryPath)
221+
parser, err := path.NewLocalParser(persistent.StateDirectoryPath)
222+
if err != nil {
223+
return BlobAccessInfo{}, "", util.StatusWrapf(err, "Failed to parse persistent state directory path %#v", persistent.StateDirectoryPath)
224+
}
225+
persistentStateDirectory, err := filesystem.NewLocalDirectory(parser)
221226
if err != nil {
222227
return BlobAccessInfo{}, "", util.StatusWrapf(err, "Failed to open persistent state directory %#v", persistent.StateDirectoryPath)
223228
}

pkg/filesystem/local_directory_test.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@ import (
1313
)
1414

1515
func openTmpDir(t *testing.T) filesystem.DirectoryCloser {
16-
d, err := filesystem.NewLocalDirectory(t.TempDir())
16+
parser, err := path.NewLocalParser(t.TempDir())
17+
require.NoError(t, err)
18+
d, err := filesystem.NewLocalDirectory(parser)
1719
require.NoError(t, err)
1820
return d
1921
}
2022

2123
func TestLocalDirectoryCreationFailure(t *testing.T) {
22-
_, err := filesystem.NewLocalDirectory("/nonexistent")
24+
parser, err := path.NewUNIXParser("/nonexistent")
25+
require.NoError(t, err)
26+
_, err = filesystem.NewLocalDirectory(parser)
2327
require.True(t, os.IsNotExist(err))
2428
}
2529

pkg/filesystem/local_directory_unix.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,17 @@ func newLocalDirectoryFromFileDescriptor(fd int) (*localDirectory, error) {
3333

3434
// NewLocalDirectory creates a directory handle that corresponds to a
3535
// local path on the system.
36-
func NewLocalDirectory(path string) (DirectoryCloser, error) {
37-
fd, err := unix.Openat(unix.AT_FDCWD, path, unix.O_DIRECTORY|unix.O_NOFOLLOW|unix.O_RDONLY, 0)
36+
func NewLocalDirectory(directoryParser path.Parser) (DirectoryCloser, error) {
37+
directoryPath, scopeWalker := path.EmptyBuilder.Join(path.VoidScopeWalker)
38+
if err := path.Resolve(directoryParser, scopeWalker); err != nil {
39+
return nil, util.StatusWrap(err, "Failed to resolve directory")
40+
}
41+
pathString, err := path.GetLocalString(directoryPath)
42+
if err != nil {
43+
return nil, util.StatusWrap(err, "Failed to create local representation of build directory")
44+
}
45+
46+
fd, err := unix.Openat(unix.AT_FDCWD, pathString, unix.O_DIRECTORY|unix.O_NOFOLLOW|unix.O_RDONLY, 0)
3847
if err != nil {
3948
return nil, err
4049
}

pkg/filesystem/local_directory_windows.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,16 @@ func newLocalDirectory(absPath string, openReparsePoint bool) (DirectoryCloser,
108108
return newLocalDirectoryFromHandle(handle)
109109
}
110110

111-
func NewLocalDirectory(path string) (DirectoryCloser, error) {
112-
absPath := "\\??\\" + path
111+
func NewLocalDirectory(directoryParser path.Parser) (DirectoryCloser, error) {
112+
directoryPath, scopeWalker := path.EmptyBuilder.Join(path.VoidScopeWalker)
113+
if err := path.Resolve(directoryParser, scopeWalker); err != nil {
114+
return nil, util.StatusWrap(err, "Failed to resolve directory")
115+
}
116+
pathString, err := path.GetLocalString(directoryPath)
117+
if err != nil {
118+
return nil, util.StatusWrap(err, "Failed to create local representation of build directory")
119+
}
120+
absPath := "\\??\\" + pathString
113121
return newLocalDirectory(absPath, true)
114122
}
115123

0 commit comments

Comments
 (0)