code.gitea.io/gitea@v1.19.3/modules/options/static.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build bindata 5 6 package options 7 8 import ( 9 "fmt" 10 "io" 11 12 "code.gitea.io/gitea/modules/setting" 13 "code.gitea.io/gitea/modules/util" 14 ) 15 16 // Dir returns all files from custom directory or bindata. 17 func Dir(name string) ([]string, error) { 18 if directories.Filled(name) { 19 return directories.Get(name), nil 20 } 21 22 result, err := listLocalDirIfExist([]string{setting.CustomPath}, "options", name) 23 if err != nil { 24 return nil, err 25 } 26 27 files, err := AssetDir(name) 28 if err != nil { 29 return []string{}, fmt.Errorf("unable to read embedded directory %q. %w", name, err) 30 } 31 32 result = append(result, files...) 33 return directories.AddAndGet(name, result), nil 34 } 35 36 func AssetDir(dirName string) ([]string, error) { 37 d, err := Assets.Open(dirName) 38 if err != nil { 39 return nil, err 40 } 41 defer d.Close() 42 43 files, err := d.Readdir(-1) 44 if err != nil { 45 return nil, err 46 } 47 results := make([]string, 0, len(files)) 48 for _, file := range files { 49 results = append(results, file.Name()) 50 } 51 return results, nil 52 } 53 54 // fileFromOptionsDir is a helper to read files from custom path or bindata. 55 func fileFromOptionsDir(elems ...string) ([]byte, error) { 56 // only try custom dir, no static dir 57 if data, err := readLocalFile([]string{setting.CustomPath}, "options", elems...); err == nil { 58 return data, nil 59 } 60 61 f, err := Assets.Open(util.PathJoinRelX(elems...)) 62 if err != nil { 63 return nil, err 64 } 65 defer f.Close() 66 return io.ReadAll(f) 67 } 68 69 func Asset(name string) ([]byte, error) { 70 f, err := Assets.Open("/" + name) 71 if err != nil { 72 return nil, err 73 } 74 defer f.Close() 75 return io.ReadAll(f) 76 } 77 78 func AssetNames() []string { 79 realFS := Assets.(vfsgen۰FS) 80 results := make([]string, 0, len(realFS)) 81 for k := range realFS { 82 results = append(results, k[1:]) 83 } 84 return results 85 } 86 87 func AssetIsDir(name string) (bool, error) { 88 if f, err := Assets.Open("/" + name); err != nil { 89 return false, err 90 } else { 91 defer f.Close() 92 if fi, err := f.Stat(); err != nil { 93 return false, err 94 } else { 95 return fi.IsDir(), nil 96 } 97 } 98 } 99 100 // IsDynamic will return false when using embedded data (-tags bindata) 101 func IsDynamic() bool { 102 return false 103 }