@@ -614,20 +614,25 @@ impl<'a> BlobWriter<'a> {
614
614
found : self . size ,
615
615
} ) ;
616
616
}
617
- self . complete ( )
617
+ self . complete_as ( & found_digest )
618
618
}
619
619
620
- /// Finish writing this blob object.
621
- pub fn complete ( mut self ) -> Result < Blob > {
622
- let sha256 = hex:: encode ( self . hash . finish ( ) ?) ;
623
- let destname = & format ! ( "{}/{}" , BLOBDIR , sha256) ;
620
+ /// Finish writing this blob object with the supplied name
621
+ fn complete_as ( mut self , sha256_digest : & str ) -> Result < Blob > {
622
+ let destname = & format ! ( "{}/{}" , BLOBDIR , sha256_digest) ;
624
623
let target = self . target . take ( ) . unwrap ( ) ;
625
624
target. replace ( destname) ?;
626
625
Ok ( Blob {
627
- sha256 : Sha256Digest :: from_str ( & sha256 ) . unwrap ( ) ,
626
+ sha256 : Sha256Digest :: from_str ( sha256_digest ) . unwrap ( ) ,
628
627
size : self . size ,
629
628
} )
630
629
}
630
+
631
+ /// Finish writing this blob object.
632
+ pub fn complete ( mut self ) -> Result < Blob > {
633
+ let sha256 = hex:: encode ( self . hash . finish ( ) ?) ;
634
+ self . complete_as ( & sha256)
635
+ }
631
636
}
632
637
633
638
impl < ' a > std:: io:: Write for BlobWriter < ' a > {
@@ -814,4 +819,23 @@ mod tests {
814
819
assert_eq ! ( w. fsck( ) . unwrap( ) , 6 ) ;
815
820
Ok ( ( ) )
816
821
}
822
+
823
+ #[ test]
824
+ fn test_complete_verified_as ( ) -> Result < ( ) > {
825
+ let td = cap_tempfile:: tempdir ( cap_std:: ambient_authority ( ) ) ?;
826
+ let oci_dir = OciDir :: ensure ( & td) ?;
827
+ let empty_json_digest = oci_image:: DescriptorBuilder :: default ( )
828
+ . media_type ( MediaType :: EmptyJSON )
829
+ . size ( 2_u32 )
830
+ . digest ( Sha256Digest :: from_str (
831
+ "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a" ,
832
+ ) ?)
833
+ . build ( ) ?;
834
+
835
+ let mut empty_json_blob = oci_dir. create_blob ( ) ?;
836
+ empty_json_blob. write_all ( "{}" . as_bytes ( ) ) ?;
837
+ let blob = empty_json_blob. complete_verified_as ( & empty_json_digest) ?;
838
+ assert_eq ! ( blob. sha256( ) . digest( ) , empty_json_digest. digest( ) . digest( ) ) ;
839
+ Ok ( ( ) )
840
+ }
817
841
}
0 commit comments