testdfs.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "runtime/pprof"
  7. "gopkg.in/src-d/go-billy.v4"
  8. )
  9. func main() {
  10. log.SetFlags(log.LstdFlags | log.Lshortfile)
  11. g, err := odb.New(&odb.Option{Cache: odb.CacheAll})
  12. if err != nil {
  13. log.Fatal(err)
  14. }
  15. profFile, err := os.OpenFile("testrun_cpu.prof", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, os.ModePerm)
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. defer profFile.Close()
  20. if err = pprof.StartCPUProfile(profFile); err != nil {
  21. log.Fatal(err)
  22. }
  23. defer pprof.StopCPUProfile()
  24. files, err := getExportFiles("/app/matrix/m3mcc", true, g, odb.NewDFS(g))
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28. log.Println("Files", len(files))
  29. }
  30. func getExportFiles(fileName string, isDir bool, g *odb.Gutil, fs billy.Filesystem) (map[string][]byte, error) {
  31. files := make(map[string][]byte)
  32. if isDir {
  33. fis, err := fs.ReadDir(fileName)
  34. if err != nil {
  35. return nil, err
  36. }
  37. files[fileName+"/"] = []byte("") // empty dir
  38. for _, f := range fis {
  39. fname := fs.Join(fileName, f.Name())
  40. subFiles, err := getExportFiles(fname, f.IsDir(), g, fs)
  41. if err != nil {
  42. return nil, err
  43. }
  44. for k, v := range subFiles {
  45. files[k] = v
  46. }
  47. }
  48. } else {
  49. file, err := fs.Open(fileName)
  50. if err != nil {
  51. return nil, err
  52. }
  53. b, err := ioutil.ReadAll(file)
  54. if err != nil {
  55. return nil, err
  56. }
  57. files[fileName] = b
  58. }
  59. return files, nil
  60. }