2016-11-04 01:16:01 +03:00
// 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"
"strings"
"sync"
)
2016-12-22 12:30:52 +03:00
// ObjectCache provides thread-safe cache opeations.
type ObjectCache struct {
2016-11-04 01:16:01 +03:00
lock sync . RWMutex
cache map [ string ] interface { }
}
2016-12-22 12:30:52 +03:00
func newObjectCache ( ) * ObjectCache {
return & ObjectCache {
2016-11-04 01:16:01 +03:00
cache : make ( map [ string ] interface { } , 10 ) ,
}
}
2016-12-22 12:30:52 +03:00
// Set add obj to cache
func ( oc * ObjectCache ) Set ( id string , obj interface { } ) {
2016-11-04 01:16:01 +03:00
oc . lock . Lock ( )
defer oc . lock . Unlock ( )
oc . cache [ id ] = obj
}
2016-12-22 12:30:52 +03:00
// Get get cached obj by id
func ( oc * ObjectCache ) Get ( id string ) ( interface { } , bool ) {
2016-11-04 01:16:01 +03:00
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 )
}
2016-12-22 12:30:52 +03:00
// RefEndName return the end name of a ref name
2016-11-04 01:16:01 +03:00
func RefEndName ( refStr string ) string {
2016-12-22 12:30:52 +03:00
if strings . HasPrefix ( refStr , BranchPrefix ) {
return refStr [ len ( BranchPrefix ) : ]
2016-11-04 01:16:01 +03:00
}
2016-12-22 12:30:52 +03:00
if strings . HasPrefix ( refStr , TagPrefix ) {
return refStr [ len ( TagPrefix ) : ]
2016-11-04 01:16:01 +03:00
}
return refStr
}