MCPcopy Index your code
hub / github.com/ChatLab/ChatLab / migrateToUnifiedDirs

Function migrateToUnifiedDirs

apps/desktop/main/paths.ts:627–731  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

625 * 7. 留 MOVED.txt 说明文件
626 */
627export function migrateToUnifiedDirs(): { success: boolean; error?: string } {
628 const oldDataDir = resolveOldElectronDataDir()
629 const systemDir = getSystemDataDir()
630
631 console.log(`[Migration] Starting unified dir migration: ${oldDataDir} → ${systemDir}`)
632
633 try {
634 // Step 1: 创建系统目录
635 ensureDir(systemDir)
636
637 // Step 2: 如果当前 user_data_dir 指向了别处(如 CLI 写入的默认路径),
638 // 且那里有数据库,先合并到旧 Electron 路径
639 const config = loadConfig()
640 const prevUserDataDir = config.data.user_data_dir
641 if (prevUserDataDir && path.resolve(prevUserDataDir) !== path.resolve(oldDataDir)) {
642 const prevDbDir = path.join(prevUserDataDir, 'databases')
643 const oldDbDir = path.join(oldDataDir, 'databases')
644 if (fs.existsSync(prevDbDir)) {
645 const dbFiles = fs.readdirSync(prevDbDir).filter((f) => f.endsWith('.db'))
646 if (dbFiles.length > 0) {
647 ensureDir(oldDbDir)
648 const result = copyDirMerge(prevDbDir, oldDbDir, ensureDir)
649 console.log(
650 `[Migration] Merged ${result.copied} databases from ${prevDbDir} to ${oldDbDir} (skipped ${result.skipped})`
651 )
652 }
653 }
654 }
655
656 // Step 3: 写入 config.toml(数据库保留在旧 Electron 路径)
657 writeConfigField('data', 'user_data_dir', oldDataDir)
658 _userDataDir = oldDataDir
659
660 // 如果 storage.json 有自定义 dataDir,也记录日志
661 const storageConfig = readStorageConfig()
662 if (storageConfig.dataDir) {
663 console.log(`[Migration] Migrated storage.json custom path: ${storageConfig.dataDir}`)
664 }
665
666 // Step 4: 复制系统数据(合并,不覆盖 ~/.chatlab/ 下已有的文件)
667 const movedDirs: string[] = []
668 const failedDirs: string[] = []
669
670 for (const subDir of SYSTEM_SUBDIRS) {
671 const srcDir = path.join(oldDataDir, subDir)
672 const destDir = path.join(systemDir, subDir)
673
674 if (!fs.existsSync(srcDir)) continue
675
676 try {
677 ensureDir(destDir)
678 const mergeResult = copyDirMerge(srcDir, destDir, ensureDir)
679
680 if (mergeResult.copied > 0 || mergeResult.skipped > 0) {
681 movedDirs.push(subDir)
682 console.log(`[Migration] ${subDir}: copied ${mergeResult.copied}, skipped ${mergeResult.skipped}`)
683 }
684 } catch (err) {

Callers 1

Calls 12

loadConfigFunction · 0.90
copyDirMergeFunction · 0.90
writeConfigFieldFunction · 0.90
writeMigrationLogFunction · 0.90
getSystemDataDirFunction · 0.85
readStorageConfigFunction · 0.85
getLogsDirFunction · 0.85
ensureDirFunction · 0.70
errorMethod · 0.65
warnMethod · 0.65

Tested by

no test coverage detected