mirror of
https://github.com/rclone/rclone.git
synced 2024-11-25 08:38:54 +08:00
bucket: add Join function for a simplified path.Join
This commit is contained in:
parent
f9d50f677d
commit
d7ad13d929
|
@ -29,6 +29,19 @@ func Split(absPath string) (bucket, bucketPath string) {
|
||||||
return absPath[:slash], absPath[slash+1:]
|
return absPath[:slash], absPath[slash+1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Join path1 and path2
|
||||||
|
//
|
||||||
|
// Like path.Join but does not clean the path - useful to preserve trailing /
|
||||||
|
func Join(path1, path2 string) string {
|
||||||
|
if path1 == "" {
|
||||||
|
return path2
|
||||||
|
}
|
||||||
|
if path2 == "" {
|
||||||
|
return path1
|
||||||
|
}
|
||||||
|
return strings.TrimSuffix(path1, "/") + "/" + strings.TrimPrefix(path2, "/")
|
||||||
|
}
|
||||||
|
|
||||||
// Cache stores whether buckets are available and their IDs
|
// Cache stores whether buckets are available and their IDs
|
||||||
type Cache struct {
|
type Cache struct {
|
||||||
mu sync.Mutex // mutex to protect created and deleted
|
mu sync.Mutex // mutex to protect created and deleted
|
||||||
|
|
|
@ -2,6 +2,7 @@ package bucket
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -24,6 +25,26 @@ func TestSplit(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestJoin(t *testing.T) {
|
||||||
|
for _, test := range []struct {
|
||||||
|
in1, in2 string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{in1: "", in2: "", want: ""},
|
||||||
|
{in1: "in1", in2: "", want: "in1"},
|
||||||
|
{in1: "", in2: "in2", want: "in2"},
|
||||||
|
{in1: "in1", in2: "in2", want: "in1/in2"},
|
||||||
|
{in1: "in1/", in2: "in2", want: "in1/in2"},
|
||||||
|
{in1: "in1", in2: "/in2", want: "in1/in2"},
|
||||||
|
{in1: "in1", in2: "in2/", want: "in1/in2/"},
|
||||||
|
{in1: "/in1", in2: "/in2", want: "/in1/in2"},
|
||||||
|
{in1: "/in1", in2: "../in2", want: "/in1/../in2"},
|
||||||
|
} {
|
||||||
|
got := Join(test.in1, test.in2)
|
||||||
|
assert.Equal(t, test.want, got, fmt.Sprintf("in1=%q, in2=%q", test.in1, test.in2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCache(t *testing.T) {
|
func TestCache(t *testing.T) {
|
||||||
c := NewCache()
|
c := NewCache()
|
||||||
errBoom := errors.New("boom")
|
errBoom := errors.New("boom")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user