Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
68cb6b3d
Unverified
提交
68cb6b3d
authored
5月 19, 2025
作者:
Will Chen
提交者:
GitHub
5月 19, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Robust app folder rename (#200)
Fixes #89
上级
cbfe26ba
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
35 行增加
和
29 行删除
+35
-29
app_handlers.ts
src/ipc/handlers/app_handlers.ts
+35
-9
file_utils.ts
src/ipc/utils/file_utils.ts
+0
-20
没有找到文件。
src/ipc/handlers/app_handlers.ts
浏览文件 @
68cb6b3d
...
...
@@ -12,10 +12,7 @@ import { promises as fsPromises } from "node:fs";
// Import our utility modules
import
{
withLock
}
from
"../utils/lock_utils"
;
import
{
copyDirectoryRecursive
,
getFilesRecursively
,
}
from
"../utils/file_utils"
;
import
{
getFilesRecursively
}
from
"../utils/file_utils"
;
import
{
runningApps
,
processCounter
,
...
...
@@ -192,10 +189,15 @@ export function registerAppHandlers() {
// Start async operations in background
try
{
// Copy scaffold asynchronously
await
copyDirectoryRecursive
(
await
fsPromises
.
cp
(
path
.
join
(
__dirname
,
".."
,
".."
,
"scaffold"
),
fullAppPath
,
{
recursive
:
true
,
// Scaffold should *not* have node_modules anyways, but
// just in case, we filter it out.
filter
:
(
source
)
=>
!
source
.
includes
(
"node_modules"
),
},
);
// Initialize git repo and create first commit
await
git
.
init
({
...
...
@@ -666,8 +668,11 @@ export function registerAppHandlers() {
recursive
:
true
,
});
// Move the files
await
fsPromises
.
rename
(
oldAppPath
,
newAppPath
);
// Copy the directory without node_modules
await
fsPromises
.
cp
(
oldAppPath
,
newAppPath
,
{
recursive
:
true
,
filter
:
(
source
)
=>
!
source
.
includes
(
"node_modules"
),
});
}
catch
(
error
:
any
)
{
logger
.
error
(
`Error moving app files from
${
oldAppPath
}
to
${
newAppPath
}
:`
,
...
...
@@ -675,6 +680,21 @@ export function registerAppHandlers() {
);
throw
new
Error
(
`Failed to move app files:
${
error
.
message
}
`
);
}
try
{
// Delete the old directory
await
fsPromises
.
rm
(
oldAppPath
,
{
recursive
:
true
,
force
:
true
});
}
catch
(
error
:
any
)
{
// Why is this just a warning? This happens quite often on Windows
// because it has an aggressive file lock.
//
// Not deleting the old directory is annoying, but not a big deal
// since the user can do it themselves if they need to.
logger
.
warn
(
`Error deleting old app directory
${
oldAppPath
}
:`
,
error
,
);
}
}
// Update app in database
...
...
@@ -693,7 +713,13 @@ export function registerAppHandlers() {
// Attempt to rollback the file move
if
(
newAppPath
!==
oldAppPath
)
{
try
{
await
fsPromises
.
rename
(
newAppPath
,
oldAppPath
);
// Copy back from new to old
await
fsPromises
.
cp
(
newAppPath
,
oldAppPath
,
{
recursive
:
true
,
filter
:
(
source
)
=>
!
source
.
includes
(
"node_modules"
),
});
// Delete the new directory
await
fsPromises
.
rm
(
newAppPath
,
{
recursive
:
true
,
force
:
true
});
}
catch
(
rollbackError
)
{
logger
.
error
(
`Failed to rollback file move during rename error:`
,
...
...
src/ipc/utils/file_utils.ts
浏览文件 @
68cb6b3d
import
fs
from
"node:fs"
;
import
path
from
"node:path"
;
import
{
promises
as
fsPromises
}
from
"node:fs"
;
/**
* Recursively gets all files in a directory, excluding node_modules and .git
...
...
@@ -32,22 +31,3 @@ export function getFilesRecursively(dir: string, baseDir: string): string[] {
return
files
;
}
export
async
function
copyDirectoryRecursive
(
source
:
string
,
destination
:
string
,
)
{
await
fsPromises
.
mkdir
(
destination
,
{
recursive
:
true
});
const
entries
=
await
fsPromises
.
readdir
(
source
,
{
withFileTypes
:
true
});
for
(
const
entry
of
entries
)
{
const
srcPath
=
path
.
join
(
source
,
entry
.
name
);
const
destPath
=
path
.
join
(
destination
,
entry
.
name
);
if
(
entry
.
isDirectory
())
{
await
copyDirectoryRecursive
(
srcPath
,
destPath
);
}
else
{
await
fsPromises
.
copyFile
(
srcPath
,
destPath
);
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论