public ISiteBuilder CreateBuilder(ITracer tracer, ILogger logger) { string repositoryRoot = _environment.RepositoryPath; var configuration = new DeploymentConfiguration(repositoryRoot); // If there's a custom deployment file then let that take over. if (!String.IsNullOrEmpty(configuration.Command)) { return(new CustomBuilder(repositoryRoot, _environment.TempPath, configuration.Command, _propertyProvider, _environment.SiteRootPath)); } // If the repository has an explicit pointer to a project path to be deployed // then use it. string targetProjectPath = configuration.ProjectPath; if (!String.IsNullOrEmpty(targetProjectPath)) { tracer.Trace("Found .deployment file in repository"); // Try to resolve the project return(ResolveProject(repositoryRoot, targetProjectPath, tryWebSiteProject: true, searchOption: SearchOption.TopDirectoryOnly)); } // Get all solutions in the current repository path var solutions = VsHelper.GetSolutions(repositoryRoot).ToList(); if (!solutions.Any()) { return(ResolveProject(repositoryRoot, searchOption: SearchOption.AllDirectories)); } // More than one solution is ambiguous if (solutions.Count > 1) { // TODO: Show relative paths in error messages ThrowAmbiguousSolutionsError(solutions); } // We have a solution VsSolution solution = solutions[0]; // We need to determine what project to deploy so get a list of all web projects and // figure out with some heuristic, which one to deploy. // TODO: Pick only 1 and throw if there's more than one VsSolutionProject project = solution.Projects.Where(p => p.IsWap || p.IsWebSite).FirstOrDefault(); if (project == null) { logger.Log(Resources.Log_NoDeployableProjects, solution.Path); return(new BasicBuilder(repositoryRoot, _environment.TempPath, _environment.ScriptPath, _environment.SiteRootPath)); } if (project.IsWap) { return(new WapBuilder(_settings, _propertyProvider, repositoryRoot, project.AbsolutePath, _environment.TempPath, _environment.NuGetCachePath, solution.Path)); } return(new WebSiteBuilder(_propertyProvider, repositoryRoot, project.AbsolutePath, _environment.TempPath, _environment.NuGetCachePath, solution.Path)); }
public ISiteBuilder CreateBuilder(ITracer tracer, ILogger logger) { string repositoryRoot = _environment.RepositoryPath; var configuration = new DeploymentConfiguration(repositoryRoot); // If there's a custom deployment file then let that take over. if (!String.IsNullOrEmpty(configuration.Command)) { return new CustomBuilder(repositoryRoot, _environment.TempPath, configuration.Command, _propertyProvider); } // If the repository has an explicit pointer to a project path to be deployed // then use it. string targetProjectPath = configuration.ProjectPath; if (!String.IsNullOrEmpty(targetProjectPath)) { tracer.Trace("Found .deployment file in repository"); // Try to resolve the project return ResolveProject(repositoryRoot, targetProjectPath, tryWebSiteProject: true, searchOption: SearchOption.TopDirectoryOnly); } // Get all solutions in the current repository path var solutions = VsHelper.GetSolutions(repositoryRoot).ToList(); if (!solutions.Any()) { return ResolveProject(repositoryRoot, searchOption: SearchOption.AllDirectories); } // More than one solution is ambiguous if (solutions.Count > 1) { // TODO: Show relative paths in error messages ThrowAmbiguousSolutionsError(solutions); } // We have a solution VsSolution solution = solutions[0]; // We need to determine what project to deploy so get a list of all web projects and // figure out with some heuristic, which one to deploy. // TODO: Pick only 1 and throw if there's more than one VsSolutionProject project = solution.Projects.Where(p => p.IsWap || p.IsWebSite).FirstOrDefault(); if (project == null) { logger.Log(Resources.Log_NoDeployableProjects, solution.Path); return new BasicBuilder(repositoryRoot, _environment.TempPath, _environment.ScriptPath); } if (project.IsWap) { return new WapBuilder(_settings, _propertyProvider, repositoryRoot, project.AbsolutePath, _environment.TempPath, _environment.NuGetCachePath, solution.Path); } return new WebSiteBuilder(_propertyProvider, repositoryRoot, project.AbsolutePath, _environment.TempPath, _environment.NuGetCachePath, solution.Path); }
public ISiteBuilder CreateBuilder(ILogger logger) { string repositoryRoot = _environment.DeploymentRepositoryPath; var configuration = new DeploymentConfiguration(repositoryRoot); // If the repository has an explicit pointer to a project path to be deployed // then use it. string targetProjectPath = configuration.ProjectPath; if (!String.IsNullOrEmpty(targetProjectPath)) { // Try to resolve the project return ResolveProject(repositoryRoot, targetProjectPath, tryWebSiteProject: true, searchOption: SearchOption.TopDirectoryOnly); } // Get all solutions in the current repository path var solutions = VsHelper.GetSolutions(repositoryRoot).ToList(); if (!solutions.Any()) { return ResolveProject(repositoryRoot, searchOption: SearchOption.AllDirectories); } // More than one solution is ambiguous if (solutions.Count > 1) { throw new InvalidOperationException("Unable to determine which solution file to build."); } // We have a solution VsSolution solution = solutions[0]; // We need to determine what project to deploy so get a list of all web projects and // figure out with some heuristic, which one to deploy. // For now just pick the first one we find. VsSolutionProject project = solution.Projects.Where(p => p.IsWap || p.IsWebSite).FirstOrDefault(); if (project == null) { logger.Log("Found solution {0} with no deployable projects. Deploying files instead.", solution.Path); return new BasicBuilder(repositoryRoot, _environment.TempPath); } if (project.IsWap) { return new WapBuilder(_propertyProvider, repositoryRoot, project.AbsolutePath, _environment.TempPath, solution.Path); } return new WebSiteBuilder(_propertyProvider, repositoryRoot, solution.Path, project.AbsolutePath); }