@@ -219,6 +219,14 @@ impl CrateDetails {
219
219
. transpose ( ) ?,
220
220
} ;
221
221
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
+
222
230
let mut crate_details = CrateDetails {
223
231
name : krate. name ,
224
232
version : version. clone ( ) ,
@@ -241,9 +249,9 @@ impl CrateDetails {
241
249
releases : prefetched_releases,
242
250
repository_metadata,
243
251
metadata,
252
+ documentation_url,
244
253
is_library : krate. is_library ,
245
254
license : krate. license ,
246
- documentation_url : krate. documentation_url ,
247
255
documented_items : krate. documented_items ,
248
256
total_items : krate. total_items ,
249
257
total_items_needing_examples : krate. total_items_needing_examples ,
@@ -892,6 +900,49 @@ mod tests {
892
900
Ok ( ( ) )
893
901
}
894
902
903
+ #[ test]
904
+ fn test_crate_details_documentation_url_is_none_when_url_is_docs_rs ( ) {
905
+ async_wrapper ( |env| async move {
906
+ let db = env. async_db ( ) . await ;
907
+ let mut conn = db. async_conn ( ) . await ;
908
+
909
+ env. async_fake_release ( )
910
+ . await
911
+ . name ( "foo" )
912
+ . version ( "0.1.0" )
913
+ . documentation_url ( Some ( "https://foo.com" . into ( ) ) )
914
+ . create_async ( )
915
+ . await ?;
916
+ env. async_fake_release ( )
917
+ . await
918
+ . name ( "foo" )
919
+ . version ( "0.2.0" )
920
+ . documentation_url ( Some ( "https://docs.rs/foo/" . into ( ) ) )
921
+ . create_async ( )
922
+ . await ?;
923
+ env. async_fake_release ( )
924
+ . await
925
+ . name ( "foo" )
926
+ . version ( "0.3.0" )
927
+ . documentation_url ( None )
928
+ . create_async ( )
929
+ . await ?;
930
+
931
+ let details_0_1 = crate_details ( & mut conn, "foo" , "0.1.0" , None ) . await ;
932
+ let details_0_2 = crate_details ( & mut conn, "foo" , "0.2.0" , None ) . await ;
933
+ let details_0_3 = crate_details ( & mut conn, "foo" , "0.3.0" , None ) . await ;
934
+
935
+ assert_eq ! (
936
+ details_0_1. documentation_url,
937
+ Some ( "https://foo.com" . into( ) )
938
+ ) ;
939
+ assert_eq ! ( details_0_2. documentation_url, None ) ;
940
+ assert_eq ! ( details_0_3. documentation_url, None ) ;
941
+
942
+ Ok ( ( ) )
943
+ } ) ;
944
+ }
945
+
895
946
#[ test]
896
947
fn test_last_successful_build_when_last_releases_failed_or_yanked ( ) {
897
948
async_wrapper ( |env| async move {
0 commit comments