From b4dae4bfa8d94517e78fe2f5a15dedf2ce27f86d Mon Sep 17 00:00:00 2001 From: ellieplayswow <164806095+ellieplayswow@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:51:42 +0000 Subject: [PATCH] VecDeque makes more sense to maintain order of operations --- src/operation/mod.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/operation/mod.rs b/src/operation/mod.rs index c45349e..d8deaa4 100644 --- a/src/operation/mod.rs +++ b/src/operation/mod.rs @@ -6,6 +6,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; +use std::collections::VecDeque; use std::fmt::{Formatter}; use tokio::sync::{mpsc, Mutex as TokioMutex}; use walkdir::WalkDir; @@ -119,7 +120,7 @@ fn zip_extract>( let mut files_by_unix_mode = Vec::new(); let mut buffer = vec![0; 4 * 1024 * 1024]; let total_files = archive.len(); - let mut pending_directory_creates = Vec::new(); + let mut pending_directory_creates = VecDeque::new(); for i in 0..total_files { controller @@ -139,7 +140,7 @@ fn zip_extract>( let outpath = directory.as_ref().join(filepath); if file.is_dir() { - pending_directory_creates.push(outpath.clone()); + pending_directory_creates.push_back(outpath.clone()); continue; } let symlink_target = if file.is_symlink() && (cfg!(unix) || cfg!(windows)) { @@ -152,7 +153,7 @@ fn zip_extract>( drop(file); if let Some(target) = symlink_target { // create all pending dirs - while let Some(pending_dir) = pending_directory_creates.pop() { + while let Some(pending_dir) = pending_directory_creates.pop_front() { make_writable_dir_all(pending_dir)?; } @@ -196,7 +197,7 @@ fn zip_extract>( }.map_err(|e| e)?; // create all pending dirs - while let Some(pending_dir) = pending_directory_creates.pop() { + while let Some(pending_dir) = pending_directory_creates.pop_front() { make_writable_dir_all(pending_dir)?; }