repo2.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package models
  2. import (
  3. "path"
  4. "time"
  5. git "github.com/speedata/gogit"
  6. )
  7. type RepoFile struct {
  8. Id *git.Oid
  9. Type int
  10. Name string
  11. Path string
  12. Message string
  13. Created time.Time
  14. }
  15. func (f *RepoFile) IsFile() bool {
  16. return f.Type == git.FileModeBlob || f.Type == git.FileModeBlobExec
  17. }
  18. func (f *RepoFile) IsDir() bool {
  19. return f.Type == git.FileModeTree
  20. }
  21. func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, error) {
  22. f := RepoPath(userName, reposName)
  23. repo, err := git.OpenRepository(f)
  24. if err != nil {
  25. return nil, err
  26. }
  27. ref, err := repo.LookupReference("refs/heads/" + branchName)
  28. if err != nil {
  29. return nil, err
  30. }
  31. lastCommit, err := repo.LookupCommit(ref.Oid)
  32. if err != nil {
  33. return nil, err
  34. }
  35. var repofiles []*RepoFile
  36. lastCommit.Tree.Walk(func(dirname string, entry *git.TreeEntry) int {
  37. if dirname == rpath {
  38. repofiles = append(repofiles, &RepoFile{
  39. entry.Id,
  40. entry.Filemode,
  41. entry.Name,
  42. path.Join(dirname, entry.Name),
  43. lastCommit.Message(),
  44. lastCommit.Committer.When,
  45. })
  46. }
  47. return 0
  48. })
  49. return repofiles, nil
  50. }