Skip to content

Commit 9bffabd

Browse files
authored
[rust] Avoid using robocopy to move extracted files from sfx in windows (#12690)
1 parent b687c7b commit 9bffabd

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

rust/src/files.rs

+15-12
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use crate::config::OS::WINDOWS;
3636
use crate::{
3737
format_one_arg, format_three_args, format_two_args, run_shell_command_by_os, Command, Logger,
3838
CP_VOLUME_COMMAND, HDIUTIL_ATTACH_COMMAND, HDIUTIL_DETACH_COMMAND, MACOS, MV_PAYLOAD_COMMAND,
39-
MV_PAYLOAD_OLD_VERSIONS_COMMAND, MV_SFX_COMMAND, PKGUTIL_COMMAND,
39+
MV_PAYLOAD_OLD_VERSIONS_COMMAND, PKGUTIL_COMMAND,
4040
};
4141

4242
pub const PARSE_ERROR: &str = "Wrong browser/driver version";
@@ -135,7 +135,7 @@ pub fn uncompress(
135135
} else if extension.eq_ignore_ascii_case(DMG) {
136136
uncompress_dmg(compressed_file, target, log, os, volume.unwrap_or_default())?
137137
} else if extension.eq_ignore_ascii_case(EXE) {
138-
uncompress_sfx(compressed_file, target, log, os)?
138+
uncompress_sfx(compressed_file, target, log)?
139139
} else if extension.eq_ignore_ascii_case(XML) || extension.eq_ignore_ascii_case(HTML) {
140140
log.debug(format!(
141141
"Wrong downloaded driver: {}",
@@ -156,26 +156,29 @@ pub fn uncompress_sfx(
156156
compressed_file: &str,
157157
target: &Path,
158158
log: &Logger,
159-
os: &str,
160159
) -> Result<(), Box<dyn Error>> {
160+
let zip_parent = Path::new(compressed_file).parent().unwrap();
161161
log.trace(format!(
162-
"Uncompress {} to {}",
162+
"Decompressing {} to {}",
163163
compressed_file,
164-
target.display()
164+
zip_parent.display()
165165
));
166+
166167
let file_bytes = read_bytes_from_file(compressed_file)?;
167168
let header = find_bytes(&file_bytes, SEVEN_ZIP_HEADER);
168169
let index_7z = header.ok_or("Incorrect SFX (self extracting exe) file")?;
169170
let file_reader = Cursor::new(&file_bytes[index_7z..]);
170-
sevenz_rust::decompress(file_reader, target).unwrap();
171+
sevenz_rust::decompress(file_reader, zip_parent).unwrap();
171172

173+
let zip_parent_str = path_buf_to_string(zip_parent.to_path_buf());
172174
let target_str = path_buf_to_string(target.to_path_buf());
173-
let command = Command::new_single(format_two_args(MV_SFX_COMMAND, &target_str, &target_str));
174-
log.trace(format!("Running command: {}", command.display()));
175-
run_shell_command_by_os(os, command)?;
176-
177-
let setup_file = target.join("setup.exe");
178-
fs::remove_file(setup_file.as_path())?;
175+
let core_str = format!(r#"{}\core"#, zip_parent_str);
176+
log.trace(format!(
177+
"Moving extracted files and folders from {} to {}",
178+
core_str, target_str
179+
));
180+
create_parent_path_if_not_exists(target)?;
181+
fs::rename(&core_str, &target_str)?;
179182

180183
Ok(())
181184
}

rust/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ pub const HDIUTIL_DETACH_COMMAND: &str = "hdiutil detach /Volumes/{}";
8080
pub const CP_VOLUME_COMMAND: &str = "cp -R /Volumes/{}/{}.app {}";
8181
pub const MV_PAYLOAD_COMMAND: &str = "mv {}/*{}/Payload/*.app {}";
8282
pub const MV_PAYLOAD_OLD_VERSIONS_COMMAND: &str = "mv {}/Payload/*.app {}";
83-
pub const MV_SFX_COMMAND: &str = r#"robocopy {}\core {} /e /move"#;
8483
pub const DASH_VERSION: &str = "{}{}{} -v";
8584
pub const DASH_DASH_VERSION: &str = "{}{}{} --version";
8685
pub const DOUBLE_QUOTE: &str = "\"";

0 commit comments

Comments
 (0)