@@ -22,7 +22,7 @@ use cargo::core::registry::PackageRegistry;
2222use cargo:: core:: resolver:: features:: HasDevUnits ;
2323use cargo:: core:: resolver:: CliFeatures ;
2424use cargo:: core:: source:: GitReference ;
25- use cargo:: core:: { Package , PackageSet , Resolve , Workspace } ;
25+ use cargo:: core:: { Package , PackageSet , Resolve , Workspace , PackageId } ;
2626use cargo:: ops;
2727use cargo:: util:: { important_paths, CargoResult } ;
2828use cargo:: { CliResult , Config } ;
@@ -123,6 +123,14 @@ impl<'cfg> PackageInfo<'cfg> {
123123 }
124124}
125125
126+ fn get_checksum ( package_set : & PackageSet , pkg_id : PackageId ) -> String {
127+ match package_set. get_one ( pkg_id) . map ( |pkg| pkg. summary ( ) . checksum ( ) ) {
128+ Err ( _) | Ok ( None ) => "" . to_string ( ) ,
129+ Ok ( Some ( crc) ) => format ! ( ";sha256sum={crc};{}-{}.sha256sum={crc}" ,
130+ pkg_id. name( ) , pkg_id. version( ) ) ,
131+ }
132+ }
133+
126134#[ derive( StructOpt , Debug ) ]
127135struct Args {
128136 /// Silence all output
@@ -201,6 +209,7 @@ fn real_main(options: Args, config: &mut Config) -> CliResult {
201209
202210 // Resolve all dependencies (generate or use Cargo.lock as necessary)
203211 let resolve = md. resolve ( ) ?;
212+ let package_set = resolve. 0 ;
204213
205214 // build the crate URIs
206215 let mut src_uri_extras = vec ! [ ] ;
@@ -215,10 +224,11 @@ fn real_main(options: Args, config: &mut Config) -> CliResult {
215224 } else if src_id. is_registry ( ) {
216225 // this package appears in a crate registry
217226 Some ( format ! (
218- " crate://{}/{}/{} \\ \n " ,
227+ " crate://{}/{}/{}{} \\ \n " ,
219228 CRATES_IO_URL ,
220229 pkg. name( ) ,
221- pkg. version( )
230+ pkg. version( ) ,
231+ get_checksum( & package_set, pkg)
222232 ) )
223233 } else if src_id. is_path ( ) {
224234 // we don't want to spit out path based
0 commit comments