Lightweight and easily self-hostable Git forge. git.poy.ooo
git-forge selfhosting homebrew
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091package 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 Readme struct { Name string Content string}
// gets a readme inside a given tree. Returns empty if not found.func GetReadme(tree *object.Tree) Readme { 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 Readme{ Name: name, Content: readme, }}
// lists the files in a single directory given a path.func GetDirFiles(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. }
file := File{ Name: name, Path: filepath.Join(path, f.Name), Hash: f.Hash, ShortHash: ShortenHash(f.Hash.String()), IsDir: !f.Mode.IsFile(), } if isDir == true { files = lib.Prepend(files, file) } else { files = append(files, file) } }
return files, nil}