in worker/api/stack.go [119:173]
func checkout(dir string, commit string) error {
log.Println("Prepare sandboxes repository", dir, commit)
if !plumbing.IsHash(commit) {
return errors.New(fmt.Sprint("invalid commit hash", commit))
}
var progress io.Writer
if config.Verbose {
progress = log.Writer()
}
repo, err := git.PlainClone(dir, false, &git.CloneOptions{
URL: config.GitUrl,
Progress: progress,
})
if err != nil {
repo, err = git.PlainOpen(dir)
if err != nil {
log.Println("Unable to open git repo:", err)
return err
}
}
refHash := plumbing.NewHash(commit)
if len(commit) <= 0 {
ref, err := repo.Head()
if err != nil {
log.Println("Unable to retrive ref to HEAD of git repo:", err)
return err
}
refHash = ref.Hash()
}
wt, err := repo.Worktree()
if err != nil {
log.Println("Unable to read work tree of git repo:", err)
return err
}
log.Println("Checkout", refHash)
err = wt.Checkout(&git.CheckoutOptions{
Hash: refHash,
Force: true,
Keep: false,
})
if err != nil {
log.Println("Unable to checkout git repo:", err)
return err
}
return nil
}