fix: prevent duplicate uploads and group asset commits
This commit is contained in:
@@ -4,7 +4,8 @@ import { mkdir, writeFile, readFile, unlink, rm } from 'fs/promises'
|
||||
import { TMP_DIR } from '@/lib/constants'
|
||||
import { compressWithBlender } from '@/lib/blender'
|
||||
import { compressTextureBuffer } from '@/lib/texture-compression'
|
||||
import type { ParsedFile } from '@/lib/types'
|
||||
import { classifyAssetCategory } from '@/lib/asset-classification'
|
||||
import type { ParsedFile, PreparedAssetSummary } from '@/lib/types'
|
||||
|
||||
interface PushFile {
|
||||
path: string
|
||||
@@ -19,7 +20,7 @@ interface PrepareGitAssetsParams {
|
||||
interface PrepareGitAssetsResult {
|
||||
filesToPush: PushFile[]
|
||||
modelFilename: string
|
||||
textureNames: string[]
|
||||
assetSummaries: PreparedAssetSummary[]
|
||||
compressed: boolean
|
||||
compressionError?: string
|
||||
}
|
||||
@@ -29,7 +30,7 @@ export async function prepareGitAssets({
|
||||
parsedFiles,
|
||||
}: PrepareGitAssetsParams): Promise<PrepareGitAssetsResult> {
|
||||
const filesToPush: PushFile[] = []
|
||||
const textureNames: string[] = []
|
||||
const assetSummaries: PreparedAssetSummary[] = []
|
||||
let modelFilename = ''
|
||||
let compressed = false
|
||||
let compressionError: string | undefined
|
||||
@@ -39,6 +40,7 @@ export async function prepareGitAssets({
|
||||
|
||||
if (pf.isModel) {
|
||||
modelFilename = pf.filename
|
||||
let modelCompressed = false
|
||||
|
||||
const tmpFolder = join(TMP_DIR, folderName)
|
||||
await mkdir(tmpFolder, { recursive: true })
|
||||
@@ -54,6 +56,7 @@ export async function prepareGitAssets({
|
||||
if (result.success && existsSync(compressedPath)) {
|
||||
content = await readFile(compressedPath)
|
||||
compressed = true
|
||||
modelCompressed = true
|
||||
await unlink(compressedPath).catch(() => {})
|
||||
} else {
|
||||
compressionError = result.error
|
||||
@@ -62,8 +65,14 @@ export async function prepareGitAssets({
|
||||
await unlink(tmpFilePath).catch(() => {})
|
||||
await rm(tmpFolder, { recursive: true, force: true }).catch(() => {})
|
||||
}
|
||||
|
||||
assetSummaries.push({
|
||||
filename: pf.filename,
|
||||
kind: 'model',
|
||||
compressed: modelCompressed,
|
||||
})
|
||||
} else {
|
||||
textureNames.push(pf.filename)
|
||||
const category = classifyAssetCategory(pf.filename)
|
||||
|
||||
const textureResult = await compressTextureBuffer(pf.filename, pf.buffer)
|
||||
content = textureResult.buffer
|
||||
@@ -71,6 +80,13 @@ export async function prepareGitAssets({
|
||||
if (textureResult.error && !compressionError) {
|
||||
compressionError = textureResult.error
|
||||
}
|
||||
|
||||
assetSummaries.push({
|
||||
filename: pf.filename,
|
||||
kind: category === 'assets' ? 'asset' : 'texture',
|
||||
category,
|
||||
compressed: textureResult.compressed,
|
||||
})
|
||||
}
|
||||
|
||||
filesToPush.push({
|
||||
@@ -82,7 +98,7 @@ export async function prepareGitAssets({
|
||||
return {
|
||||
filesToPush,
|
||||
modelFilename,
|
||||
textureNames,
|
||||
assetSummaries,
|
||||
compressed,
|
||||
compressionError,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user