mirror of
https://github.com/golang/go
synced 2024-11-25 05:57:57 -07:00
add path.Base, analogous to Unix basename
R=rsc CC=golang-dev https://golang.org/cl/1633042
This commit is contained in:
parent
5f0319c0a6
commit
62b5c7c69d
@ -186,3 +186,25 @@ func Walk(root string, v Visitor, errors chan<- os.Error) {
|
|||||||
}
|
}
|
||||||
walk(root, f, v, errors)
|
walk(root, f, v, errors)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Base returns the last path element of the slash-separated name.
|
||||||
|
// Trailing slashes are removed before extracting the last element. If the name is
|
||||||
|
// empty, "." is returned. If it consists entirely of slashes, "/" is returned.
|
||||||
|
func Base(name string) string {
|
||||||
|
if name == "" {
|
||||||
|
return "."
|
||||||
|
}
|
||||||
|
// Strip trailing slashes.
|
||||||
|
for len(name) > 0 && name[len(name)-1] == '/' {
|
||||||
|
name = name[0 : len(name)-1]
|
||||||
|
}
|
||||||
|
// Find the last element
|
||||||
|
if i := strings.LastIndex(name, "/"); i >= 0 {
|
||||||
|
name = name[i+1:]
|
||||||
|
}
|
||||||
|
// If empty now, it had only slashes.
|
||||||
|
if name == "" {
|
||||||
|
return "/"
|
||||||
|
}
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
@ -284,3 +284,26 @@ func TestWalk(t *testing.T) {
|
|||||||
t.Errorf("removeTree: %v", err)
|
t.Errorf("removeTree: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var basetests = []CleanTest{
|
||||||
|
// Already clean
|
||||||
|
CleanTest{"", "."},
|
||||||
|
CleanTest{".", "."},
|
||||||
|
CleanTest{"/.", "."},
|
||||||
|
CleanTest{"/", "/"},
|
||||||
|
CleanTest{"////", "/"},
|
||||||
|
CleanTest{"x/", "x"},
|
||||||
|
CleanTest{"abc", "abc"},
|
||||||
|
CleanTest{"abc/def", "def"},
|
||||||
|
CleanTest{"a/b/.x", ".x"},
|
||||||
|
CleanTest{"a/b/c.", "c."},
|
||||||
|
CleanTest{"a/b/c.x", "c.x"},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBase(t *testing.T) {
|
||||||
|
for _, test := range basetests {
|
||||||
|
if s := Base(test.path); s != test.clean {
|
||||||
|
t.Errorf("Base(%q) = %q, want %q", test.path, s, test.clean)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user