Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/cli/src/commands/update.rs
3316 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
use std::sync::Arc;
7
8
use indicatif::ProgressBar;
9
10
use crate::{
11
constants::PRODUCT_NAME_LONG,
12
self_update::SelfUpdate,
13
update_service::UpdateService,
14
util::{errors::AnyError, http::ReqwestSimpleHttp, input::ProgressBarReporter},
15
};
16
17
use super::{args::StandaloneUpdateArgs, CommandContext};
18
19
pub async fn update(ctx: CommandContext, args: StandaloneUpdateArgs) -> Result<i32, AnyError> {
20
let update_service = UpdateService::new(
21
ctx.log.clone(),
22
Arc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())),
23
);
24
let update_service = SelfUpdate::new(&update_service)?;
25
26
let _ = update_service.cleanup_old_update();
27
28
let current_version = update_service.get_current_release().await?;
29
if update_service.is_up_to_date_with(&current_version) {
30
ctx.log.result(format!(
31
"{} is already to to date ({})",
32
PRODUCT_NAME_LONG, current_version.commit
33
));
34
return Ok(1);
35
}
36
37
if args.check {
38
ctx.log
39
.result(format!("Update to {current_version} is available"));
40
return Ok(0);
41
}
42
43
let pb = ProgressBar::new(1);
44
pb.set_message("Downloading...");
45
update_service
46
.do_update(&current_version, ProgressBarReporter::from(pb))
47
.await?;
48
ctx.log
49
.result(format!("Successfully updated to {current_version}"));
50
51
Ok(0)
52
}
53
54