예제 #1
0
        /// <summary>
        /// TODO: refactor
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
        private static BuildJsonConfig ParseOptions(BuildCommandOptions options)
        {
            var             configFile = GetConfigFilePath(options);
            BuildJsonConfig config;

            if (configFile == null)
            {
                if (options.Content == null && options.Resource == null)
                {
                    throw new OptionParserException("Either provide config file or specify content files to start building documentation.");
                }

                config = new BuildJsonConfig();
                MergeOptionsToConfig(options, config);
                return(config);
            }

            config = CommandUtility.GetConfig <BuildConfig>(configFile).Item;
            if (config == null)
            {
                throw new DocumentException($"Unable to find build subcommand config in file '{configFile}'.");
            }
            config.BaseDirectory = Path.GetDirectoryName(configFile);

            MergeOptionsToConfig(options, config);
            return(config);
        }
예제 #2
0
        public BuildCommand(BuildCommandOptions options)
        {
            var assembly = typeof(Program).Assembly;

            _version = assembly.GetName().Version.ToString();
            Config   = ParseOptions(options);
            SetDefaultConfigValue(Config);
            _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory);
        }
예제 #3
0
        public BuildCommand(BuildCommandOptions options)
        {
            var assembly = typeof(Program).Assembly;

            _version = assembly.GetName().Version.ToString();
            Config   = ParseOptions(options);
            SetDefaultConfigValue(Config);
            EnvironmentContext.BaseDirectory = Path.GetFullPath(string.IsNullOrEmpty(Config.BaseDirectory) ? Directory.GetCurrentDirectory() : Config.BaseDirectory);
            _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory);
        }
예제 #4
0
        public BuildCommand(BuildCommandOptions options)
        {
            Config = ParseOptions(options);
            if (Config.Templates == null || Config.Templates.Count == 0)
            {
                Config.Templates = new ListWithStringFallback {
                    DocAsCode.Constants.DefaultTemplateName
                };
            }

            var assembly = typeof(Program).Assembly;

            _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory);
        }
예제 #5
0
        internal static string GetConfigFilePath(BuildCommandOptions options)
        {
            var configFile = options.ConfigFile;

            if (string.IsNullOrEmpty(configFile))
            {
                if (!File.Exists(Constants.ConfigFileName))
                {
                    return(null);
                }
                else
                {
                    Logger.Log(LogLevel.Verbose, $"Config file {Constants.ConfigFileName} is found.");
                    return(Constants.ConfigFileName);
                }
            }

            return(configFile);
        }
예제 #6
0
        private static BuildJsonConfig ParseOptions(BuildCommandOptions options)
        {
            var             configFile = options.ConfigFile;
            BuildJsonConfig config;

            if (string.IsNullOrEmpty(configFile))
            {
                if (!File.Exists(DocAsCode.Constants.ConfigFileName))
                {
                    if (options.Content == null && options.Resource == null)
                    {
                        throw new ArgumentException("Either provide config file or specify content files to start building documentation.");
                    }
                    else
                    {
                        config = new BuildJsonConfig();
                        MergeOptionsToConfig(options, config);
                        return(config);
                    }
                }
                else
                {
                    Logger.Log(LogLevel.Verbose, $"Config file {DocAsCode.Constants.ConfigFileName} is found.");
                    configFile = DocAsCode.Constants.ConfigFileName;
                }
            }

            config = CommandUtility.GetConfig <BuildConfig>(configFile).Item;
            if (config == null)
            {
                throw new DocumentException($"Unable to find build subcommand config in file '{configFile}'.");
            }
            config.BaseDirectory = Path.GetDirectoryName(configFile);

            MergeOptionsToConfig(options, config);
            MergeNewFileRepositoryToConfig(config);
            return(config);
        }
