all repos — homestead @ e8f403864c8a78eb35bfa8f4fd014c37ce8d3b0d

Code for my website

use fetch + checkout instead of pull

Alan Pearce
commit

e8f403864c8a78eb35bfa8f4fd014c37ce8d3b0d

parent

d22af5b8c7fc1b9ef5670269952cf9188bc93579

1 file changed, 25 insertions(+), 9 deletions(-)

jump to
M internal/vcs/repository.gointernal/vcs/repository.go
@@ -7,6 +7,7 @@ "go.alanpearce.eu/website/internal/config"
"go.alanpearce.eu/x/log" "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" "gitlab.com/tozd/go/errors" )
@@ -61,13 +62,8 @@ return false, err
} r.log.Info("updating from", "rev", head.Hash().String()) - wt, err := r.repo.Worktree() - if err != nil { - return false, err - } - err = wt.Pull(&git.PullOptions{ - SingleBranch: true, - Force: true, + err = r.repo.Fetch(&git.FetchOptions{ + Prune: true, }) if err != nil { if errors.Is(err, git.NoErrAlreadyUpToDate) {
@@ -79,11 +75,31 @@
return false, err } - head, err = r.repo.Head() + rem, err := r.repo.Remote("origin") + if err != nil { + return false, err + } + refs, err := rem.List(&git.ListOptions{ + Timeout: 5, + }) + + var hash plumbing.Hash + for _, ref := range refs { + if ref.Name() == plumbing.Main { + hash = ref.Hash() + } + } + + wt, err := r.repo.Worktree() if err != nil { return false, err } - r.log.Info("updated to", "rev", head.Hash().String()) + wt.Checkout(&git.CheckoutOptions{ + Hash: hash, + Force: true, + }) + + r.log.Info("updated to", "rev", hash) return true, r.Clean(wt) }