public UriBasedPatternResolutionContext(IEnvironmentVariableContext environmentVariableContext, Uri uri)
{
Contract.Requires(environmentVariableContext != null);
Contract.Requires(uri != null);
this.environmentVariableContext = environmentVariableContext;
string host = uri.Host;
string path = uri.AbsolutePath.TrimStart('/');
string[] pathParts = path.Split('/');
if (pathParts.Length == 1)
{
repositoryName = null;
dependencyName = host;
fileName = Path.GetFileNameWithoutExtension(pathParts[0]);
extension = Path.GetExtension(pathParts[0]).With(ex => ex.TrimStart('.'));
version = null;
}
else if (pathParts.Length == 2)
{
repositoryName = null;
dependencyName = host;
fileName = Path.GetFileNameWithoutExtension(pathParts[1]);
extension = Path.GetExtension(pathParts[1]).With(ex => ex.TrimStart('.'));
version = pathParts[0];
}
else if (pathParts.Length == 3)
{
repositoryName = host;
dependencyName = pathParts[0];
fileName = Path.GetFileNameWithoutExtension(pathParts[2]);
extension = Path.GetExtension(pathParts[2]).With(ex => ex.TrimStart('.'));
version = pathParts[1];
}
else
{
throw new InvalidReferenceException("Invalid FS repository dependency URI: " + uri);
}
}