feat(update): add forced upgrade progress flow
This commit is contained in:
+11
-1
@@ -377,17 +377,25 @@ def load_verified_pending(install_root, metadata):
|
||||
return None
|
||||
|
||||
|
||||
def prepare_update(metadata, install_root, **download_kwargs):
|
||||
def prepare_update(metadata, install_root, stage_callback=None, **download_kwargs):
|
||||
validate_metadata(metadata, download_kwargs.get("trusted_hosts", DEFAULT_TRUSTED_HOSTS))
|
||||
if stage_callback:
|
||||
stage_callback("正在检查已下载的新版")
|
||||
reusable = load_verified_pending(install_root, metadata)
|
||||
if reusable is not None:
|
||||
if stage_callback:
|
||||
stage_callback("新版已经完成校验")
|
||||
return reusable
|
||||
update_root = _update_root(install_root)
|
||||
if stage_callback:
|
||||
stage_callback("正在下载新版")
|
||||
zip_path = download_package(metadata, install_root, **download_kwargs)
|
||||
staging_parent = update_root / "staging"
|
||||
staging_parent.mkdir(parents=True, exist_ok=True)
|
||||
staging_dir = staging_parent / (metadata.version + "-" + uuid.uuid4().hex[:12])
|
||||
try:
|
||||
if stage_callback:
|
||||
stage_callback("正在校验并准备新版")
|
||||
safe_extract(zip_path, staging_dir)
|
||||
validate_staging(staging_dir, metadata)
|
||||
pending_path = _write_pending(update_root, metadata, staging_dir, zip_path)
|
||||
@@ -395,4 +403,6 @@ def prepare_update(metadata, install_root, **download_kwargs):
|
||||
if staging_dir.exists():
|
||||
shutil.rmtree(str(staging_dir), ignore_errors=True)
|
||||
raise
|
||||
if stage_callback:
|
||||
stage_callback("新版已经完成校验")
|
||||
return StagedUpdate(metadata.version, zip_path, staging_dir, pending_path, metadata.sha256)
|
||||
|
||||
Reference in New Issue
Block a user