git-lfs/gitmedia.go

101 lines
2.2 KiB
Go
Raw Normal View History

2013-09-23 00:34:53 +00:00
package gitmedia
import (
"fmt"
2013-09-27 15:19:54 +00:00
"io/ioutil"
"os"
"os/exec"
2013-09-27 15:19:54 +00:00
"path/filepath"
"strings"
)
const Version = "0.0.1"
2013-09-27 15:19:54 +00:00
var (
LargeSizeThreshold = 5 * 1024 * 1024
TempDir = filepath.Join(os.TempDir(), "git-media")
2014-02-01 20:08:53 +00:00
LocalWorkingDir string
LocalGitDir string
2013-09-27 15:19:54 +00:00
LocalMediaDir string
2013-12-05 21:31:59 +00:00
LocalLogDir string
2013-09-27 15:19:54 +00:00
)
func TempFile() (*os.File, error) {
return ioutil.TempFile(TempDir, "")
}
func SimpleExec(name string, arg ...string) string {
output, err := exec.Command(name, arg...).Output()
if _, ok := err.(*exec.ExitError); ok {
return ""
} else if err != nil {
Panic(err, "Error running %s %s", name, arg)
}
return strings.Trim(string(output), " \n")
}
2013-09-27 15:19:54 +00:00
func LocalMediaPath(sha string) string {
path := filepath.Join(LocalMediaDir, sha[0:2], sha[2:4])
if err := os.MkdirAll(path, 0744); err != nil {
Panic(err, "Error trying to create local media directory: %s", path)
2013-09-27 15:19:54 +00:00
}
return filepath.Join(path, sha)
}
func Environ() []string {
osEnviron := os.Environ()
2014-02-01 20:08:53 +00:00
env := make([]string, 4, len(osEnviron)+4)
env[0] = fmt.Sprintf("LocalWorkingDir=%s", LocalWorkingDir)
env[1] = fmt.Sprintf("LocalGitDir=%s", LocalGitDir)
env[2] = fmt.Sprintf("LocalMediaDir=%s", LocalMediaDir)
env[3] = fmt.Sprintf("TempDir=%s", TempDir)
for _, e := range os.Environ() {
if !strings.Contains(e, "GIT_") {
continue
}
2014-02-01 20:11:33 +00:00
env = append(env, e)
}
return env
}
2013-09-27 15:19:54 +00:00
func init() {
2014-02-01 20:08:53 +00:00
LocalWorkingDir, LocalGitDir = resolveGitDir()
LocalMediaDir = filepath.Join(LocalGitDir, "media")
2013-12-05 21:31:59 +00:00
LocalLogDir = filepath.Join(LocalMediaDir, "logs")
2013-10-21 18:22:02 +00:00
queueDir = setupQueueDir()
2013-10-04 17:09:03 +00:00
if err := os.MkdirAll(TempDir, 0744); err != nil {
Panic(err, "Error trying to create temp directory: %s", TempDir)
2013-09-27 15:19:54 +00:00
}
2013-10-04 17:09:03 +00:00
}
2013-09-27 15:19:54 +00:00
2014-02-01 20:08:53 +00:00
func resolveGitDir() (string, string) {
wd, err := os.Getwd()
if err != nil {
Panic(err, "Error reading working directory")
2013-10-04 17:09:03 +00:00
}
2013-09-27 15:19:54 +00:00
2014-02-01 20:08:53 +00:00
return recursiveResolveGitDir(wd)
2013-10-04 17:09:03 +00:00
}
2014-02-01 20:08:53 +00:00
func recursiveResolveGitDir(dir string) (string, string) {
if filepath.Base(dir) == gitExt {
return filepath.Dir(dir), dir
}
2014-02-01 19:52:55 +00:00
gitDir := filepath.Join(dir, gitExt)
if info, err := os.Stat(gitDir); err == nil {
if info.IsDir() {
2014-02-01 20:08:53 +00:00
return dir, gitDir
2014-02-01 19:52:55 +00:00
}
}
2014-02-01 20:08:53 +00:00
2014-02-01 19:52:55 +00:00
return recursiveResolveGitDir(filepath.Dir(dir))
}
const gitExt = ".git"