Skip to content

Commit 2f4dcaf

Browse files
humbertoyustaolegklimov
authored andcommitted
fix: replace async tar with tokio tar to not use different async environments
1 parent db2dbcc commit 2f4dcaf

File tree

4 files changed

+9
-13
lines changed

4 files changed

+9
-13
lines changed

refact-agent/engine/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ shadow-rs = "0.36.0"
2222
axum = { version = "0.6.20", features = ["default", "http2"] }
2323
async-process = "2.0.1"
2424
async-stream = "0.3.5"
25-
async-tar = "0.5.0"
2625
async-trait = "0.1.73"
2726
auto_generate_cdp = "=0.4.4" # Temporary fix for headless_chrome dependency, we don't use it directly
2827
backtrace = "0.3.71"
@@ -31,7 +30,6 @@ chrono = { version = "0.4.31", features = ["serde"] }
3130
diff = "0.1.13"
3231
dyn_partial_eq = "=0.1.2"
3332
futures = "0.3"
34-
futures-util = "0.3"
3533
git2 = "0.19.0"
3634
glob = "0.3.1"
3735
hashbrown = "0.15.2"
@@ -79,6 +77,7 @@ tokenizers = "0.21.0"
7977
tokio = { version = "1.43.0", features = ["fs", "io-std", "io-util", "macros", "rt-multi-thread", "signal", "process"] }
8078
tokio-rusqlite = "0.5.0"
8179
tokio-util = { version = "0.7.12", features = ["compat"] }
80+
tokio-tar = "0.3.1"
8281
tower = { version = "0.4", features = ["full"] }
8382
tower-http = { version = "0.4.0", features = ["cors"] }
8483
tower-lsp = "0.20"

refact-agent/engine/src/http/routers/v1/sync_files.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
use std::path::PathBuf;
22
use std::sync::Arc;
3-
use async_tar::Archive;
3+
use tokio_tar::Archive;
44
use axum::Extension;
55
use axum::http::{Response, StatusCode};
66
use hyper::Body;
77
use serde::{Deserialize, Serialize};
88
use tokio::sync::RwLock as ARwLock;
9-
use tokio_util::compat::TokioAsyncWriteCompatExt;
109

1110
use crate::custom_error::ScratchError;
1211
use crate::global_context::GlobalContext;
@@ -29,7 +28,7 @@ pub async fn handle_v1_sync_files_extract_tar(
2928
let tar_file = tokio::fs::File::open(&tar_path).await
3029
.map_err(|e| ScratchError::new(StatusCode::UNPROCESSABLE_ENTITY, format!("Can't open tar file: {}", e)))?;
3130

32-
Archive::new(tar_file.compat_write()).unpack(&extract_to).await
31+
Archive::new(tar_file).unpack(&extract_to).await
3332
.map_err(|e| ScratchError::new(StatusCode::INTERNAL_SERVER_ERROR, format!("Can't unpack tar file: {}", e)))?;
3433

3534
tokio::fs::remove_file(&tar_path).await

refact-agent/engine/src/integrations/docker/docker_container_manager.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
use std::path::PathBuf;
22
use std::{sync::Arc, sync::Weak, time::SystemTime};
33
use std::future::Future;
4-
use tokio::fs::File;
54
use tokio::sync::{Mutex as AMutex, RwLock as ARwLock};
65
use tokio::time::Duration;
7-
use tokio_util::compat::{Compat, TokioAsyncWriteCompatExt};
86
use tracing::{error, info, warn};
97
use url::Url;
108
use walkdir::WalkDir;
@@ -282,7 +280,7 @@ async fn docker_create_network_if_not_exists(gcx: Arc<ARwLock<GlobalContext>>, d
282280
let (network_ls_output, _) = docker.command_execute(&network_ls_command, gcx.clone(), true, true).await?;
283281
if !network_ls_output.contains(network_name) {
284282
let network_create_command = format!("network create {quoted_network_name}");
285-
let (network_create_output, _) = docker.command_execute(&network_create_command, gcx.clone(), true, true).await?;
283+
let (_network_create_output, _) = docker.command_execute(&network_create_command, gcx.clone(), true, true).await?;
286284
}
287285
Ok(())
288286
}
@@ -402,12 +400,12 @@ async fn docker_container_sync_workspace(
402400
let temp_tar_file = tempfile::Builder::new().suffix(".tar").tempfile()
403401
.map_err(|e| format!("Error creating temporary tar file: {}", e))?.into_temp_path();
404402
let tar_file_name = temp_tar_file.file_name().unwrap_or_default().to_string_lossy().to_string();
405-
let tar_async_file = File::create(&temp_tar_file).await
403+
let tar_async_file = tokio::fs::File::create(&temp_tar_file).await
406404
.map_err(|e| format!("Error opening temporary tar file: {}", e))?;
407405

408-
let mut tar_builder = async_tar::Builder::new(tar_async_file.compat_write());
406+
let mut tar_builder = tokio_tar::Builder::new(tar_async_file);
409407
tar_builder.follow_symlinks(true);
410-
tar_builder.mode(async_tar::HeaderMode::Complete);
408+
tar_builder.mode(tokio_tar::HeaderMode::Complete);
411409

412410
let mut indexing_everywhere = crate::files_blocklist::reload_global_indexing_only(gcx.clone()).await;
413411
let (all_files, _vcs_folders) = crate::files_in_workspace::retrieve_files_in_workspace_folders(
@@ -460,7 +458,7 @@ async fn docker_container_sync_workspace(
460458
}
461459

462460
async fn append_folder_if_exists(
463-
tar_builder: &mut async_tar::Builder<Compat<File>>,
461+
tar_builder: &mut tokio_tar::Builder<tokio::fs::File>,
464462
workspace_folder: &PathBuf,
465463
folder_name: &str
466464
) -> Result<(), String> {

refact-agent/engine/src/tools/tool_relevant_files.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::collections::HashMap;
22
use std::string::ToString;
33
use std::sync::Arc;
4+
use futures::future::join_all;
45
use serde::{Deserialize, Serialize};
56
use serde_json::Value;
67
use regex::Regex;
@@ -10,7 +11,6 @@ use async_trait::async_trait;
1011
use indexmap::IndexMap;
1112
use tokio::sync::Mutex as AMutex;
1213
use tokio::sync::RwLock as ARwLock;
13-
use futures_util::future::join_all;
1414
use hashbrown::HashSet;
1515

1616
use crate::global_context::GlobalContext;

0 commit comments

Comments
 (0)