@@ -35,15 +35,13 @@ pub enum HfWriter {
3535 Regular {
3636 core : Arc < HfCore > ,
3737 path : String ,
38- size : u64 ,
3938 buf : Vec < Buffer > ,
4039 } ,
4140 /// XET writer for large files using streaming protocol.
4241 #[ cfg( feature = "xet" ) ]
4342 Xet {
4443 core : Arc < HfCore > ,
4544 path : String ,
46- size : u64 ,
4745 writer : Mutex < XetWriter > ,
4846 } ,
4947}
@@ -64,7 +62,6 @@ impl HfWriter {
6462 return Ok ( HfWriter :: Xet {
6563 core,
6664 path,
67- size : 0 ,
6865 writer : Mutex :: new ( writer) ,
6966 } ) ;
7067 }
@@ -77,7 +74,6 @@ impl HfWriter {
7774 Ok ( HfWriter :: Regular {
7875 core,
7976 path,
80- size : 0 ,
8177 buf : Vec :: new ( ) ,
8278 } )
8379 }
@@ -95,35 +91,25 @@ impl HfWriter {
9591impl oio:: Write for HfWriter {
9692 async fn write ( & mut self , bs : Buffer ) -> Result < ( ) > {
9793 match self {
98- HfWriter :: Regular { size, buf, .. } => {
99- * size += bs. len ( ) as u64 ;
94+ HfWriter :: Regular { buf, .. } => {
10095 buf. push ( bs) ;
10196 Ok ( ( ) )
10297 }
10398 #[ cfg( feature = "xet" ) ]
104- HfWriter :: Xet { size, writer, .. } => {
105- * size += bs. len ( ) as u64 ;
106- writer
107- . get_mut ( )
108- . unwrap ( )
109- . write ( bs. to_bytes ( ) )
110- . await
111- . map_err ( map_xet_error)
112- }
99+ HfWriter :: Xet { writer, .. } => writer
100+ . get_mut ( )
101+ . unwrap ( )
102+ . write ( bs. to_bytes ( ) )
103+ . await
104+ . map_err ( map_xet_error) ,
113105 }
114106 }
115107
116108 async fn close ( & mut self ) -> Result < Metadata > {
117109 match self {
118110 HfWriter :: Regular {
119- core,
120- path,
121- size,
122- buf,
123- ..
111+ core, path, buf, ..
124112 } => {
125- let content_length = * size;
126-
127113 // Flatten buffer
128114 let mut data = Vec :: new ( ) ;
129115 for buf in std:: mem:: take ( buf) {
@@ -133,20 +119,14 @@ impl oio::Write for HfWriter {
133119 let file = Self :: prepare_commit_file ( path, & data) ;
134120 let resp = core. commit_files ( vec ! [ file] , vec ! [ ] , vec ! [ ] ) . await ?;
135121
136- let mut meta = Metadata :: default ( ) . with_content_length ( content_length ) ;
122+ let mut meta = Metadata :: default ( ) . with_content_length ( data . len ( ) as u64 ) ;
137123 if let Some ( commit_oid) = resp. commit_oid {
138124 meta = meta. with_version ( commit_oid) ;
139125 }
140126 Ok ( meta)
141127 }
142128 #[ cfg( feature = "xet" ) ]
143- HfWriter :: Xet {
144- core,
145- path,
146- size,
147- writer,
148- } => {
149- let content_length = * size;
129+ HfWriter :: Xet { core, path, writer } => {
150130 let file_info = writer
151131 . get_mut ( )
152132 . unwrap ( )
@@ -163,11 +143,11 @@ impl oio::Write for HfWriter {
163143 path : path. clone ( ) ,
164144 oid : sha256. to_string ( ) ,
165145 algo : "sha256" . to_string ( ) ,
166- size : content_length ,
146+ size : file_info . file_size ( ) ,
167147 } ;
168148 let resp = core. commit_files ( vec ! [ ] , vec ! [ lfs_file] , vec ! [ ] ) . await ?;
169149
170- let mut meta = Metadata :: default ( ) . with_content_length ( content_length ) ;
150+ let mut meta = Metadata :: default ( ) . with_content_length ( file_info . file_size ( ) ) ;
171151 if let Some ( commit_oid) = resp. commit_oid {
172152 meta = meta. with_version ( commit_oid) ;
173153 }
0 commit comments