Ejemplo n.º 1
0
        public async Task <RegiConfig> GetConfigurationAsync(CommandOptions options)
        {
            DirectoryInfo directory;

            if (!string.IsNullOrWhiteSpace(options?.ConfigurationPath))
            {
                string configDirectory = _fileSystem.GetDirectoryPath(options.ConfigurationPath, true, "directory");
                _fileSystem.WorkingDirectory = configDirectory;
                directory = new DirectoryInfo(configDirectory);
            }
            else
            {
                directory = new DirectoryInfo(_fileSystem.WorkingDirectory);
            }

            if (directory?.Exists == false)
            {
                throw new DirectoryNotFoundException($"Could not find directory: {directory.FullName}");
            }

            FileInfo startupFile = directory.GetOneOfFiles("regi.json", "startup.json");

            if (startupFile == null || !startupFile.Exists)
            {
                throw new RegiException($"Could not find regi.json or startup.json in directory: {directory.FullName}");
            }

            using var stream = startupFile.OpenRead();

            try
            {
                RegiConfig config = await JsonSerializer.DeserializeAsync <RegiConfig>(stream, Constants.DefaultSerializerOptions);

                config.Path = startupFile.FullName;

                return(config);
            }
            catch (Exception e)
            {
                string relativePath = Path.GetRelativePath(_fileSystem.WorkingDirectory, startupFile.FullName);

                throw new RegiException($"Configuration file was not properly formatted: {relativePath}{Environment.NewLine}{ExceptionUtility.GetMessage(e)}", e);
            }
        }
Ejemplo n.º 2
0
        public async ValueTask <FileInfo> CreateConfigFileAsync(RegiConfig config)
        {
            string configFilePath = Path.Combine(WorkingDirectory, "regi.json");

            if (File.Exists(configFilePath))
            {
                throw new RegiException($"There is already a {nameof(Regi)} configuration file at path: {configFilePath}");
            }

            _console.WriteEmphasizedLine($"Creating config file: {configFilePath}");

            FileInfo configFile = new FileInfo(configFilePath);

            using var fileStream = configFile.Create();
            await JsonSerializer.SerializeAsync(fileStream, config, Constants.DefaultSerializerOptions);

            _console.WriteEmphasizedLine($"Job's done.");

            return(configFile);
        }
Ejemplo n.º 3
0
        public static void LinkProjectRequirements(IEnumerable<Project> projects, CommandOptions options, RegiConfig config)
        {
            foreach (var project in projects)
            {
                project.TryAddSource(options, config);

                foreach (var r in project.Requires)
                {
                    var requiredProject = config.Projects.FirstOrDefault(p => p.Name.Contains(r, StringComparison.InvariantCultureIgnoreCase));

                    if (requiredProject == null)
                        requiredProject = config.Services.FirstOrDefault(p => p.Name.Contains(r, StringComparison.InvariantCultureIgnoreCase));

                    if (requiredProject == null)
                        throw new Exception($"Could not find requirement \"{r}\" defined in project {project.Name}");

                    requiredProject.TryAddSource(options, config);

                    project.RequiredProjects.Add(requiredProject);
                }
            }
        }