translate.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package got
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "os/exec"
  7. "path/filepath"
  8. "strings"
  9. . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
  10. )
  11. var (
  12. OutputDirectory string
  13. CurrentDirectory string
  14. )
  15. func Translate(p *Project) (err error) {
  16. if err = initGlobalVars(p); err != nil {
  17. fmt.Println("error initGlobalVars")
  18. return
  19. }
  20. if err = CreateMainFile(p); err != nil {
  21. fmt.Println("error CreateMainFile")
  22. return
  23. }
  24. if err = createParamsFile(p); err != nil {
  25. fmt.Println("error createParamsFile")
  26. return
  27. }
  28. if err = CreateEnvironment(p); err != nil {
  29. fmt.Println("error CreateEnvironment")
  30. return
  31. }
  32. if err = CreateVariables(p); err != nil {
  33. fmt.Println("error CreateVariables")
  34. return
  35. }
  36. if err = GenSchemas(p); err != nil {
  37. fmt.Println("error GenSchemas")
  38. return
  39. }
  40. if err = GenResources(p); err != nil {
  41. fmt.Println("error GenResources")
  42. return
  43. }
  44. if err = GenMiddlewares(p); err != nil {
  45. fmt.Println("error GenMiddlewares")
  46. return
  47. }
  48. return include(p)
  49. }
  50. func createSymbolicLinks(basedir string) func(string, os.FileInfo, error) error {
  51. var (
  52. callback func(string, os.FileInfo, error) error
  53. input []byte
  54. relative = func(path string) string {
  55. return fmt.Sprintf("%s/%s%s", OutputDirectory, "v1", strings.Replace(filepath.Dir(path), basedir, "", 1))
  56. }
  57. )
  58. callback = func(pathX string, infoX os.FileInfo, errX error) (err error) {
  59. if errX != nil {
  60. fmt.Printf("error 「%v」 at a path 「%q」\n", errX, pathX)
  61. return errX
  62. }
  63. if infoX.IsDir() {
  64. relativedir := strings.Replace(pathX, basedir, "", 1)
  65. if relativedir != "" {
  66. // fmt.Println("crinado diretorio", fmt.Sprintf("%s/%s%s", OutputDirectory, "v1", relativedir))
  67. os.MkdirAll(fmt.Sprintf("%s/%s%s", OutputDirectory, "v1", relativedir), 0777)
  68. }
  69. } else {
  70. // fmt.Println("crinado link symbolico aqui", relative(pathX))
  71. // os.Symlink(pathX, filepath.Join(relative(pathX), infoX.Name()))
  72. if input, err = ioutil.ReadFile(pathX); err != nil {
  73. return
  74. }
  75. // fmt.Println("READ FILE", pathX, filepath.Join(relative(pathX), infoX.Name()))
  76. if err = ioutil.WriteFile(
  77. filepath.Join(relative(pathX), infoX.Name()),
  78. input,
  79. 0644,
  80. ); err != nil {
  81. return
  82. }
  83. // fmt.Printf(" dir ------ : 「%v」\n", pathX)
  84. // fmt.Printf(" dir: 「%v」\n", strings.Replace(filepath.Dir(pathX), basedir, "", 1))
  85. // fmt.Printf(" file name 「%v」\n", infoX.Name())
  86. // fmt.Printf(" extenion: 「%v」\n", filepath.Ext(pathX))
  87. // fmt.Printf(" target: 「%v」\n", relative(pathX))
  88. // fmt.Sprintf("%s/%s%s", OutputDirectory, "v1", strings.Replace(filepath.Dir(pathX), basedir, "", 1)),
  89. }
  90. return nil
  91. }
  92. return callback
  93. }
  94. func include(p *Project) error {
  95. var err error
  96. if err = exec.Command("sh", "-c", fmt.Sprintf("find %s -type l -delete", OutputDirectory)).Run(); err != nil {
  97. fmt.Println("include error ", err)
  98. }
  99. basedir := fmt.Sprintf("%s/include/go", CurrentDirectory)
  100. if err = filepath.Walk(basedir, createSymbolicLinks(basedir)); err != nil {
  101. return err
  102. }
  103. return err
  104. }
  105. func initGlobalVars(p *Project) error {
  106. var err error
  107. if CurrentDirectory, err = os.Getwd(); err != nil {
  108. return err
  109. }
  110. if OutputDirectory, err = filepath.Abs(CurrentDirectory + "/" + p.OutPath); err != nil {
  111. return err
  112. }
  113. return nil
  114. }