internal static void Prepare()

in code/tools/WtsPackagingTool/PackageWorker.cs [56:117]


        internal static void Prepare(string prepareDir, IEnumerable<string> exclusions, string version, string platform, string language, bool verbose, TextWriter output, TextWriter error)
        {
            output.WriteCommandHeader($"Preparing directory {prepareDir} for version {version}");

            Version.TryParse(version, out Version v);
            if (v != null)
            {
                DirectoryInfo prepareDirInfo = new DirectoryInfo(prepareDir);

                if (prepareDirInfo.Exists)
                {
                    List<Regex> exclusionFilters = GetExclusionFilters(exclusions, output);

                    List<string> excludedDirs = new List<string>();
                    List<DirectoryInfo> includedDirs = new List<DirectoryInfo>();

                    List<DirectoryInfo> allDirs = new List<DirectoryInfo>();

                    if (!string.IsNullOrEmpty(platform) && !string.IsNullOrEmpty(language))
                    {
                        ApplyLanguageAndPlatformFilters(allDirs, prepareDirInfo, platform, language);
                    }
                    else
                    {
                        output.WriteCommandText("WARN: No platform and language filters applied");

                        allDirs = prepareDirInfo.EnumerateDirectories(".template.config", SearchOption.AllDirectories).ToList();
                    }

                    ApplyFilters(exclusionFilters, excludedDirs, includedDirs, allDirs);

                    if (excludedDirs.Count == 0 && exclusionFilters.Count > 0)
                    {
                        output.WriteCommandText("WARN: Preparation did not work. The exclusions do not filter any directory, please review the regular expresions.");
                        return;
                    }

                    if (exclusionFilters.Count > 0 && (excludedDirs.Count + includedDirs.Count != allDirs.Count))
                    {
                        output.WriteCommandText($"WARN: Preparation did not work. The excluded dirs ({excludedDirs.Count}) plus the included dirs ({includedDirs.Count}) do not match the original dir count {allDirs.Count}");
                        return;
                    }

                    ShowDirectoriesInfo(verbose, output, exclusionFilters, excludedDirs, includedDirs);

                    var resultDir = PrepareResultDir(prepareDir, version, output);

                    List<DirectoryInfo> toCopy = exclusionFilters.Count > 0 ? includedDirs : allDirs;
                    toCopy.Add(new DirectoryInfo(Path.Combine(prepareDir, platform, "_catalog")));

                    MakeCopy(toCopy, prepareDir, platform, resultDir, version, output);
                }
                else
                {
                    error.WriteCommandText($"WARN: The directory '{prepareDir}' does not exists");
                }
            }
            else
            {
                error.WriteCommandText($"WAR: {version} is not a valid version number");
            }
        }