예제 #7
0
        private static void MergeOptionsToConfig(BuildCommandOptions options, BuildJsonConfig config)
        {
            // base directory for content from command line is current directory
            // e.g. C:\folder1>docfx build folder2\docfx.json --content "*.cs"
            // for `--content "*.cs*`, base directory should be `C:\folder1`
            string optionsBaseDirectory = Environment.CurrentDirectory;

            config.OutputFolder = options.OutputFolder;

            // Override config file with options from command line
            if (options.Templates != null && options.Templates.Count > 0)
            {
                config.Templates = new ListWithStringFallback(options.Templates);
            }

            if (options.Themes != null && options.Themes.Count > 0)
            {
                config.Themes = new ListWithStringFallback(options.Themes);
            }
            if (!string.IsNullOrEmpty(options.OutputFolder))
            {
                config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty));
            }
            if (options.Content != null)
            {
                if (config.Content == null)
                {
                    config.Content = new FileMapping(new FileMappingItem());
                }
                config.Content.Add(new FileMappingItem()
                {
                    Files = new FileItems(options.Content), SourceFolder = optionsBaseDirectory
                });
            }
            if (options.Resource != null)
            {
                if (config.Resource == null)
                {
                    config.Resource = new FileMapping(new FileMappingItem());
                }
                config.Resource.Add(new FileMappingItem()
                {
                    Files = new FileItems(options.Resource), SourceFolder = optionsBaseDirectory
                });
            }
            if (options.Overwrite != null)
            {
                if (config.Overwrite == null)
                {
                    config.Overwrite = new FileMapping(new FileMappingItem());
                }
                config.Overwrite.Add(new FileMappingItem()
                {
                    Files = new FileItems(options.Overwrite), SourceFolder = optionsBaseDirectory
                });
            }
            if (options.ExternalReference != null)
            {
                if (config.ExternalReference == null)
                {
                    config.ExternalReference = new FileMapping(new FileMappingItem());
                }
                config.ExternalReference.Add(new FileMappingItem()
                {
                    Files = new FileItems(options.ExternalReference), SourceFolder = optionsBaseDirectory
                });
            }

            if (options.Serve)
            {
                config.Serve = options.Serve;
            }
            if (options.Port.HasValue)
            {
                config.Port = options.Port.Value.ToString();
            }
            config.Force           |= options.ForceRebuild;
            config.ExportRawModel  |= options.ExportRawModel;
            config.ExportViewModel |= options.ExportViewModel;
            if (!string.IsNullOrEmpty(options.RawModelOutputFolder))
            {
                config.RawModelOutputFolder = Path.GetFullPath(options.RawModelOutputFolder);
            }
            if (!string.IsNullOrEmpty(options.ViewModelOutputFolder))
            {
                config.ViewModelOutputFolder = Path.GetFullPath(options.ViewModelOutputFolder);
            }
            config.DryRun |= options.DryRun;

            config.FileMetadata   = GetFileMetadataFromOption(options.FileMetadataFilePath, config.FileMetadata);
            config.GlobalMetadata = GetGlobalMetadataFromOption(options.GlobalMetadata, options.GlobalMetadataFilePath, config.GlobalMetadata);
        }
