Lightweight and easily self-hostable Git forge. git.poy.ooo
git-forge selfhosting homebrew
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980package git
import ( "farga/lib" errs "farga/lib/errors" "time"
"github.com/go-git/go-git/v6" "github.com/go-git/go-git/v6/plumbing/object")
type GitLogOptions struct { Repo *git.Repository Branch string FileName string}
type GitCommitAuthor struct { Name string Email string}
type Commit struct { Hash string ShortHash string Author GitCommitAuthor Message string Time time.Time}
type Log []Commit
// gets the log of a branch or file. Don't forget to pass in your repo!func GetLog(o GitLogOptions) (Log, error) { if o.Repo == nil { return nil, errs.ErrMissingProperty("Repo") }
ref, err := ResolveHead(o.Repo, o.Branch)
if err != nil { return nil, err }
if ref == nil { return nil, ErrRepoHasNoHead }
gitLog, err := o.Repo.Log(&git.LogOptions{ From: ref.Hash(), })
if err != nil { return nil, err }
var log Log
gitLog.ForEach(func(c *object.Commit) error { log = append(log, Commit{ Hash: c.Hash.String(), ShortHash: ShortenHash(c.Hash.String()), Author: GitCommitAuthor{ Name: c.Author.Name, Email: c.Author.Email, }, Message: c.Message, Time: c.Author.When, }) return nil })
return log, nil}
// shortens a hash.func ShortenHash(hash string) string { return hash[:lib.GitHashLength]}