@@ -219,6 +219,14 @@ impl CrateDetails {
219219 . transpose ( ) ?,
220220 } ;
221221
222+ // When documentation_url points to docs.rs itself, then we don't need to
223+ // show it on the page because user is already on docs.rs website
224+ let documentation_url = match krate. documentation_url {
225+ Some ( url) if url. starts_with ( "https://docs.rs/" ) => None ,
226+ Some ( url) => Some ( url) ,
227+ None => None ,
228+ } ;
229+
222230 let mut crate_details = CrateDetails {
223231 name : krate. name ,
224232 version : version. clone ( ) ,
@@ -241,9 +249,9 @@ impl CrateDetails {
241249 releases : prefetched_releases,
242250 repository_metadata,
243251 metadata,
252+ documentation_url,
244253 is_library : krate. is_library ,
245254 license : krate. license ,
246- documentation_url : krate. documentation_url ,
247255 documented_items : krate. documented_items ,
248256 total_items : krate. total_items ,
249257 total_items_needing_examples : krate. total_items_needing_examples ,
@@ -892,6 +900,50 @@ mod tests {
892900 Ok ( ( ) )
893901 }
894902
903+ #[ test]
904+ fn test_crate_details_documentation_url_is_none_when_url_is_docs_rs ( ) {
905+ wrapper ( |env| {
906+ let db = env. db ( ) ;
907+
908+ env. fake_release ( )
909+ . name ( "foo" )
910+ . version ( "0.1.0" )
911+ . documentation_url ( Some ( "https://foo.com" . into ( ) ) )
912+ . create ( ) ?;
913+ env. fake_release ( )
914+ . name ( "foo" )
915+ . version ( "0.2.0" )
916+ . documentation_url ( Some ( "https://docs.rs/foo/" . into ( ) ) )
917+ . create ( ) ?;
918+ env. fake_release ( )
919+ . name ( "foo" )
920+ . version ( "0.3.0" )
921+ . documentation_url ( None )
922+ . create ( ) ?;
923+
924+ let details_0_1 = env. runtime ( ) . block_on ( async move {
925+ let mut conn = db. async_conn ( ) . await ;
926+ crate_details ( & mut conn, "foo" , "0.1.0" , None ) . await
927+ } ) ;
928+ let details_0_2 = env. runtime ( ) . block_on ( async move {
929+ let mut conn = db. async_conn ( ) . await ;
930+ crate_details ( & mut conn, "foo" , "0.2.0" , None ) . await
931+ } ) ;
932+ let details_0_3 = env. runtime ( ) . block_on ( async move {
933+ let mut conn = db. async_conn ( ) . await ;
934+ crate_details ( & mut conn, "foo" , "0.3.0" , None ) . await
935+ } ) ;
936+
937+ assert_eq ! (
938+ details_0_1. documentation_url,
939+ Some ( "https://foo.com" . into( ) )
940+ ) ;
941+ assert_eq ! ( details_0_2. documentation_url, None ) ;
942+ assert_eq ! ( details_0_3. documentation_url, None ) ;
943+
944+ Ok ( ( ) )
945+ } ) ;
946+ }
895947 #[ test]
896948 fn test_last_successful_build_when_last_releases_failed_or_yanked ( ) {
897949 async_wrapper ( |env| async move {
0 commit comments