Skip to content

Commit bfa52d5

Browse files
committed
feat: Allow to call BuildAndWriteFilesList on non-copied embedded dirs
1 parent d92fb1e commit bfa52d5

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

embed_util/file_list.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func buildFileListFromDir(dir string) (*fileList, error) {
4343
return err
4444
}
4545

46-
if relPath == "." {
46+
if relPath == "." || relPath == "files.json" {
4747
return nil
4848
}
4949

@@ -82,7 +82,7 @@ func buildFileListFromFs(embedFs fs.FS) (*fileList, error) {
8282
var fl fileList
8383

8484
err := fs.WalkDir(embedFs, ".", func(path string, d fs.DirEntry, err error) error {
85-
if path == "." {
85+
if path == "." || path == "files.json" {
8686
return nil
8787
}
8888

embed_util/packer.go

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,33 @@ func CopyForEmbed(out string, dir string) error {
2727
return err
2828
}
2929

30+
return doWriteFilesList(out, fl)
31+
}
32+
33+
func BuildAndWriteFilesList(dir string) error {
34+
fl, err := buildFileListFromDir(dir)
35+
if err != nil {
36+
return err
37+
}
38+
return doWriteFilesList(dir, fl)
39+
}
40+
41+
func doWriteFilesList(dir string, fl *fileList) error {
42+
var err error
43+
fl.ContentHash, err = calcContentHash(dir, fl)
44+
if err != nil {
45+
return err
46+
}
3047
b, err := json.MarshalIndent(fl, "", " ")
3148
if err != nil {
3249
return err
3350
}
3451

35-
err = os.WriteFile(filepath.Join(out, "files.json"), b, 0o644)
36-
return err
52+
err = os.WriteFile(filepath.Join(dir, "files.json"), b, 0o644)
53+
if err != nil {
54+
return err
55+
}
56+
return nil
3757
}
3858

3959
func WriteEmbedGoFile(targetDir string, goOs string, goArch string) error {
@@ -128,43 +148,46 @@ func copyFiles(out string, dir string, fl *fileList) error {
128148
return err
129149
}
130150

151+
return nil
152+
}
153+
154+
func calcContentHash(dir string, fl *fileList) (string, error) {
131155
hash := sha256.New()
132156
for _, fle := range fl.Files {
133157
path := filepath.Join(dir, fle.Name)
134158
st, err := os.Lstat(path)
135159
if err != nil {
136-
return err
160+
return "", err
137161
}
138162
if st.Mode().Type() == os.ModeSymlink {
139163
sl, err := os.Readlink(path)
140164
if err != nil {
141-
return err
165+
return "", err
142166
}
143167
_ = binary.Write(hash, binary.LittleEndian, "symlink")
144168
_ = binary.Write(hash, binary.LittleEndian, sl)
145169
} else if st.Mode().IsDir() {
146170
err = os.MkdirAll(path, fle.Mode.Perm())
147171
if err != nil {
148-
return err
172+
return "", err
149173
}
150174
_ = binary.Write(hash, binary.LittleEndian, "dir")
151175
_ = binary.Write(hash, binary.LittleEndian, fle.Name)
152176
} else if st.Mode().IsRegular() {
153-
outPath := filepath.Join(out, fle.Name)
177+
outPath := filepath.Join(dir, fle.Name)
154178
if fle.Compressed {
155179
outPath += ".gz"
156180
}
157181

158182
data, err := os.ReadFile(outPath)
159183
if err != nil {
160-
return err
184+
return "", err
161185
}
162186

163187
_ = binary.Write(hash, binary.LittleEndian, "regular")
164188
_ = binary.Write(hash, binary.LittleEndian, fle.Name)
165189
_ = binary.Write(hash, binary.LittleEndian, data)
166190
}
167191
}
168-
fl.ContentHash = hex.EncodeToString(hash.Sum(nil))
169-
return nil
192+
return hex.EncodeToString(hash.Sum(nil)), nil
170193
}

0 commit comments

Comments
 (0)