@@ -4,7 +4,7 @@ use super::TmcProjectYml;
44use crate :: data:: { OutputFormat , TmcParams } ;
55use crate :: error:: LangsError ;
66use std:: ffi:: OsStr ;
7- use std:: io:: Write ;
7+ use std:: io:: { Cursor , Write } ;
88use std:: path:: Path ;
99use std:: path:: PathBuf ;
1010use tmc_langs_plugins:: Plugin ;
@@ -287,9 +287,8 @@ pub fn prepare_submission(
287287 archive. finish ( ) ?;
288288 }
289289 OutputFormat :: TarZstd => {
290- // create temporary tar file
291- let temp = tempfile:: NamedTempFile :: new ( ) . map_err ( LangsError :: TempFile ) ?;
292- let mut archive = tar:: Builder :: new ( temp) ;
290+ let buf = Cursor :: new ( vec ! [ ] ) ;
291+ let mut archive = tar:: Builder :: new ( buf) ;
293292 log:: debug!(
294293 "appending \" {}\" at \" {}\" " ,
295294 dest. display( ) ,
@@ -299,11 +298,9 @@ pub fn prepare_submission(
299298 . append_dir_all ( prefix, & dest)
300299 . map_err ( |e| LangsError :: TarAppend ( dest, e) ) ?;
301300 archive. finish ( ) . map_err ( LangsError :: TarFinish ) ?;
302- let tar = archive. into_inner ( ) . map_err ( LangsError :: TarIntoInner ) ?;
303- // the existing file handle has been read to the end and is now empty, so we reopen it
304- let reopened = file_util:: open_file ( tar. path ( ) ) ?;
305- zstd:: stream:: copy_encode ( reopened, archive_file, 0 )
306- . map_err ( |e| LangsError :: Zstd ( tar. path ( ) . to_path_buf ( ) , e) ) ?;
301+ let mut tar = archive. into_inner ( ) . map_err ( LangsError :: TarIntoInner ) ?;
302+ tar. set_position ( 0 ) ; // reset the cursor
303+ zstd:: stream:: copy_encode ( tar, archive_file, 0 ) . map_err ( LangsError :: Zstd ) ?;
307304 }
308305 }
309306 Ok ( ( ) )
0 commit comments