Restart repository history from target event
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import { getOutputDir } from '@/lib/utils/paths';
|
||||
import { copyDirRecursive } from '@/lib/utils/file-ops';
|
||||
import { CopyResponse } from '@/types';
|
||||
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
const { albumPath } = await request.json();
|
||||
|
||||
if (!albumPath || !(await fs.pathExists(albumPath))) {
|
||||
return NextResponse.json({ error: 'Invalid album path' }, { status: 400 });
|
||||
}
|
||||
|
||||
const outputDir = getOutputDir();
|
||||
if (!outputDir) {
|
||||
return NextResponse.json({ error: 'OUTPUT_DIR not configured in .env.local' }, { status: 400 });
|
||||
}
|
||||
|
||||
// Ensure output directory exists
|
||||
await fs.ensureDir(outputDir);
|
||||
|
||||
const albumName = path.basename(albumPath);
|
||||
const destPath = path.join(outputDir, albumName);
|
||||
|
||||
// Check if destination already exists
|
||||
if (await fs.pathExists(destPath)) {
|
||||
return NextResponse.json({ error: 'Album already exists in output directory' }, { status: 409 });
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
await fs.copy(albumPath, destPath);
|
||||
} catch (error) {
|
||||
const err = error as NodeJS.ErrnoException;
|
||||
if (err.code === 'EINVAL') {
|
||||
console.warn('fs-extra copy failed with EINVAL, attempting fallback to stream-based copy', error);
|
||||
// Fallback to custom stream-based copy to avoid copyfile syscall
|
||||
await copyDirRecursive(albumPath, destPath);
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
const response: CopyResponse = { success: true, destPath };
|
||||
return NextResponse.json(response);
|
||||
} catch (error) {
|
||||
console.error('Error copying album:', error);
|
||||
return NextResponse.json({ error: 'Failed to copy album' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user