From a56a93e19e32344faad48741e5af8d8d400080f0 Mon Sep 17 00:00:00 2001 From: Inhere Date: Wed, 22 Mar 2023 22:00:08 +0800 Subject: [PATCH] :necktie: up(fs): add new fs util JoinSubPaths for join paths --- fsutil/fsutil.go | 8 ++++++++ fsutil/fsutil_nonwin_test.go | 1 + fsutil/fsutil_windows_test.go | 1 + 3 files changed, 10 insertions(+) diff --git a/fsutil/fsutil.go b/fsutil/fsutil.go index aa5c655d0..c4517ca18 100644 --- a/fsutil/fsutil.go +++ b/fsutil/fsutil.go @@ -87,6 +87,14 @@ func JoinPaths(elem ...string) string { return filepath.Join(elem...) } +// JoinSubPaths elements, like the filepath.Join() +func JoinSubPaths(basePath string, elem ...string) string { + paths := make([]string, len(elem)+1) + paths[0] = basePath + copy(paths[1:], elem) + return filepath.Join(paths...) +} + // SlashPath alias of filepath.ToSlash func SlashPath(path string) string { return filepath.ToSlash(path) diff --git a/fsutil/fsutil_nonwin_test.go b/fsutil/fsutil_nonwin_test.go index c50b40de7..2a9ac2c83 100644 --- a/fsutil/fsutil_nonwin_test.go +++ b/fsutil/fsutil_nonwin_test.go @@ -11,6 +11,7 @@ import ( func TestSlashPath_nw(t *testing.T) { assert.Eq(t, "path/to/dir", fsutil.JoinPaths("path", "to", "dir")) + assert.Eq(t, "path/to/dir", fsutil.JoinSubPaths("path", "to", "dir")) } func TestRealpath_nw(t *testing.T) { diff --git a/fsutil/fsutil_windows_test.go b/fsutil/fsutil_windows_test.go index 7a218cb50..665eb5ed5 100644 --- a/fsutil/fsutil_windows_test.go +++ b/fsutil/fsutil_windows_test.go @@ -11,6 +11,7 @@ import ( func TestSlashPath_win(t *testing.T) { assert.Eq(t, "path\\to\\dir", fsutil.JoinPaths("path", "to", "dir")) + assert.Eq(t, "path\\to\\dir", fsutil.JoinSubPaths("path", "to", "dir")) } func TestRealpath_win(t *testing.T) {