Skip to content

Commit

Permalink
feat: 临时脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
1739616529 committed Jul 19, 2024
1 parent 1c5acae commit 14cdb9a
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 10 deletions.
19 changes: 10 additions & 9 deletions crates/nsv/src/command/use.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use async_trait::async_trait;
use root::core::NsvCore;
use root::{core::NsvCore, node::NodeDispose};

use super::Command;
use root::node::NsvCoreError;
Expand All @@ -12,14 +12,15 @@ pub struct Use {

#[async_trait]
impl Command for Use {
async fn apply(&self, _core: &mut NsvCore) -> Result<(), NsvCoreError> {
// core.set_version_target(&self.version)?;
// let local_node_version = core.get_version_by_local().await;
// if local_node_version.is_none() {
// return Err(NsvCoreError::NodeVersionLocalNotFound)
// }
// let local_node_version = local_node_version.as_ref().unwrap();

async fn apply(&self, core: &mut NsvCore) -> Result<(), NsvCoreError> {
core.set_version_target(&self.version)?;
let local_node_version = core.get_version_by_local().await;
if local_node_version.is_none() {
return Err(NsvCoreError::NodeVersionLocalNotFound)
}
let local_node_version = local_node_version.as_ref().unwrap();
let set_version_shell = core.create_temp_node_version_shell(local_node_version);
core.create_temp_script_file(set_version_shell).await;
Ok(())
}
}
Expand Down
36 changes: 35 additions & 1 deletion crates/root/src/node/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ use crate::util::dir::ensure_dir;
use crate::util::download::{download_file, unzip_file};
use async_trait::async_trait;
use serde::Deserialize;
use tokio::io::AsyncWriteExt;
use std::fs::{read_dir, DirEntry};
use std::path::{Path, PathBuf};
use tokio::fs::rename;
use tokio::fs::{rename, File};

#[derive(PartialEq, Debug, Clone)]
pub enum VersionTarget {
Expand Down Expand Up @@ -73,6 +74,13 @@ pub trait NodeDispose {

/// 获取本地node版本
async fn get_version_by_local(&mut self) -> Option<String>;

/// 创建临时脚本文件
async fn create_temp_script_file(&self, shell: String) -> PathBuf;

/// 生成临时切换node version 脚本
fn create_temp_node_version_shell(&self, version: &String) -> String;

}

#[async_trait]
Expand Down Expand Up @@ -230,6 +238,32 @@ impl NodeDispose for NsvCore {
None
}
}

async fn create_temp_script_file(&self, shell: String) -> PathBuf {
let mut temp_dir = self.context.temp.clone();
temp_dir.push("temp_version");
let mut temp_file = File::create(&temp_dir).await.unwrap();
temp_file.write_all(shell.as_bytes()).await.unwrap();
return temp_dir
}

fn create_temp_node_version_shell(&self, version: &String) -> String {
#[cfg(any(target_os = "linux", target_os = "macos"))]
let bin = "bin";
#[cfg(target_os = "windows")]
let bin = "";
let mut node_dir = self.context.node_dir.clone();
node_dir.push(version);
node_dir.push(bin);

#[cfg(any(target_os = "linux", target_os = "macos"))]
let bin = format!(&"#!/bin/bash
export PATH={}:$PATH", node_dir.to_str().unwrap());
#[cfg(target_os = "windows")]
let bin = format!("$Env:PATH = \"{};\" + $Env:PATH", node_dir.to_str().unwrap());

return bin;
}
}

#[derive(Clone, Debug, Deserialize)]
Expand Down

0 comments on commit 14cdb9a

Please sign in to comment.