1 Star 0 Fork 0

iamRegina / govendor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
path.go 2.61 KB
一键复制 编辑 原始数据 按行查看 历史
Daniel Theophanes 提交于 2016-03-08 17:32 . context: finish fetch revision
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package pathos
import (
"path/filepath"
"runtime"
"strings"
)
func SlashToFilepath(path string) string {
if '/' == filepath.Separator {
return path
}
return strings.Replace(path, "/", string(filepath.Separator), -1)
}
func SlashToImportPath(path string) string {
return strings.Replace(path, `\`, "/", -1)
}
func FileHasPrefix(s, prefix string) bool {
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
s = strings.ToLower(s)
prefix = strings.ToLower(prefix)
}
return strings.HasPrefix(s, prefix)
}
func FileTrimPrefix(s, prefix string) string {
if FileHasPrefix(s, prefix) {
return s[len(prefix):]
}
return s
}
func FileHasSuffix(s, suffix string) bool {
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
s = strings.ToLower(s)
suffix = strings.ToLower(suffix)
}
return strings.HasSuffix(s, suffix)
}
func FileTrimSuffix(s, suffix string) string {
if FileHasSuffix(s, suffix) {
return s[:len(s)-len(suffix)]
}
return s
}
var slashSep = filepath.Separator
func TrimCommonSuffix(base, suffix string) (string, string) {
a, b := base, suffix
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
a = strings.ToLower(a)
b = strings.ToLower(b)
}
a = strings.TrimSuffix(strings.TrimSuffix(a, "\\"), "/")
b = strings.TrimSuffix(strings.TrimSuffix(b, "\\"), "/")
base = strings.TrimSuffix(strings.TrimSuffix(base, "\\"), "/")
ff := func(r rune) bool {
return r == '/' || r == '\\'
}
aa := strings.FieldsFunc(a, ff)
bb := strings.FieldsFunc(b, ff)
min := len(aa)
if min > len(bb) {
min = len(bb)
}
i := 1
for ; i <= min; i++ {
// fmt.Printf("(%d) end aa: %q, end bb: %q\n", i, aa[len(aa)-i], bb[len(bb)-i])
if aa[len(aa)-i] == bb[len(bb)-i] {
continue
}
break
}
baseParts := strings.FieldsFunc(base, ff)
// fmt.Printf("base parts: %q\n", baseParts)
base1 := FileTrimSuffix(base, strings.Join(baseParts[len(baseParts)-i+1:], string(slashSep)))
base1 = strings.TrimSuffix(strings.TrimSuffix(base1, "\\"), "/")
base2 := strings.Trim(base[len(base1):], `\/`)
return base1, base2
}
func FileStringEquals(s1, s2 string) bool {
if len(s1) == 0 {
return len(s2) == 0
}
if len(s2) == 0 {
return len(s1) == 0
}
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
s1 = strings.ToLower(s1)
s2 = strings.ToLower(s2)
}
r1End := s1[len(s1)-1]
r2End := s2[len(s2)-1]
if r1End == '/' || r1End == '\\' {
s1 = s1[:len(s1)-1]
}
if r2End == '/' || r2End == '\\' {
s2 = s2[:len(s2)-1]
}
return s1 == s2
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/iamReginaaaa/govendor.git
git@gitee.com:iamReginaaaa/govendor.git
iamReginaaaa
govendor
govendor
v1.0.0-beta

搜索帮助

344bd9b3 5694891 D2dac590 5694891