feat: Enhance file modification and backup mechanism for Cursor machine ID patch
This commit is contained in:
@@ -150,6 +150,12 @@ def modify_main_js(main_path: str) -> bool:
|
|||||||
bool: 修改是否成功
|
bool: 修改是否成功
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
# 获取原始文件的权限和所有者信息
|
||||||
|
original_stat = os.stat(main_path)
|
||||||
|
original_mode = original_stat.st_mode
|
||||||
|
original_uid = original_stat.st_uid
|
||||||
|
original_gid = original_stat.st_gid
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(mode="w", delete=False) as tmp_file:
|
with tempfile.NamedTemporaryFile(mode="w", delete=False) as tmp_file:
|
||||||
with open(main_path, "r", encoding="utf-8") as main_file:
|
with open(main_path, "r", encoding="utf-8") as main_file:
|
||||||
content = main_file.read()
|
content = main_file.read()
|
||||||
@@ -169,6 +175,12 @@ def modify_main_js(main_path: str) -> bool:
|
|||||||
# 使用 shutil.copy2 保留文件权限
|
# 使用 shutil.copy2 保留文件权限
|
||||||
shutil.copy2(main_path, main_path + ".old")
|
shutil.copy2(main_path, main_path + ".old")
|
||||||
shutil.move(tmp_path, main_path)
|
shutil.move(tmp_path, main_path)
|
||||||
|
|
||||||
|
# 恢复原始文件的权限和所有者
|
||||||
|
os.chmod(main_path, original_mode)
|
||||||
|
if os.name != "nt": # 在非Windows系统上设置所有者
|
||||||
|
os.chown(main_path, original_uid, original_gid)
|
||||||
|
|
||||||
logger.info("文件修改成功")
|
logger.info("文件修改成功")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -179,8 +191,63 @@ def modify_main_js(main_path: str) -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def patch_cursor_get_machine_id() -> None:
|
def backup_files(pkg_path: str, main_path: str) -> bool:
|
||||||
"""主函数"""
|
"""
|
||||||
|
备份原始文件
|
||||||
|
|
||||||
|
Args:
|
||||||
|
pkg_path: package.json 文件路径(未使用)
|
||||||
|
main_path: main.js 文件路径
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: 备份是否成功
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 只备份 main.js
|
||||||
|
if os.path.exists(main_path):
|
||||||
|
backup_main = f"{main_path}.bak"
|
||||||
|
shutil.copy2(main_path, backup_main)
|
||||||
|
logger.info(f"已备份 main.js: {backup_main}")
|
||||||
|
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"备份文件失败: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def restore_backup_files(pkg_path: str, main_path: str) -> bool:
|
||||||
|
"""
|
||||||
|
恢复备份文件
|
||||||
|
|
||||||
|
Args:
|
||||||
|
pkg_path: package.json 文件路径(未使用)
|
||||||
|
main_path: main.js 文件路径
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: 恢复是否成功
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 只恢复 main.js
|
||||||
|
backup_main = f"{main_path}.bak"
|
||||||
|
if os.path.exists(backup_main):
|
||||||
|
shutil.copy2(backup_main, main_path)
|
||||||
|
logger.info(f"已恢复 main.js")
|
||||||
|
return True
|
||||||
|
|
||||||
|
logger.error("未找到备份文件")
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"恢复备份失败: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def patch_cursor_get_machine_id(restore_mode=False) -> None:
|
||||||
|
"""
|
||||||
|
主函数
|
||||||
|
|
||||||
|
Args:
|
||||||
|
restore_mode: 是否为恢复模式
|
||||||
|
"""
|
||||||
logger.info("开始执行脚本...")
|
logger.info("开始执行脚本...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -191,6 +258,14 @@ def patch_cursor_get_machine_id() -> None:
|
|||||||
if not check_system_requirements(pkg_path, main_path):
|
if not check_system_requirements(pkg_path, main_path):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
if restore_mode:
|
||||||
|
# 恢复备份
|
||||||
|
if restore_backup_files(pkg_path, main_path):
|
||||||
|
logger.info("备份恢复完成")
|
||||||
|
else:
|
||||||
|
logger.error("备份恢复失败")
|
||||||
|
return
|
||||||
|
|
||||||
# 获取版本号
|
# 获取版本号
|
||||||
try:
|
try:
|
||||||
with open(pkg_path, "r", encoding="utf-8") as f:
|
with open(pkg_path, "r", encoding="utf-8") as f:
|
||||||
@@ -207,6 +282,11 @@ def patch_cursor_get_machine_id() -> None:
|
|||||||
|
|
||||||
logger.info("版本检查通过,准备修改文件")
|
logger.info("版本检查通过,准备修改文件")
|
||||||
|
|
||||||
|
# 备份文件
|
||||||
|
if not backup_files(pkg_path, main_path):
|
||||||
|
logger.error("文件备份失败,终止操作")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# 修改文件
|
# 修改文件
|
||||||
if not modify_main_js(main_path):
|
if not modify_main_js(main_path):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user