@@ -146,27 +146,25 @@ pub struct MatchSpec {
146
146
impl Display for MatchSpec {
147
147
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> std:: fmt:: Result {
148
148
if let Some ( channel) = & self . channel {
149
- if let Some ( name) = & channel. name {
150
- // TODO: namespace
151
- write ! ( f, "{name}" ) ?;
149
+ let name = channel. name ( ) ;
150
+ write ! ( f, "{name}" ) ?;
151
+
152
+ if let Some ( subdir) = & self . subdir {
153
+ write ! ( f, "/{subdir}" ) ?;
152
154
}
153
155
}
154
156
155
- if let Some ( subdir) = & self . subdir {
156
- write ! ( f, "/{subdir}" ) ?;
157
+ if let Some ( namespace) = & self . namespace {
158
+ write ! ( f, ":{namespace}:" ) ?;
159
+ } else if self . channel . is_some ( ) || self . subdir . is_some ( ) {
160
+ write ! ( f, "::" ) ?;
157
161
}
158
162
159
163
match & self . name {
160
164
Some ( name) => write ! ( f, "{}" , name. as_normalized( ) ) ?,
161
165
None => write ! ( f, "*" ) ?,
162
166
}
163
167
164
- if let Some ( namespace) = & self . namespace {
165
- write ! ( f, ":{namespace}:" ) ?;
166
- } else if self . channel . is_some ( ) || self . subdir . is_some ( ) {
167
- write ! ( f, "::" ) ?;
168
- }
169
-
170
168
if let Some ( version) = & self . version {
171
169
write ! ( f, " {version}" ) ?;
172
170
}
@@ -407,11 +405,12 @@ mod tests {
407
405
use rattler_digest:: { parse_digest_from_hex, Md5 , Sha256 } ;
408
406
409
407
use crate :: { MatchSpec , NamelessMatchSpec , PackageName , PackageRecord , Version } ;
408
+ use insta:: assert_snapshot;
410
409
use std:: hash:: { Hash , Hasher } ;
411
410
412
411
#[ test]
413
412
fn test_matchspec_format_eq ( ) {
414
- let spec = MatchSpec :: from_str ( "mamba[version==1.0, sha256=aaac4bc9c6916ecc0e33137431645b029ade22190c7144eead61446dcbcc6f97, md5=dede6252c964db3f3e41c7d30d07f6bf]" ) . unwrap ( ) ;
413
+ let spec = MatchSpec :: from_str ( "conda-forge:: mamba[version==1.0, sha256=aaac4bc9c6916ecc0e33137431645b029ade22190c7144eead61446dcbcc6f97, md5=dede6252c964db3f3e41c7d30d07f6bf]" ) . unwrap ( ) ;
415
414
let spec_as_string = spec. to_string ( ) ;
416
415
let rebuild_spec = MatchSpec :: from_str ( & spec_as_string) . unwrap ( ) ;
417
416
@@ -495,4 +494,21 @@ mod tests {
495
494
let spec = MatchSpec :: from_str ( "mamba[version==1.0, md5=dede6252c964db3f3e41c7d30d07f6bf, sha256=aaac4bc9c6916ecc0e33137431645b029ade22190c7144eead61446dcbcc6f97]" ) . unwrap ( ) ;
496
495
assert ! ( !spec. matches( & record) ) ;
497
496
}
497
+
498
+ #[ test]
499
+ fn test_serialize_matchspec ( ) {
500
+ let specs = [ "mamba 1.0 py37_0" ,
501
+ "conda-forge::pytest[version=1.0, sha256=aaac4bc9c6916ecc0e33137431645b029ade22190c7144eead61446dcbcc6f97, md5=dede6252c964db3f3e41c7d30d07f6bf]" ,
502
+ "conda-forge/linux-64::pytest" ,
503
+ "conda-forge/linux-64::pytest[version=1.0]" ,
504
+ "conda-forge/linux-64::pytest[version=1.0, build=py37_0]" ,
505
+ "conda-forge/linux-64::pytest 1.2.3" ] ;
506
+
507
+ assert_snapshot ! ( specs
508
+ . into_iter( )
509
+ . map( |s| MatchSpec :: from_str( s) . unwrap( ) )
510
+ . map( |s| s. to_string( ) )
511
+ . collect:: <Vec <String >>( )
512
+ . join( "\n " ) ) ;
513
+ }
498
514
}
0 commit comments