diff options
author | Paulo Gomes <pjbgf@linux.com> | 2023-12-14 09:22:18 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-14 09:22:18 +0000 |
commit | 02bed284891e49ff594354101c897a29af3dbb43 (patch) | |
tree | d57b186e078d2d253304fc4784ed3d207d3b7e4c /worktree.go | |
parent | c8348a650177cb0fbb9ef3d0551b5a969c6b4ac3 (diff) | |
parent | 1e2b0d67ae859dc3c81fc4455290287235395d09 (diff) | |
download | go-git-02bed284891e49ff594354101c897a29af3dbb43.tar.gz |
Merge pull request #966 from aymanbagabas/taghash-checkout
git: worktree checkout tag hash id (#959)
Diffstat (limited to 'worktree.go')
-rw-r--r-- | worktree.go | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/worktree.go b/worktree.go index ad525c1..4dfe036 100644 --- a/worktree.go +++ b/worktree.go @@ -227,20 +227,17 @@ func (w *Worktree) createBranch(opts *CheckoutOptions) error { } func (w *Worktree) getCommitFromCheckoutOptions(opts *CheckoutOptions) (plumbing.Hash, error) { - if !opts.Hash.IsZero() { - return opts.Hash, nil - } - - b, err := w.r.Reference(opts.Branch, true) - if err != nil { - return plumbing.ZeroHash, err - } + hash := opts.Hash + if hash.IsZero() { + b, err := w.r.Reference(opts.Branch, true) + if err != nil { + return plumbing.ZeroHash, err + } - if !b.Name().IsTag() { - return b.Hash(), nil + hash = b.Hash() } - o, err := w.r.Object(plumbing.AnyObject, b.Hash()) + o, err := w.r.Object(plumbing.AnyObject, hash) if err != nil { return plumbing.ZeroHash, err } @@ -248,7 +245,7 @@ func (w *Worktree) getCommitFromCheckoutOptions(opts *CheckoutOptions) (plumbing switch o := o.(type) { case *object.Tag: if o.TargetType != plumbing.CommitObject { - return plumbing.ZeroHash, fmt.Errorf("unsupported tag object target %q", o.TargetType) + return plumbing.ZeroHash, fmt.Errorf("%w: tag target %q", object.ErrUnsupportedObject, o.TargetType) } return o.Target, nil @@ -256,7 +253,7 @@ func (w *Worktree) getCommitFromCheckoutOptions(opts *CheckoutOptions) (plumbing return o.Hash, nil } - return plumbing.ZeroHash, fmt.Errorf("unsupported tag target %q", o.Type()) + return plumbing.ZeroHash, fmt.Errorf("%w: %q", object.ErrUnsupportedObject, o.Type()) } func (w *Worktree) setHEADToCommit(commit plumbing.Hash) error { |