diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-06 09:26:46 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-06 09:27:53 +0800 |
commit | da1d8f4e7c332c7109427915e6459b10209cedce (patch) | |
tree | 280b921be3b51f93d82d916b4eaa89387b7102cc /forged/internal/unsorted/git_ref.go | |
parent | git2c, git2d: Rename cmd1 and cmd2 descriptively (diff) | |
download | forge-da1d8f4e7c332c7109427915e6459b10209cedce.tar.gz forge-da1d8f4e7c332c7109427915e6459b10209cedce.tar.zst forge-da1d8f4e7c332c7109427915e6459b10209cedce.zip |
Move the Go stuff to ./forged/v0.1.32
Diffstat (limited to 'forged/internal/unsorted/git_ref.go')
-rw-r--r-- | forged/internal/unsorted/git_ref.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/forged/internal/unsorted/git_ref.go b/forged/internal/unsorted/git_ref.go new file mode 100644 index 0000000..d9735ba --- /dev/null +++ b/forged/internal/unsorted/git_ref.go @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +package unsorted + +import ( + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" +) + +// getRefHash returns the hash of a reference given its +// type and name as supplied in URL queries. +func getRefHash(repo *git.Repository, refType, refName string) (refHash plumbing.Hash, err error) { + var ref *plumbing.Reference + switch refType { + case "": + if ref, err = repo.Head(); err != nil { + return + } + refHash = ref.Hash() + case "commit": + refHash = plumbing.NewHash(refName) + case "branch": + if ref, err = repo.Reference(plumbing.NewBranchReferenceName(refName), true); err != nil { + return + } + refHash = ref.Hash() + case "tag": + if ref, err = repo.Reference(plumbing.NewTagReferenceName(refName), true); err != nil { + return + } + refHash = ref.Hash() + default: + panic("Invalid ref type " + refType) + } + return +} |