@@ -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
3959func 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