|
|
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- // +build ignore
-
- package main
-
- import (
- "bytes"
- "crypto/sha1"
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "os"
- "path/filepath"
- "strconv"
-
- "github.com/shurcooL/vfsgen"
- )
-
- func needsUpdate(dir string, filename string) (bool, []byte) {
- needRegen := false
- _, err := os.Stat(filename)
- if err != nil {
- needRegen = true
- }
-
- oldHash, err := ioutil.ReadFile(filename + ".hash")
- if err != nil {
- oldHash = []byte{}
- }
-
- hasher := sha1.New()
-
- err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- _, _ = hasher.Write([]byte(info.Name()))
- _, _ = hasher.Write([]byte(info.ModTime().String()))
- _, _ = hasher.Write([]byte(strconv.FormatInt(info.Size(), 16)))
- return nil
- })
- if err != nil {
- return true, oldHash
- }
-
- newHash := hasher.Sum([]byte{})
-
- if bytes.Compare(oldHash, newHash) != 0 {
-
- return true, newHash
- }
-
- return needRegen, newHash
- }
-
- func main() {
- if len(os.Args) != 4 {
- log.Fatal("Insufficient number of arguments. Need: directory packageName filename")
- }
-
- dir, packageName, filename := os.Args[1], os.Args[2], os.Args[3]
-
- update, newHash := needsUpdate(dir, filename)
-
- if !update {
- fmt.Printf("bindata for %s already up-to-date\n", packageName)
- return
- }
-
- fmt.Printf("generating bindata for %s\n", packageName)
- var fsTemplates http.FileSystem = http.Dir(dir)
- err := vfsgen.Generate(fsTemplates, vfsgen.Options{
- PackageName: packageName,
- BuildTags: "bindata",
- VariableName: "Assets",
- Filename: filename,
- })
- if err != nil {
- log.Fatalf("%v\n", err)
- }
- _ = ioutil.WriteFile(filename+".hash", newHash, 0666)
- }
|