From d9115d7068fa20f319cbd17bed8f0687a4e6179a Mon Sep 17 00:00:00 2001 From: 255doesnotexist <1293883574jcy@gmail.com> Date: Mon, 23 Sep 2024 05:59:31 +0800 Subject: [PATCH] refractor(test_runner/{local,remote}): use pattern matching for metadata extraction - Replaced `.get().unwrap()` with pattern matching to avoid potential panics in both local and remote test runners. - Ensured proper handling of metadata vector by validating its length before extraction. - Improved code safety and readability by removing unsafe `unwrap()` calls. --- src/test_runner/local.rs | 23 ++++++++++++++++------- src/test_runner/remote.rs | 23 ++++++++++++++++------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/test_runner/local.rs b/src/test_runner/local.rs index f121b09..fd85e6f 100644 --- a/src/test_runner/local.rs +++ b/src/test_runner/local.rs @@ -80,7 +80,10 @@ impl TestRunner for LocalTestRunner { } let package_metadata = if let Some(metadata_script) = script_manager.get_metadata_script() { - let metadata_command = format!("source {} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", metadata_script); + let metadata_command = format!( + "source {} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", + metadata_script + ); let metadata_output = Command::new("bash") .arg("-c") .arg(metadata_command) @@ -89,18 +92,24 @@ impl TestRunner for LocalTestRunner { .lines() .map(|line| line.to_string()) .collect(); - PackageMetadata { - package_version: metadata_vec.get(0).unwrap().to_owned(), - package_pretty_name: metadata_vec.get(1).unwrap().to_owned(), - package_type: metadata_vec.get(2).unwrap().to_owned(), - package_description: metadata_vec.get(3).unwrap().to_owned(), + + if let [version, pretty_name, package_type, description] = &metadata_vec[..] { + PackageMetadata { + package_version: version.to_owned(), + package_pretty_name: pretty_name.to_owned(), + package_type: package_type.to_owned(), + package_description: description.to_owned(), + } + } else { + // 处理错误情况,向量长度不足 + panic!("Unexpected metadata format: not enough elements in metadata_vec"); } } else { PackageMetadata { package_pretty_name: package.to_string(), ..Default::default() } - }; + }; let report = Report { distro: distro.to_string(), diff --git a/src/test_runner/remote.rs b/src/test_runner/remote.rs index 1dbc693..30b2014 100644 --- a/src/test_runner/remote.rs +++ b/src/test_runner/remote.rs @@ -215,7 +215,10 @@ impl TestRunner for RemoteTestRunner { let kernel_version = self.run_command(&sess, "uname -r")?; let package_metadata = if let Some(metadata_script_name) = script_manager.get_metadata_script_name() { - let metadata_command = format!("source {}/{} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", remote_dir, metadata_script_name); + let metadata_command = format!( + "source {}/{} && echo $PACKAGE_VERSION && echo $PACKAGE_PRETTY_NAME && echo $PACKAGE_TYPE && echo $PACKAGE_DESCRIPTION", + remote_dir, metadata_script_name + ); let metadata_output = self.run_command(&sess, &metadata_command)?; let metadata_vec: Vec = metadata_output .output @@ -223,18 +226,24 @@ impl TestRunner for RemoteTestRunner { .lines() .map(|line| line.to_string()) .collect(); - PackageMetadata { - package_version: metadata_vec.get(0).unwrap().to_owned(), - package_pretty_name: metadata_vec.get(1).unwrap().to_owned(), - package_type: metadata_vec.get(2).unwrap().to_owned(), - package_description: metadata_vec.get(3).unwrap().to_owned(), + + if let [version, pretty_name, package_type, description] = &metadata_vec[..] { + PackageMetadata { + package_version: version.to_owned(), + package_pretty_name: pretty_name.to_owned(), + package_type: package_type.to_owned(), + package_description: description.to_owned(), + } + } else { + // 处理错误情况,如果 metadata_vec 不包含四个元素 + panic!("Unexpected metadata format: not enough elements in metadata_vec"); } } else { PackageMetadata { package_pretty_name: package.to_string(), ..Default::default() } - }; + }; let report = Report { distro: distro.to_string(),