2013-09-23 00:34:53 +00:00
|
|
|
package gitmedia
|
2013-09-22 23:04:06 +00:00
|
|
|
|
2013-09-27 14:39:58 +00:00
|
|
|
import (
|
|
|
|
"fmt"
|
2013-09-27 15:19:54 +00:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
2013-09-27 14:39:58 +00:00
|
|
|
"os/exec"
|
2013-09-27 15:19:54 +00:00
|
|
|
"path/filepath"
|
2013-09-27 14:39:58 +00:00
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2013-09-22 23:04:06 +00:00
|
|
|
const Version = "0.0.1"
|
2013-09-27 14:39:58 +00:00
|
|
|
|
2013-09-27 15:19:54 +00:00
|
|
|
var (
|
|
|
|
LargeSizeThreshold = 5 * 1024 * 1024
|
|
|
|
TempDir = filepath.Join(os.TempDir(), "git-media")
|
|
|
|
LocalMediaDir string
|
|
|
|
)
|
|
|
|
|
|
|
|
func TempFile() (*os.File, error) {
|
|
|
|
return ioutil.TempFile(TempDir, "")
|
|
|
|
}
|
2013-09-27 14:39:58 +00:00
|
|
|
|
|
|
|
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 {
|
|
|
|
fmt.Printf("error running: %s %s\n", name, arg)
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
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 {
|
|
|
|
fmt.Printf("Error trying to create local media directory: %s\n", path)
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return filepath.Join(path, sha)
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
2013-10-04 17:09:03 +00:00
|
|
|
LocalMediaDir = resolveMediaDir()
|
|
|
|
|
|
|
|
if err := os.MkdirAll(TempDir, 0744); err != nil {
|
|
|
|
fmt.Printf("Error trying to create temp directory: %s\n", TempDir)
|
2013-09-27 15:19:54 +00:00
|
|
|
panic(err)
|
|
|
|
}
|
2013-10-04 17:09:03 +00:00
|
|
|
}
|
2013-09-27 15:19:54 +00:00
|
|
|
|
2013-10-04 17:09:03 +00:00
|
|
|
func resolveMediaDir() string {
|
|
|
|
dir := os.Getenv("GIT_MEDIA_DIR")
|
|
|
|
if len(dir) > 0 {
|
|
|
|
return dir
|
|
|
|
}
|
2013-09-27 15:19:54 +00:00
|
|
|
|
2013-10-04 17:09:03 +00:00
|
|
|
dir = os.Getenv("GIT_DIR")
|
|
|
|
if len(dir) == 0 {
|
|
|
|
wd, err := os.Getwd()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
dir = wd
|
2013-09-27 15:19:54 +00:00
|
|
|
}
|
2013-10-04 17:09:03 +00:00
|
|
|
|
|
|
|
return resolveGitDir(dir)
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveGitDir(dir string) string {
|
|
|
|
return filepath.Join(dir, ".git", "media")
|
2013-09-27 15:19:54 +00:00
|
|
|
}
|