public string MatchesConstraints(IEnumerable<string> packageVersions, string versionConstraint,
string branch = null) {
var doVersion = !string.IsNullOrWhiteSpace(versionConstraint);
var doBranch = !string.IsNullOrWhiteSpace(branch) && (branch != SpecificVersionInfo.StableBranch);
packageVersions = packageVersions.OrderBy(x => new SpecificVersionInfo(x));
if (doBranch) {
return doVersion
? packageVersions.LastOrDefault(
x =>
x.EndsWith("-" + branch) &&
MatchesVersionConstraint(x.Split('-').First(), versionConstraint))
: packageVersions.LastOrDefault(x => x.EndsWith("-" + branch));
}
return doVersion
? packageVersions.LastOrDefault(x => MatchesVersionConstraint(x.Split('-').First(), versionConstraint))
: null;
}