repo.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package gindex
  2. import (
  3. "github.com/G-Node/gig"
  4. log "github.com/Sirupsen/logrus"
  5. )
  6. func IndexRepoWithPath(path, ref string, serv *ElServer, repoid string, reponame string) error {
  7. log.Info("Start indexing repository with path: %s", path)
  8. rep, err := gig.OpenRepository(path)
  9. if err != nil {
  10. log.Errorf("Could not open repository: %+v", err)
  11. return err
  12. }
  13. log.Debugf("Opened repository")
  14. commits, err := rep.WalkRef(ref,
  15. func(comitID gig.SHA1) bool {
  16. res, err := serv.HasCommit("commits", GetIndexCommitId(comitID.String(), repoid))
  17. if err != nil {
  18. log.Errorf("Could not querry commit index: %v", err)
  19. return false
  20. }
  21. return !res
  22. })
  23. log.Infof("Found %d commits", len(commits))
  24. for commitid, commit := range commits {
  25. err = indexCommit(commit, repoid, commitid, rep, path, reponame, serv, serv.HasBlob)
  26. }
  27. return nil
  28. }
  29. func ReIndexRepoWithPath(path, ref string, serv *ElServer, repoid string, reponame string) error {
  30. log.Info("Start indexing repository with path: %s", path)
  31. rep, err := gig.OpenRepository(path)
  32. if err != nil {
  33. log.Errorf("Could not open repository: %+v", err)
  34. return err
  35. }
  36. log.Debugf("Opened repository")
  37. commits, err := rep.WalkRef(ref,
  38. func(comitID gig.SHA1) bool {
  39. return true
  40. })
  41. log.Infof("Found %d commits", len(commits))
  42. blobs := make(map[gig.SHA1]bool)
  43. for commitid, commit := range commits {
  44. err = indexCommit(commit, repoid, commitid, rep, path, reponame, serv,
  45. func(indexName string, id gig.SHA1) (bool, error) {
  46. if !blobs[id] {
  47. blobs[id] = true
  48. return false, nil
  49. }
  50. return true, nil
  51. })
  52. }
  53. return nil
  54. }
  55. func indexCommit(commit *gig.Commit, repoid string, commitid gig.SHA1, rep *gig.Repository,
  56. path string, reponame string, serv *ElServer,
  57. indexBlob func(string, gig.SHA1) (bool, error)) error {
  58. err := NewCommitFromGig(commit, repoid, reponame, commitid).AddToIndex(serv, "commits", commitid)
  59. if err != nil {
  60. log.Printf("Indexing commit failed:%+v", err)
  61. }
  62. blobs := make(map[gig.SHA1]*gig.Blob)
  63. rep.GetBlobsForCommit(commit, blobs)
  64. for blid, blob := range blobs {
  65. log.Debugf("Blob %s has Size:%d", blid, blob.Size())
  66. hasBlob, err := indexBlob("blobs", GetIndexBlobId(blid.String(), repoid))
  67. if err != nil {
  68. log.Errorf("Could not querry for blob: %+v", err)
  69. return err
  70. }
  71. if !hasBlob {
  72. bpath, _ := GetBlobPath(blid.String(), commitid.String(), path)
  73. err = NewBlobFromGig(blob, repoid, blid, commitid.String(), bpath, reponame).AddToIndex(serv, "blobs", path, blid)
  74. if err != nil {
  75. log.Debugf("Indexing blob failed: %+v", err)
  76. }
  77. } else {
  78. log.Debugf("Blob there :%s", blid)
  79. }
  80. }
  81. return nil
  82. }