%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/waritko/go/src/github.com/odeke-em/go-utils/pkger/src/
Upload File :
Create Path :
Current File : //home/waritko/go/src/github.com/odeke-em/go-utils/pkger/src/pkger.go

package pkger

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
	"strings"
	"time"
)

var prettyGitHashGetArgs = []string{"log", "-n", "1", "--pretty=format:'%H'"}

type PkgInfo struct {
	CommitHash string
	GoVersion  string
	OsInfo     string
	BuildTime  string
}

func (p *PkgInfo) String() string {
	return fmt.Sprintf("Commit Hash: %s\nGo Version: %s\nOS: %s\nBuildTime: %v",
		p.CommitHash, p.GoVersion, p.OsInfo, p.BuildTime)
}

func goSrcify(p string) string {
	goPath := os.Getenv("GOPATH")
	return filepath.Join(goPath, "src", p)
}

var GoSrcify = goSrcify

func Recon(pkgPath string) (pkgInfo *PkgInfo, err error) {
	var gitProgPath, pkgPathAbs string

	// Firstly look up if they've got Git
	gitProgPath, err = exec.LookPath("git")
	if err != nil {
		return
	}

	pkgPathAbs = goSrcify(pkgPath)

	args := []string{gitProgPath}
	args = append(args, prettyGitHashGetArgs...)

	cmd := exec.Cmd{
		Args: args,
		Dir:  pkgPathAbs,
		Path: gitProgPath,
	}

	var output []byte
	if output, err = cmd.Output(); err != nil {
		return
	}

	pkgInfo = &PkgInfo{
		CommitHash: string(output),
		OsInfo:     strings.Join([]string{runtime.GOOS, runtime.GOARCH}, "/"),
		GoVersion:  runtime.Version(),
		BuildTime:  time.Now().String(),
	}

	return
}

Zerion Mini Shell 1.0