mirror of
https://github.com/sbrow/thor.git
synced 2026-08-26 11:23:32 -04:00
40 lines
1.0 KiB
Odin
40 lines
1.0 KiB
Odin
package main
|
|
|
|
import "core:fmt"
|
|
import "core:log"
|
|
import "core:os"
|
|
import "core:strings"
|
|
|
|
copy_assets_dir :: proc(vfs: ^VFS, output_dir: string, features: bit_set[Feature]) {
|
|
for virtual_path, entry in vfs.files {
|
|
if !strings.has_prefix(virtual_path, "assets/") {
|
|
continue
|
|
}
|
|
|
|
rel := virtual_path[len("assets/"):]
|
|
dest := fmt.tprintf("%s/%s", output_dir, rel)
|
|
|
|
if idx := strings.last_index(dest, "/"); idx >= 0 {
|
|
if err := os.make_directory_all(dest[:idx]); err != nil && err != .Exist {
|
|
log.warnf("thor: cannot create %s: %v", dest[:idx], err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
if .Minify in features && strings.has_suffix(rel, ".css") {
|
|
data, ok := vfs_get(vfs, virtual_path)
|
|
if ok {
|
|
write_file(dest, minify_css(string(data)))
|
|
}
|
|
} else if entry.data != nil {
|
|
if err := os.write_entire_file(dest, entry.data); err != nil {
|
|
log.warnf("thor: cannot write %s: %v", dest, err)
|
|
}
|
|
} else {
|
|
if err := os.copy_file(dest, entry.fs_path); err != nil {
|
|
log.warnf("thor: cannot copy %s: %v", entry.fs_path, err)
|
|
}
|
|
}
|
|
}
|
|
}
|