@@ -33,6 +33,9 @@ fn str_to_protocol(s: &str) -> Result<Protocol, Error> {
3333 Ok ( match s {
3434 "ssh" => Protocol :: Ssh ,
3535 "file" => Protocol :: File ,
36+ "git" => Protocol :: Git ,
37+ "http" => Protocol :: Http ,
38+ "https" => Protocol :: Https ,
3639 _ => return Err ( Error :: UnsupportedProtocol ( s. into ( ) ) ) ,
3740 } )
3841}
@@ -89,22 +92,26 @@ fn with_parsed_user_expansion(url: url::Url) -> Result<owned::Url, Error> {
8992 return to_owned_url ( url) ;
9093 }
9194
92- dbg ! ( url. path_segments( ) . map( |v| v. collect:: <Vec <_>>( ) ) ) ;
93- let expand_user = url. path_segments ( ) . and_then ( |mut iter| {
94- iter. next ( ) . and_then ( |segment| {
95- if segment. starts_with ( "~" ) {
96- if segment. len ( ) == 1 {
97- Some ( UserExpansion :: Current )
95+ let ( expand_user, path) = url
96+ . path_segments ( )
97+ . and_then ( |mut iter| {
98+ iter. next ( ) . map ( |segment| {
99+ if segment. starts_with ( "~" ) {
100+ let eu = if segment. len ( ) == 1 {
101+ Some ( UserExpansion :: Current )
102+ } else {
103+ Some ( UserExpansion :: Name ( segment[ 1 ..] . into ( ) ) )
104+ } ;
105+ ( eu, format ! ( "/{}" , iter. collect:: <Vec <_>>( ) . join( "/" ) ) . into ( ) )
98106 } else {
99- Some ( UserExpansion :: Name ( segment [ 1 .. ] . into ( ) ) )
107+ ( None , url . path ( ) . into ( ) )
100108 }
101- } else {
102- None
103- }
109+ } )
104110 } )
105- } ) ;
111+ . unwrap_or_else ( || ( None , url . path ( ) . into ( ) ) ) ;
106112 let mut url = to_owned_url ( url) ?;
107113 url. expand_user = expand_user;
114+ url. path = path;
108115 Ok ( url)
109116}
110117
0 commit comments