File tree Expand file tree Collapse file tree 1 file changed +24
-1
lines changed
Expand file tree Collapse file tree 1 file changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -58,7 +58,19 @@ impl ModelCache {
5858 pub fn link_model ( & self , spec : & ModelSpec , source : & Path ) -> Result < PathBuf , NodeError > {
5959 let dest = self . cache_dir . join ( & spec. hf_file ) ;
6060 if dest. exists ( ) {
61- // Already linked or copied
61+ // On non-unix (Windows) we copy files, so verify the copy isn't truncated.
62+ // A previous interrupted copy could leave a 0-byte or partial file.
63+ #[ cfg( not( unix) ) ]
64+ {
65+ let src_len = std:: fs:: metadata ( source) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
66+ let dst_len = std:: fs:: metadata ( & dest) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
67+ if src_len > 0 && dst_len != src_len {
68+ std:: fs:: remove_file ( & dest) ?;
69+ } else {
70+ return Ok ( dest) ;
71+ }
72+ }
73+ #[ cfg( unix) ]
6274 return Ok ( dest) ;
6375 }
6476
@@ -81,6 +93,17 @@ impl ModelCache {
8193 let prefixed = format ! ( "{}_{}" , spec. name. replace( ':' , "-" ) , file) ;
8294 let dest = self . cache_dir . join ( & prefixed) ;
8395 if dest. exists ( ) {
96+ #[ cfg( not( unix) ) ]
97+ {
98+ let src_len = std:: fs:: metadata ( source) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
99+ let dst_len = std:: fs:: metadata ( & dest) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
100+ if src_len > 0 && dst_len != src_len {
101+ std:: fs:: remove_file ( & dest) ?;
102+ } else {
103+ return Ok ( dest) ;
104+ }
105+ }
106+ #[ cfg( unix) ]
84107 return Ok ( dest) ;
85108 }
86109
You can’t perform that action at this time.
0 commit comments