private async Task <int> HandleAndReturnExitCodeAsync(CreateOptions options) { if (options.UnitTest) { options.ProjectType += "UnitTest"; } if (!(await _projectGeneratorFactory.SupportsProjectType(options.ProjectType))) { _logger.Warn("Project type {ProjectType} not supported.", options.ProjectType); return(-1); } _projectDirectoryProvider.SolutionDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, options.Name); _logger.Info($"Generating solution directory \"{options.Name}\"."); _directoryManipulator.CreateDirectory(_projectDirectoryProvider.SolutionDirectory); IProjectGenerator projectGenerator = _projectGeneratorFactory.CreateGeneratorFor(options.ProjectType); try { await projectGenerator.GenerateProject(options.Name); if (options.InitGit) { projectGenerator.InitGit(); if (options.UseGitMetadata) { await projectGenerator.AddGitMetadata(); } if (options.ReadmeDescription != null) { projectGenerator.AddReadme(options.Name, options.ReadmeDescription); } if (options.CommitMessage != null) { projectGenerator.Commit(options.CommitMessage); } if (options.GitRemote != null) { projectGenerator.AddRemote(options.GitRemote); if (options.Push) { projectGenerator.Push(); } } } } catch (Exception) { _logger.Error("An error ocurred during project generation."); } return(0); }
internal AppDataStore(IAppNameProvider appNameProvider, IDirectoryManipulator directoryManipulator, IFileManipulator fileManipulator) { _appPath = Path.Combine(directoryManipulator.AppDataPath, appNameProvider.AppName); _fileManipulator = fileManipulator; directoryManipulator.CreateDirectory(_appPath); }
public async Task GenerateProject(string projectName) { _logger.Info("Generating Visual Studio project using template for {ProjectType} project type.", _projectType); FileTreeTemplate fileTreeTemplate = await _solutionTemplateProvider.TemplateFor(_projectType); foreach (FileTreeEntry fileTreeEntry in fileTreeTemplate.Entries) { RenderedFileTreeEntry renderedEntry = await _solutionTemplateProvider.RenderFileTreeEntry(_projectType, projectName, fileTreeEntry); string path = _directoryManipulator.PathNameRelativeToDirectory(_solutionDirectory, renderedEntry.RelativePath); if (renderedEntry.IsDirectory) { LogDirectory(renderedEntry.RelativePath); _directoryManipulator.CreateDirectory(path); } else { LogFile(renderedEntry.RelativePath); _fileManipulator.CreateFile(path, renderedEntry.Contents); } } }