diff options
Diffstat (limited to 'vendor/github.com/go-gitea/git/utlis.go')
-rw-r--r-- | vendor/github.com/go-gitea/git/utlis.go | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/github.com/go-gitea/git/utlis.go b/vendor/github.com/go-gitea/git/utlis.go new file mode 100644 index 0000000000..da8c58170e --- /dev/null +++ b/vendor/github.com/go-gitea/git/utlis.go @@ -0,0 +1,93 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "sync" +) + +// objectCache provides thread-safe cache opeations. +type objectCache struct { + lock sync.RWMutex + cache map[string]interface{} +} + +func newObjectCache() *objectCache { + return &objectCache{ + cache: make(map[string]interface{}, 10), + } +} + +func (oc *objectCache) Set(id string, obj interface{}) { + oc.lock.Lock() + defer oc.lock.Unlock() + + oc.cache[id] = obj +} + +func (oc *objectCache) Get(id string) (interface{}, bool) { + oc.lock.RLock() + defer oc.lock.RUnlock() + + obj, has := oc.cache[id] + return obj, has +} + +// isDir returns true if given path is a directory, +// or returns false when it's a file or does not exist. +func isDir(dir string) bool { + f, e := os.Stat(dir) + if e != nil { + return false + } + return f.IsDir() +} + +// isFile returns true if given path is a file, +// or returns false when it's a directory or does not exist. +func isFile(filePath string) bool { + f, e := os.Stat(filePath) + if e != nil { + return false + } + return !f.IsDir() +} + +// isExist checks whether a file or directory exists. +// It returns false when the file or directory does not exist. +func isExist(path string) bool { + _, err := os.Stat(path) + return err == nil || os.IsExist(err) +} + +func concatenateError(err error, stderr string) error { + if len(stderr) == 0 { + return err + } + return fmt.Errorf("%v - %s", err, stderr) +} + +// If the object is stored in its own file (i.e not in a pack file), +// this function returns the full path to the object file. +// It does not test if the file exists. +func filepathFromSHA1(rootdir, sha1 string) string { + return filepath.Join(rootdir, "objects", sha1[:2], sha1[2:]) +} + +func RefEndName(refStr string) string { + if strings.HasPrefix(refStr, BRANCH_PREFIX) { + return refStr[len(BRANCH_PREFIX):] + } + + if strings.HasPrefix(refStr, TAG_PREFIX) { + return refStr[len(TAG_PREFIX):] + } + + return refStr +} |