14 using System.Globalization;
17 using SiliconStudio.Core;
19 namespace SiliconStudio.Assets
37 [DataContract(
"PackageVersionDependency")]
53 IsMinInclusive =
true;
54 IsMaxInclusive =
true;
66 IsMinInclusive = minVersionInclusive;
67 MinVersion = minVersion;
82 public bool IsMinInclusive {
get; set; }
96 public bool IsMaxInclusive {
get; set; }
105 IsMinInclusive =
true,
106 MinVersion = version,
122 throw new ArgumentNullException(
"value");
126 value = value.Trim();
135 MinVersion = version,
136 IsMinInclusive =
true
147 if (value.Length < 3)
153 switch (value.First())
156 versionSpec.IsMinInclusive =
true;
159 versionSpec.IsMinInclusive =
false;
166 switch (value.Last())
169 versionSpec.IsMaxInclusive =
true;
172 versionSpec.IsMaxInclusive =
false;
179 value = value.Substring(1, value.Length - 2);
182 string[] parts = value.Split(
',');
183 if (parts.Length > 2)
187 if (parts.All(
string.IsNullOrEmpty))
194 string minVersionString = parts[0];
195 string maxVersionString = (parts.Length == 2) ? parts[1] : parts[0];
198 if (!
string.IsNullOrWhiteSpace(minVersionString))
204 versionSpec.MinVersion = version;
208 if (!
string.IsNullOrWhiteSpace(maxVersionString))
214 versionSpec.MaxVersion = version;
218 result = versionSpec;
228 if (MinVersion != null && IsMinInclusive && MaxVersion == null && !IsMaxInclusive)
230 return string.Format(CultureInfo.InvariantCulture,
"(>= {0})", MinVersion);
233 if (MinVersion != null && MaxVersion != null && MinVersion == MaxVersion && IsMinInclusive && IsMaxInclusive)
235 return string.Format(CultureInfo.InvariantCulture,
"(= {0})", MinVersion);
238 var versionBuilder =
new StringBuilder();
239 if (MinVersion != null)
243 versionBuilder.AppendFormat(
"(>= ");
247 versionBuilder.Append(
"(> ");
249 versionBuilder.Append(MinVersion);
252 if (MaxVersion != null)
254 versionBuilder.Append(versionBuilder.Length == 0 ?
"(" :
" && ");
258 versionBuilder.AppendFormat(
"<= ");
262 versionBuilder.Append(
"< ");
264 versionBuilder.Append(MaxVersion);
267 if (versionBuilder.Length > 0)
269 versionBuilder.Append(
")");
272 return versionBuilder.ToString();
278 if (MinVersion != null && IsMinInclusive && MaxVersion == null && !IsMaxInclusive)
280 return MinVersion.ToString();
283 if (MinVersion != null && MaxVersion != null && MinVersion == MaxVersion && IsMinInclusive && IsMaxInclusive)
285 return "[" + MinVersion +
"]";
288 var versionBuilder =
new StringBuilder();
289 versionBuilder.Append(IsMinInclusive ?
'[' :
'(');
290 versionBuilder.AppendFormat(CultureInfo.InvariantCulture,
"{0}, {1}", MinVersion, MaxVersion);
291 versionBuilder.Append(IsMaxInclusive ?
']' :
')');
293 return versionBuilder.ToString();
303 return new PackageVersionRange()
305 MinVersion = PackageVersion.FromSemanticVersion(spec.MinVersion),
307 MaxVersion = PackageVersion.FromSemanticVersion(spec.MaxVersion),
308 IsMaxInclusive = spec.IsMaxInclusive
string ToPrettyPrint()
Display a pretty version of the dependency.
bool IsMinInclusive
Gets or sets a value indicating whether the min version is inclusive.
static bool TryParse(string value, out PackageVersionRange result)
Tries to parse a version dependency.
PackageVersionRange()
Initializes a new instance of the PackageVersionRange class.
static bool TryParse(string version, out PackageVersion value)
Parses a version string using loose semantic versioning rules that allows 2-4 version components foll...
Version Version
Gets the normalized version portion.
override string ToString()
PackageVersionRange(PackageVersion version)
Initializes a new instance of the PackageVersionRange class.
PackageVersionRange(PackageVersion minVersion, bool minVersionInclusive)
Initializes a new instance of the PackageVersionRange class.
A hybrid implementation of SemVer that supports semantic versioning as described at http://semver...
static PackageVersionRange GetSafeRange(PackageVersion version)
The safe range is defined as the highest build and revision for a given major and minor version ...
A dependency to a range of version.