Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/cli/src/commands/version.rs
3314 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::path::{Path, PathBuf};
7
8
use crate::{
9
desktop::{prompt_to_install, CodeVersionManager, RequestedVersion},
10
log,
11
util::{
12
errors::{AnyError, NoInstallInUserProvidedPath},
13
prereqs::PreReqChecker,
14
},
15
};
16
17
use super::{args::UseVersionArgs, CommandContext};
18
19
pub async fn switch_to(ctx: CommandContext, args: UseVersionArgs) -> Result<i32, AnyError> {
20
let platform = PreReqChecker::new().verify().await?;
21
let vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform);
22
let version = RequestedVersion::try_from(args.name.as_str())?;
23
24
let maybe_path = match args.install_dir {
25
Some(d) => Some(
26
CodeVersionManager::get_entrypoint_for_install_dir(&PathBuf::from(&d))
27
.await
28
.ok_or(NoInstallInUserProvidedPath(d))?,
29
),
30
None => vm.try_get_entrypoint(&version).await,
31
};
32
33
match maybe_path {
34
Some(p) => {
35
vm.set_preferred_version(version.clone(), p.clone()).await?;
36
print_now_using(&ctx.log, &version, &p);
37
Ok(0)
38
}
39
None => {
40
prompt_to_install(&version);
41
Ok(1)
42
}
43
}
44
}
45
46
pub async fn show(ctx: CommandContext) -> Result<i32, AnyError> {
47
let platform = PreReqChecker::new().verify().await?;
48
let vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform);
49
50
let version = vm.get_preferred_version();
51
println!("Current quality: {version}");
52
match vm.try_get_entrypoint(&version).await {
53
Some(p) => println!("Installation path: {}", p.display()),
54
None => println!("No existing installation found"),
55
}
56
57
Ok(0)
58
}
59
60
fn print_now_using(log: &log::Logger, version: &RequestedVersion, path: &Path) {
61
log.result(format!("Now using {} from {}", version, path.display()));
62
}
63
64