@@ -7,7 +7,7 @@ use crate::{
77 } ,
88 error:: TmcError ,
99 policy:: StudentFilePolicy ,
10- Archive , TmcProjectYml ,
10+ Archive , Compression , TmcProjectYml ,
1111} ;
1212pub use isolang:: Language ;
1313use nom:: { branch, bytes, character, combinator, error:: VerboseError , multi, sequence, IResult } ;
@@ -99,22 +99,23 @@ pub trait LanguagePlugin {
9999 fn extract_project (
100100 compressed_project : impl std:: io:: Read + std:: io:: Seek ,
101101 target_location : & Path ,
102+ compression : Compression ,
102103 clean : bool ,
103104 ) -> Result < ( ) , TmcError > {
104105 log:: debug!( "Unzipping to {}" , target_location. display( ) ) ;
105106
106- let mut zip_archive = Archive :: zip ( compressed_project) ?;
107+ let mut archive = Archive :: new ( compressed_project, compression ) ?;
107108
108109 // find the exercise root directory inside the archive
109- let project_dir = Self :: find_project_dir_in_archive ( & mut zip_archive ) ?;
110+ let project_dir = Self :: find_project_dir_in_archive ( & mut archive ) ?;
110111 log:: debug!( "Project dir in zip: {}" , project_dir. display( ) ) ;
111112
112113 // extract config file if any
113114 let tmc_project_yml_path = project_dir. join ( ".tmcproject.yml" ) ;
114115 let tmc_project_yml_path_s = tmc_project_yml_path
115116 . to_str ( )
116117 . ok_or_else ( || TmcError :: ProjectDirInvalidUtf8 ( project_dir. clone ( ) ) ) ?;
117- if let Ok ( mut file) = zip_archive . by_path ( tmc_project_yml_path_s) {
118+ if let Ok ( mut file) = archive . by_path ( tmc_project_yml_path_s) {
118119 let target_path = target_location. join ( ".tmcproject.yml" ) ;
119120 file_util:: read_to_file ( & mut file, target_path) ?;
120121 }
@@ -123,7 +124,7 @@ pub trait LanguagePlugin {
123124 // used to clean non-student files not in the zip later
124125 let mut files_from_zip = HashSet :: new ( ) ;
125126
126- let mut iter = zip_archive . iter ( ) ?;
127+ let mut iter = archive . iter ( ) ?;
127128 loop {
128129 let next = iter. with_next :: < ( ) , _ > ( |mut file| {
129130 let file_path = file. path ( ) ?;
@@ -860,6 +861,7 @@ def f():
860861 MockPlugin :: extract_project (
861862 std:: io:: Cursor :: new ( zip) ,
862863 & temp. path ( ) . join ( "extracted" ) ,
864+ Compression :: Zip ,
863865 false ,
864866 )
865867 . unwrap ( ) ;
@@ -893,6 +895,7 @@ def f():
893895 MockPlugin :: extract_project (
894896 std:: io:: Cursor :: new ( zip) ,
895897 & temp. path ( ) . join ( "extracted" ) ,
898+ Compression :: Zip ,
896899 false ,
897900 )
898901 . unwrap ( ) ;
@@ -934,6 +937,7 @@ force_update:
934937 MockPlugin :: extract_project (
935938 std:: io:: Cursor :: new ( zip) ,
936939 & temp. path ( ) . join ( "extracted" ) ,
940+ Compression :: Zip ,
937941 false ,
938942 )
939943 . unwrap ( ) ;
@@ -970,6 +974,7 @@ force_update:
970974 MockPlugin :: extract_project (
971975 std:: io:: Cursor :: new ( zip) ,
972976 & temp. path ( ) . join ( "extracted" ) ,
977+ Compression :: Zip ,
973978 false ,
974979 )
975980 . unwrap ( ) ;
@@ -999,6 +1004,7 @@ force_update:
9991004 MockPlugin :: extract_project (
10001005 std:: io:: Cursor :: new ( zip) ,
10011006 & temp. path ( ) . join ( "extracted" ) ,
1007+ Compression :: Zip ,
10021008 true ,
10031009 )
10041010 . unwrap ( ) ;
0 commit comments