예제 #8
0
        private static void MergeOptionsToConfig(BuildCommandOptions options, BuildJsonConfig config)
        {
            // base directory for content from command line is current directory
            // e.g. C:\folder1>docfx build folder2\docfx.json --content "*.cs"
            // for `--content "*.cs*`, base directory should be `C:\folder1`
            string optionsBaseDirectory = Directory.GetCurrentDirectory();

            config.OutputFolder = options.OutputFolder;

            // Override config file with options from command line
            if (options.Templates != null && options.Templates.Count > 0)
            {
                config.Templates = new ListWithStringFallback(options.Templates);
            }

            if (options.PostProcessors != null && options.PostProcessors.Count > 0)
            {
                config.PostProcessors = new ListWithStringFallback(options.PostProcessors);
            }

            if (options.Themes != null && options.Themes.Count > 0)
            {
                config.Themes = new ListWithStringFallback(options.Themes);
            }
            if (!string.IsNullOrEmpty(options.OutputFolder))
            {
                config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty));
            }
            if (options.Content != null)
            {
                if (config.Content == null)
                {
                    config.Content = new FileMapping(new FileMappingItem());
                }
                config.Content.Add(
                    new FileMappingItem
                {
                    Files        = new FileItems(options.Content),
                    SourceFolder = optionsBaseDirectory,
                });
            }
            if (options.Resource != null)
            {
                if (config.Resource == null)
                {
                    config.Resource = new FileMapping(new FileMappingItem());
                }
                config.Resource.Add(
                    new FileMappingItem
                {
                    Files        = new FileItems(options.Resource),
                    SourceFolder = optionsBaseDirectory,
                });
            }
            if (options.Overwrite != null)
            {
                if (config.Overwrite == null)
                {
                    config.Overwrite = new FileMapping(new FileMappingItem());
                }
                config.Overwrite.Add(
                    new FileMappingItem
                {
                    Files        = new FileItems(options.Overwrite),
                    SourceFolder = optionsBaseDirectory,
                });
            }
            if (options.ExternalReference != null)
            {
                if (config.ExternalReference == null)
                {
                    config.ExternalReference = new FileMapping(new FileMappingItem());
                }
                config.ExternalReference.Add(
                    new FileMappingItem
                {
                    Files        = new FileItems(options.ExternalReference),
                    SourceFolder = optionsBaseDirectory,
                });
            }

            if (options.XRefMaps != null)
            {
                config.XRefMaps =
                    new ListWithStringFallback(
                        (config.XRefMaps ?? new ListWithStringFallback())
                        .Concat(options.XRefMaps)
                        .Where(x => !string.IsNullOrWhiteSpace(x))
                        .Distinct());
            }

            //to-do: get changelist from options

            if (options.Serve)
            {
                config.Serve = options.Serve;
            }
            if (options.Port.HasValue)
            {
                config.Port = options.Port.Value.ToString();
            }
            config.Force           |= options.ForceRebuild;
            config.ExportRawModel  |= options.ExportRawModel;
            config.ExportViewModel |= options.ExportViewModel;
            if (!string.IsNullOrEmpty(options.RawModelOutputFolder))
            {
                config.RawModelOutputFolder = Path.GetFullPath(options.RawModelOutputFolder);
            }
            if (!string.IsNullOrEmpty(options.ViewModelOutputFolder))
            {
                config.ViewModelOutputFolder = Path.GetFullPath(options.ViewModelOutputFolder);
            }
            config.DryRun |= options.DryRun;
            if (options.MaxParallelism != null)
            {
                config.MaxParallelism = options.MaxParallelism;
            }
            if (options.MarkdownEngineName != null)
            {
                config.MarkdownEngineName = options.MarkdownEngineName;
            }
            if (options.MarkdownEngineProperties != null)
            {
                config.MarkdownEngineProperties =
                    JsonConvert.DeserializeObject <Dictionary <string, object> >(
                        options.MarkdownEngineProperties,
                        new JsonSerializerSettings
                {
                    Converters =
                    {
                        new JObjectDictionaryToObjectDictionaryConverter()
                    }
                });
            }
            if (options.NoLangKeyword != null)
            {
                config.NoLangKeyword = options.NoLangKeyword.Value;
            }
            if (options.IntermediateFolder != null)
            {
                config.IntermediateFolder = options.IntermediateFolder;
            }
            if (options.ChangesFile != null)
            {
                config.ChangesFile = options.ChangesFile;
            }
            if (options.GlobalMetadataFilePaths != null && options.GlobalMetadataFilePaths.Any())
            {
                config.GlobalMetadataFilePaths.AddRange(options.GlobalMetadataFilePaths);
            }

            config.GlobalMetadataFilePaths =
                new ListWithStringFallback(config.GlobalMetadataFilePaths.Select(
                                               path => PathUtility.IsRelativePath(path) ? Path.Combine(config.BaseDirectory, path) : path).Reverse());

            if (options.FileMetadataFilePaths != null && options.FileMetadataFilePaths.Any())
            {
                config.FileMetadataFilePaths.AddRange(options.FileMetadataFilePaths);
            }

            config.FileMetadataFilePaths =
                new ListWithStringFallback(config.FileMetadataFilePaths.Select(
                                               path => PathUtility.IsRelativePath(path) ? Path.Combine(config.BaseDirectory, path) : path).Reverse());

            config.FileMetadata   = GetFileMetadataFromOption(config.FileMetadata, options.FileMetadataFilePath, config.FileMetadataFilePaths);
            config.GlobalMetadata = GetGlobalMetadataFromOption(config.GlobalMetadata, options.GlobalMetadataFilePath, config.GlobalMetadataFilePaths, options.GlobalMetadata);
        }
예제 #9
0
 public BuildCommand(BuildCommandOptions options) : this(ParseOptions(options))
 {
 }