You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

generate-bindata.go 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. //go:build ignore
  5. // +build ignore
  6. package main
  7. import (
  8. "bytes"
  9. "crypto/sha1"
  10. "fmt"
  11. "io/ioutil"
  12. "log"
  13. "net/http"
  14. "os"
  15. "path/filepath"
  16. "strconv"
  17. "github.com/shurcooL/vfsgen"
  18. )
  19. func needsUpdate(dir string, filename string) (bool, []byte) {
  20. needRegen := false
  21. _, err := os.Stat(filename)
  22. if err != nil {
  23. needRegen = true
  24. }
  25. oldHash, err := ioutil.ReadFile(filename + ".hash")
  26. if err != nil {
  27. oldHash = []byte{}
  28. }
  29. hasher := sha1.New()
  30. err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
  31. if err != nil {
  32. return err
  33. }
  34. _, _ = hasher.Write([]byte(info.Name()))
  35. _, _ = hasher.Write([]byte(info.ModTime().String()))
  36. _, _ = hasher.Write([]byte(strconv.FormatInt(info.Size(), 16)))
  37. return nil
  38. })
  39. if err != nil {
  40. return true, oldHash
  41. }
  42. newHash := hasher.Sum([]byte{})
  43. if bytes.Compare(oldHash, newHash) != 0 {
  44. return true, newHash
  45. }
  46. return needRegen, newHash
  47. }
  48. func main() {
  49. if len(os.Args) != 4 {
  50. log.Fatal("Insufficient number of arguments. Need: directory packageName filename")
  51. }
  52. dir, packageName, filename := os.Args[1], os.Args[2], os.Args[3]
  53. update, newHash := needsUpdate(dir, filename)
  54. if !update {
  55. fmt.Printf("bindata for %s already up-to-date\n", packageName)
  56. return
  57. }
  58. fmt.Printf("generating bindata for %s\n", packageName)
  59. var fsTemplates http.FileSystem = http.Dir(dir)
  60. err := vfsgen.Generate(fsTemplates, vfsgen.Options{
  61. PackageName: packageName,
  62. BuildTags: "bindata",
  63. VariableName: "Assets",
  64. Filename: filename,
  65. })
  66. if err != nil {
  67. log.Fatalf("%v\n", err)
  68. }
  69. _ = ioutil.WriteFile(filename+".hash", newHash, 0666)
  70. }