feat: 实现功能3强制更新
- 新增 ForceUpdateCommand 类实现强制更新功能 - 添加 force-update CLI 命令支持 - 实现参数验证、配置对比、CDN缓存刷新 - 添加完整的测试用例和使用示例 - 更新文档和进度跟踪 - 支持模拟环境测试 - 添加警告提示和错误处理 主要文件: - src/config_man/core/force_update_command.py (新增) - src/config_man/cli/main.py (更新) - examples/test_force_update.py (新增) - examples/force_update_usage.py (新增) - docs/progress-tracker.md (更新)
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import click
|
||||
import os
|
||||
from ..core.view_command import ViewCommand
|
||||
from ..core.suggest_update_command import SuggestUpdateCommand
|
||||
from ..core.force_update_command import ForceUpdateCommand
|
||||
from ..utils.mock_rclone import patch_rclone
|
||||
from ..utils.config import config
|
||||
|
||||
@@ -61,16 +63,40 @@ def view(version, json_format, storage_path, cdn_url, mock):
|
||||
help='平台类型')
|
||||
@click.option('--target-version', required=True, help='目标版本号')
|
||||
@click.option('--update-version', required=True, help='更新版本号')
|
||||
def suggest_update(platform, target_version, update_version):
|
||||
@click.option('--storage-path', help='对象存储路径前缀(覆盖配置文件)')
|
||||
@click.option('--cdn-url', help='CDN基础URL(覆盖配置文件)')
|
||||
@click.option('--mock', is_flag=True, help='使用模拟环境进行测试')
|
||||
def suggest_update(platform, target_version, update_version, storage_path, cdn_url, mock):
|
||||
"""建议更新
|
||||
|
||||
在目标版本的配置文件中添加 Ver_New 属性,提示用户有新版本可用。
|
||||
|
||||
示例:
|
||||
config-man suggest-update --platform android --target-version 0.29 --update-version 0.30
|
||||
config-man suggest-update --platform ios --target-version 0.29 --update-version 0.30 --mock
|
||||
"""
|
||||
click.echo("建议更新功能尚未实现")
|
||||
return 1
|
||||
try:
|
||||
# 如果使用模拟环境,启用rclone模拟
|
||||
if mock:
|
||||
patch_rclone()
|
||||
click.echo("使用模拟环境进行测试...")
|
||||
else:
|
||||
# 检查rclone是否可用
|
||||
if not _check_rclone():
|
||||
click.echo("错误: rclone 未安装或不可用。请先安装 rclone。")
|
||||
return 1
|
||||
|
||||
# 创建建议更新命令处理器
|
||||
suggest_cmd = SuggestUpdateCommand(storage_path, cdn_url)
|
||||
|
||||
# 执行建议更新命令
|
||||
success = suggest_cmd.execute(platform, target_version, update_version)
|
||||
|
||||
return 0 if success else 1
|
||||
|
||||
except Exception as e:
|
||||
click.echo(f"错误: {str(e)}")
|
||||
return 1
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -78,16 +104,40 @@ def suggest_update(platform, target_version, update_version):
|
||||
help='平台类型')
|
||||
@click.option('--target-version', required=True, help='目标版本号')
|
||||
@click.option('--update-version', required=True, help='更新版本号')
|
||||
def force_update(platform, target_version, update_version):
|
||||
@click.option('--storage-path', help='对象存储路径前缀(覆盖配置文件)')
|
||||
@click.option('--cdn-url', help='CDN基础URL(覆盖配置文件)')
|
||||
@click.option('--mock', is_flag=True, help='使用模拟环境进行测试')
|
||||
def force_update(platform, target_version, update_version, storage_path, cdn_url, mock):
|
||||
"""强制更新
|
||||
|
||||
直接更新目标版本的 Ver 属性,强制用户升级到新版本。
|
||||
|
||||
示例:
|
||||
config-man force-update --platform ios --target-version 0.29 --update-version 0.30
|
||||
config-man force-update --platform android --target-version 0.29 --update-version 0.30 --mock
|
||||
"""
|
||||
click.echo("强制更新功能尚未实现")
|
||||
return 1
|
||||
try:
|
||||
# 如果使用模拟环境,启用rclone模拟
|
||||
if mock:
|
||||
patch_rclone()
|
||||
click.echo("使用模拟环境进行测试...")
|
||||
else:
|
||||
# 检查rclone是否可用
|
||||
if not _check_rclone():
|
||||
click.echo("错误: rclone 未安装或不可用。请先安装 rclone。")
|
||||
return 1
|
||||
|
||||
# 创建强制更新命令处理器
|
||||
force_cmd = ForceUpdateCommand(storage_path, cdn_url)
|
||||
|
||||
# 执行强制更新命令
|
||||
success = force_cmd.execute(platform, target_version, update_version)
|
||||
|
||||
return 0 if success else 1
|
||||
|
||||
except Exception as e:
|
||||
click.echo(f"错误: {str(e)}")
|
||||
return 1
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -124,6 +174,33 @@ def show_config():
|
||||
console.print(f"\n配置文件路径: {config.config_file}")
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option('--api-token', required=True, help='Cloudflare API Token')
|
||||
@click.option('--zone-id', required=True, help='Cloudflare Zone ID')
|
||||
def setup_cloudflare(api_token, zone_id):
|
||||
"""设置Cloudflare CDN配置
|
||||
|
||||
设置Cloudflare API Token和Zone ID。
|
||||
|
||||
示例:
|
||||
config-man setup-cloudflare --api-token your_api_token --zone-id your_zone_id
|
||||
"""
|
||||
try:
|
||||
# 设置Cloudflare配置
|
||||
config.set('cdn.cloudflare.api_token', api_token)
|
||||
config.set('cdn.cloudflare.zone_id', zone_id)
|
||||
config.save()
|
||||
|
||||
click.echo("✅ Cloudflare配置已更新")
|
||||
click.echo(f" API Token: {api_token[:10]}...")
|
||||
click.echo(f" Zone ID: {zone_id}")
|
||||
click.echo("\n💡 提示: 配置已保存到配置文件,无需重复设置环境变量")
|
||||
|
||||
except Exception as e:
|
||||
click.echo(f"❌ 设置Cloudflare配置失败: {e}")
|
||||
return 1
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option('--key', required=True, help='配置键,如 storage.path')
|
||||
@click.option('--value', required=True, help='配置值')
|
||||
@@ -135,6 +212,8 @@ def set_config(key, value):
|
||||
示例:
|
||||
config-man set-config --key storage.path --value custom_path
|
||||
config-man set-config --key cdn.base_url --value https://cdn.example.com
|
||||
config-man set-config --key cdn.cloudflare.api_token --value your_api_token
|
||||
config-man set-config --key cdn.cloudflare.zone_id --value your_zone_id
|
||||
"""
|
||||
try:
|
||||
# 尝试转换数值类型
|
||||
|
||||
Reference in New Issue
Block a user