Skip to content

Commit

Permalink
fix(PL-2554): fix git reset logic
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmdm committed Mar 25, 2024
1 parent 2cf7990 commit bf9b09e
Showing 1 changed file with 29 additions and 29 deletions.
58 changes: 29 additions & 29 deletions internal/github/github.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package github

import (
"cmp"
"context"
"errors"
"fmt"
"net/http"
"strings"
"sync"

"github.com/bradleyfalzon/ghinstallation/v2"
Expand Down Expand Up @@ -131,23 +131,20 @@ func (r *Repo) init() error {
}
}

if revision := r.Metadata.TargetRevision; revision != "" {
hash, err := repository.ResolveRevision(plumbing.Revision("refs/remotes/origin/" + revision))
if err != nil {
return fmt.Errorf("resolving revision %s: %w", revision, err)
}
revision := cmp.Or(r.Metadata.TargetRevision, "master")

worktree, err := repository.Worktree()
if err != nil {
return fmt.Errorf("getting worktree: %w", err)
}
hash, err := repository.ResolveRevision(plumbing.Revision("refs/remotes/origin/" + revision))
if err != nil {
return fmt.Errorf("resolving revision %s: %w", revision, err)
}

checkoutOpts := &git.CheckoutOptions{
Hash: *hash,
}
if err := worktree.Checkout(checkoutOpts); err != nil {
return fmt.Errorf("checking out: %s: %w", revision, err)
}
worktree, err := repository.Worktree()
if err != nil {
return fmt.Errorf("getting worktree: %w", err)
}

if err := worktree.Checkout(&git.CheckoutOptions{Hash: *hash}); err != nil {
return fmt.Errorf("checking out: %s: %w", revision, err)
}

r.repository = repository
Expand Down Expand Up @@ -191,24 +188,27 @@ func (r *Repo) Pull() error {
return err
}

// If non-fast-forward update, manually reset the branch to the remote HEAD
localHead, err := r.repository.Head()
if err != nil {
return fmt.Errorf("getting local HEAD: %w", err)
}
revision := cmp.Or(r.Metadata.TargetRevision, "master")

remoteRefName := fmt.Sprintf("refs/remotes/origin/%s", strings.Split(localHead.Name().String(), "/")[2])
fetchOpts := &git.FetchOptions{
Auth: auth,
Force: true,
}
if err := r.repository.Fetch(fetchOpts); err != nil && !errors.Is(err, git.NoErrAlreadyUpToDate) {
return fmt.Errorf("fetching from remote: %w", err)
}

remoteHeadHash, err := r.repository.ResolveRevision(plumbing.Revision(remoteRefName))
hash, err := r.repository.ResolveRevision(plumbing.Revision("refs/remotes/origin/" + revision))
if err != nil {
return fmt.Errorf("resolving remote HEAD: %w", err)
return fmt.Errorf("resolving revision %s: %w", revision, err)
}

if localHead.Hash() != *remoteHeadHash {
r.logger.Debug().Msg("resetting to previous commit")
if err := worktree.Reset(&git.ResetOptions{Commit: *remoteHeadHash, Mode: git.HardReset}); err != nil {
return fmt.Errorf("resetting to previous commit: %w", err)
}
resetOpts := &git.ResetOptions{
Commit: *hash,
Mode: git.HardReset,
}
if err := worktree.Reset(resetOpts); err != nil {
return fmt.Errorf("resetting branch: %s: %w", revision, err)
}

return nil
Expand Down

0 comments on commit bf9b09e

Please sign in to comment.