|
@@ -9,16 +9,42 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+func init() {
|
|
|
+ runnable = cmd{}
|
|
|
+}
|
|
|
+
|
|
|
+// logger component for printing status messages to stderr
|
|
|
+type logger interface {
|
|
|
+ Debug(string, ...interface{})
|
|
|
+ Error(string, ...interface{})
|
|
|
+ Info(string, ...interface{})
|
|
|
+}
|
|
|
+
|
|
|
+var stat = os.Stat
|
|
|
+var isNotExist = os.IsNotExist
|
|
|
+
|
|
|
+type runner interface {
|
|
|
+ Run(string, ...string) ([]byte, error)
|
|
|
+}
|
|
|
+
|
|
|
+var runnable runner
|
|
|
+
|
|
|
+type cmd struct{}
|
|
|
+
|
|
|
+func (self cmd) Run(command string, args ...string) ([]byte, error) {
|
|
|
+ return exec.Command(command, args...).Output()
|
|
|
+}
|
|
|
+
|
|
|
// check that a path exists
|
|
|
// does not care if it is a directory
|
|
|
// will not say whether user has rw access, but
|
|
|
// will throw an error if the user cannot read the parent directory
|
|
|
func exists(path string) (bool, error) {
|
|
|
- _, err := os.Stat(path)
|
|
|
+ _, err := stat(path)
|
|
|
if err == nil {
|
|
|
return true, nil
|
|
|
}
|
|
|
- if os.IsNotExist(err) {
|
|
|
+ if isNotExist(err) {
|
|
|
return false, nil
|
|
|
}
|
|
|
return false, err
|
|
@@ -26,9 +52,9 @@ func exists(path string) (bool, error) {
|
|
|
|
|
|
// if within a git repo, gets git version as a short-hash
|
|
|
// otherwise falls back to a unix timestamp
|
|
|
-func version() string {
|
|
|
+func version(dir string) string {
|
|
|
version := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
- out, err := exec.Command("sh", "-c", "git rev-parse --short HEAD").Output()
|
|
|
+ out, err := runnable.Run("sh", "-c", "git", "-C", dir, "rev-parse", "--short", "HEAD")
|
|
|
if err == nil {
|
|
|
version = strings.Trim(string(out), "\n")
|
|
|
}
|
|
@@ -39,9 +65,3 @@ func version() string {
|
|
|
func basename(name string) string {
|
|
|
return filepath.Base(strings.TrimSuffix(name, filepath.Ext(name)))
|
|
|
}
|
|
|
-
|
|
|
-type logger interface {
|
|
|
- Debug(string, ...interface{})
|
|
|
- Error(string, ...interface{})
|
|
|
- Info(string, ...interface{})
|
|
|
-}
|