mirror of
https://github.com/golang/go
synced 2024-11-26 01:07:57 -07:00
os: drop unnecessary trailing . from symlink targets
Adjust splitPathInRoot to match its documented behavior of dropping . path components except at the end of the path. This function takes a prefix, path, and suffix; previously it would preserve a trailing . at the end of the path even when joining to a suffix. The practical effect of this change is that we we'll skip a pointless open of . when following a symlink under some circumstances: - open "a/target" - "a" is a symlink to "b/." - previously: we rewrite our path to "b/./target" - now: we rewrite our path to "b/target" This is a fairly unimportant edge case, and our observable behavior isn't changing. The main motivation for this change is that the overall behavior is more comprehensible if splitPathInRoot follows its documentation. Change-Id: I96c6a5e3f489cdac991ba1bd702180d69625bc64 Reviewed-on: https://go-review.googlesource.com/c/go/+/630615 Reviewed-by: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
a925402b62
commit
83e6781cb7
@ -230,6 +230,10 @@ func splitPathInRoot(s string, prefix, suffix []string) (_ []string, err error)
|
||||
}
|
||||
i = j
|
||||
}
|
||||
if len(suffix) > 0 && len(parts) > 0 && parts[len(parts)-1] == "." {
|
||||
// Remove a trailing "." component if we're joining to a suffix.
|
||||
parts = parts[:len(parts)-1]
|
||||
}
|
||||
parts = append(parts, suffix...)
|
||||
return parts, nil
|
||||
}
|
||||
|
@ -242,6 +242,14 @@ var rootTestCases = []rootTest{{
|
||||
},
|
||||
open: "b/../a/target",
|
||||
target: "b/c/target",
|
||||
}, {
|
||||
name: "symlink ends in dot",
|
||||
fs: []string{
|
||||
"a => b/.",
|
||||
"b/",
|
||||
},
|
||||
open: "a/target",
|
||||
target: "b/target",
|
||||
}, {
|
||||
name: "directory does not exist",
|
||||
fs: []string{},
|
||||
|
Loading…
Reference in New Issue
Block a user