Lightweight and easily self-hostable Git forge. git.poy.ooo
git-forge selfhosting homebrew
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798package git
import ( "farga/lib" "io" "path/filepath" "strings"
"github.com/go-git/go-git/v6/plumbing" "github.com/go-git/go-git/v6/plumbing/object")
type File struct { Name string // full file name `example.txt` Path string // full path including file `/lol/example.txt`
IsDir bool
Hash plumbing.Hash ShortHash string Content []byte Mime string // mime type}
type ReadmeType struct { Name string Content string}
// gets a readme inside a given tree. Returns empty if not found.func Readme(tree *object.Tree) ReadmeType { var readmePaths = []string{"README", "README.md", "README.txt", "readme", "readme.md", "readme.txt"} var readme string var name string
for _, n := range readmePaths { file, _ := tree.File(n) if file != nil { name = n readme, _ = file.Contents() } }
return ReadmeType{ Name: name, Content: readme, }}
// lists the files in a single directory given a path.func DirFiles(tree *object.Tree, path string) ([]File, error) { var err error path = strings.TrimSuffix(path, "/")
// if no path, just use root // else, try to use that if path != "" { tree, err = tree.Tree(path) if err != nil { return nil, err } }
var files []File walker := object.NewTreeWalker(tree, false, nil) // non-recursive
for { name, f, err := walker.Next() isDir := !f.Mode.IsFile()
if err == io.EOF { break // if there's nothing else, stop. }
shortHash, err := ShortenHash(f.Hash.String())
if err != nil { break }
file := File{ Name: name, Path: filepath.Join(path, f.Name), Hash: f.Hash, ShortHash: shortHash, IsDir: isDir, }
if isDir { files = lib.Prepend(files, file) } else { files = append(files, file) } }
return files, nil}