File tree Expand file tree Collapse file tree 3 files changed +30
-4
lines changed Expand file tree Collapse file tree 3 files changed +30
-4
lines changed Original file line number Diff line number Diff line change @@ -56,4 +56,25 @@ Describe 'Tests for resource versioning' {
56
56
$LASTEXITCODE | Should - Be 0 - Because (Get-Content $TestDrive / error.log - Raw)
57
57
$out.results [0 ].result.actualState.version | Should - BeExactly $expected
58
58
}
59
+
60
+ It ' Multiple versions should be handled correctly' {
61
+ $config_yaml = @"
62
+ `$ schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
63
+ resources:
64
+ - name: Test Version 1
65
+ type: Test/Version
66
+ apiVersion: '1.1.2'
67
+ - name: Test Version 2
68
+ type: Test/Version
69
+ apiVersion: '1.1.0'
70
+ - name: Test Version 3
71
+ type: Test/Version
72
+ apiVersion: '2'
73
+ "@
74
+ $out = dsc - l trace config get - i $config_yaml 2> $TestDrive / error.log | ConvertFrom-Json
75
+ $LASTEXITCODE | Should - Be 0 - Because (Get-Content $TestDrive / error.log - Raw)
76
+ $out.results [0 ].result.actualState.version | Should - BeExactly ' 1.1.2'
77
+ $out.results [1 ].result.actualState.version | Should - BeExactly ' 1.1.0'
78
+ $out.results [2 ].result.actualState.version | Should - BeExactly ' 2.0.0'
79
+ }
59
80
}
Original file line number Diff line number Diff line change 3
3
4
4
use crate :: { dscerror:: DscError , extensions:: dscextension:: DscExtension , dscresources:: dscresource:: DscResource } ;
5
5
use std:: collections:: BTreeMap ;
6
-
7
6
use super :: command_discovery:: ImportedManifest ;
8
7
9
8
#[ derive( Debug , PartialEq ) ]
Original file line number Diff line number Diff line change @@ -12,7 +12,6 @@ use semver::{Version, VersionReq};
12
12
use std:: collections:: BTreeMap ;
13
13
use command_discovery:: { CommandDiscovery , ImportedManifest } ;
14
14
use tracing:: error;
15
- use tracing:: debug;
16
15
17
16
#[ derive( Clone ) ]
18
17
pub struct Discovery {
@@ -96,8 +95,15 @@ impl Discovery {
96
95
97
96
let type_name = type_name. to_lowercase ( ) ;
98
97
if let Some ( resources) = self . resources . get ( & type_name) {
99
- if let Some ( version_string) = version_string {
100
- if let Ok ( version_req) = VersionReq :: parse ( version_string) {
98
+ if let Some ( version) = version_string {
99
+ // The semver crate uses caret (meaning compatible) by default instead of exact if not specified
100
+ // If the first character is a number, then we prefix with =
101
+ let version = if version. chars ( ) . next ( ) . map_or ( false , |c| c. is_ascii_digit ( ) ) {
102
+ format ! ( "={version}" )
103
+ } else {
104
+ version. to_string ( )
105
+ } ;
106
+ if let Ok ( version_req) = VersionReq :: parse ( & version) {
101
107
for resource in resources {
102
108
if let Ok ( resource_version) = Version :: parse ( & resource. version ) {
103
109
if version_req. matches ( & resource_version) {
You can’t perform that action at this time.
0 commit comments