printsrcinfo.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package srcinfo
  2. import (
  3. "bytes"
  4. )
  5. func appendHeader(buffer *bytes.Buffer, key string, value string) {
  6. if value == "" {
  7. return
  8. }
  9. buffer.WriteString(key + " = " + value + "\n")
  10. }
  11. func appendValue(buffer *bytes.Buffer, key string, value string) {
  12. if value == "" {
  13. return
  14. }
  15. if value == EmptyOverride {
  16. value = ""
  17. }
  18. buffer.WriteString("\t" + key + " = " + value + "\n")
  19. }
  20. func appendMultiValue(buffer *bytes.Buffer, key string, values []string) {
  21. for _, value := range values {
  22. if value == EmptyOverride {
  23. value = ""
  24. }
  25. buffer.WriteString("\t" + key + " = " + value + "\n")
  26. }
  27. }
  28. func appendMultiArchValue(buffer *bytes.Buffer, key string, values []ArchString) {
  29. for _, value := range values {
  30. if value.Value == EmptyOverride {
  31. value.Value = ""
  32. }
  33. if value.Arch == "" {
  34. buffer.WriteString("\t" + key + " = " + value.Value + "\n")
  35. } else {
  36. buffer.WriteString("\t" + key + "_" + value.Arch + " = " + value.Value + "\n")
  37. }
  38. }
  39. }
  40. //String generates a string that should be similar to the srcinfo data used to
  41. //create this Srcinfo struct. Fields will be printed in order and with the same
  42. //whitespcae rules that `makepkg --printsrcinfo` uses.
  43. //
  44. // The order of each global field is as follows:
  45. // pkgdesc
  46. // pkgver
  47. // pkgrel
  48. // epoch
  49. // url
  50. // install
  51. // changelog
  52. // arch
  53. // groups
  54. // license
  55. // checkdepends
  56. // makedepends
  57. // depends
  58. // optdepends
  59. // provides
  60. // conflicts
  61. // replaces
  62. // noextract
  63. // options
  64. // backup
  65. // source
  66. // validpgpkeys
  67. // md5suns
  68. // sha1sums
  69. // sha224sums
  70. // sha256sums
  71. // sha384sums
  72. // sha512sums
  73. //
  74. // The order of each overwritten field is as follows:
  75. // pkgdesc
  76. // url
  77. // install
  78. // changelog
  79. // arch
  80. // groups
  81. // license
  82. // checkdepends
  83. // depends
  84. // optdepends
  85. // provides
  86. // conflicts
  87. // replaces
  88. // options
  89. // backup
  90. func (si *Srcinfo) String() string {
  91. var buffer bytes.Buffer
  92. appendHeader(&buffer, "pkgbase", si.Pkgbase)
  93. appendValue(&buffer, "pkgdesc", si.Pkgdesc)
  94. appendValue(&buffer, "pkgver", si.Pkgver)
  95. appendValue(&buffer, "pkgrel", si.Pkgrel)
  96. appendValue(&buffer, "epoch", si.Epoch)
  97. appendValue(&buffer, "url", si.URL)
  98. appendValue(&buffer, "install", si.Install)
  99. appendValue(&buffer, "changelog", si.Changelog)
  100. appendMultiValue(&buffer, "arch", si.Arch)
  101. appendMultiValue(&buffer, "groups", si.Groups)
  102. appendMultiValue(&buffer, "license", si.License)
  103. appendMultiArchValue(&buffer, "checkdepends", si.CheckDepends)
  104. appendMultiArchValue(&buffer, "makedepends", si.MakeDepends)
  105. appendMultiArchValue(&buffer, "depends", si.Depends)
  106. appendMultiArchValue(&buffer, "optdepends", si.OptDepends)
  107. appendMultiArchValue(&buffer, "provides", si.Provides)
  108. appendMultiArchValue(&buffer, "conflicts", si.Conflicts)
  109. appendMultiArchValue(&buffer, "replaces", si.Replaces)
  110. appendMultiValue(&buffer, "noextract", si.NoExtract)
  111. appendMultiValue(&buffer, "options", si.Options)
  112. appendMultiValue(&buffer, "backup", si.Backup)
  113. appendMultiValue(&buffer, "validpgpkeys", si.ValidPGPKeys)
  114. appendMultiArchValue(&buffer, "source", si.Source)
  115. appendMultiArchValue(&buffer, "md5sums", si.MD5Sums)
  116. appendMultiArchValue(&buffer, "sha1sums", si.SHA1Sums)
  117. appendMultiArchValue(&buffer, "sha224sums", si.SHA224Sums)
  118. appendMultiArchValue(&buffer, "sha256sums", si.SHA256Sums)
  119. appendMultiArchValue(&buffer, "sha384sums", si.SHA384Sums)
  120. appendMultiArchValue(&buffer, "sha512sums", si.SHA512Sums)
  121. for n, pkg := range si.Packages {
  122. appendHeader(&buffer, "\npkgname", si.Packages[n].Pkgname)
  123. appendValue(&buffer, "pkgdesc", pkg.Pkgdesc)
  124. appendValue(&buffer, "url", pkg.URL)
  125. appendValue(&buffer, "install", pkg.Install)
  126. appendValue(&buffer, "changelog", pkg.Changelog)
  127. appendMultiValue(&buffer, "arch", pkg.Arch)
  128. appendMultiValue(&buffer, "groups", pkg.Groups)
  129. appendMultiValue(&buffer, "license", pkg.License)
  130. appendMultiArchValue(&buffer, "depends", pkg.Depends)
  131. appendMultiArchValue(&buffer, "optdepends", pkg.OptDepends)
  132. appendMultiArchValue(&buffer, "provides", pkg.Provides)
  133. appendMultiArchValue(&buffer, "conflicts", pkg.Conflicts)
  134. appendMultiArchValue(&buffer, "replaces", pkg.Replaces)
  135. appendMultiValue(&buffer, "options", pkg.Options)
  136. appendMultiValue(&buffer, "backup", pkg.Backup)
  137. }
  138. return buffer.String()
  139. }