From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001
From: giy <giy@omp-system.ru>
Date: Fri, 02 Sep 2022 14:16:56 +0300
Subject: [PATCH] Обновление до версии 2.9.0

---
 Tests/BigSolution/generator/Program.cs |  115 +++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 74 insertions(+), 41 deletions(-)

diff --git a/Tests/BigSolution/generator/Program.cs b/Tests/BigSolution/generator/Program.cs
index 6100ac6..5624762 100644
--- a/Tests/BigSolution/generator/Program.cs
+++ b/Tests/BigSolution/generator/Program.cs
@@ -38,51 +38,27 @@
 {
     internal class Program
     {
-        static void Main(string[] args)
+        static void GenerateProject(
+            StringBuilder genSolutionProjectRef,
+            StringBuilder genSolutionProjectConfigs,
+            string pathToTemplateDir,
+            string pathToGeneratedDir,
+            int projectCount,
+            string projectGuid,
+            string projectName,
+            string projectRef,
+            IEnumerable<string> projectConfigsList)
         {
-            var projectCount = args.Length > 0 ? Convert.ToInt32(args[0]) : 400;
-            var pathToTemplateDir = Path.GetFullPath(@"..\..\..\template");
-            var pathToGeneratedDir = Path.GetFullPath(@"..\..\..\generated");
-            var templateFiles = Directory.GetFiles(
-                pathToTemplateDir, "*", SearchOption.AllDirectories);
-            var solutionFilePath = templateFiles
-                .Where(x => Path.GetExtension(x) == ".sln")
-                .First();
-            var solutionName = Path.GetFileName(solutionFilePath);
-            var solutionText = File.ReadAllText(solutionFilePath);
-            var projectFilePath = templateFiles
-                .Where(x => Path.GetExtension(x) == ".vcxproj")
-                .First();
-            var projectText = File.ReadAllText(projectFilePath);
-            var projectName = Path.GetFileNameWithoutExtension(projectFilePath);
-            var projectGuidMatch = Regex.Match(projectText, @"<ProjectGuid>({[^}]+})<");
-            var projectGuid = projectGuidMatch.Groups[1].Value;
-
-            var projectRef = Regex
-                .Match(solutionText,
-                    @"^Project.*" + projectGuid + @"""\r\nEndProject\r\n", RegexOptions.Multiline)
-                .Value;
-
-            var projectConfigsList = Regex
-                .Matches(solutionText,
-                    @"^\s+" + projectGuid + @".*\r\n", RegexOptions.Multiline)
-                .Cast<Match>()
-                .Select(x => x.Value);
-            var projectConfigs = string.Join("", projectConfigsList);
-
             var projectFiles = Directory.GetFiles(
                 Path.Combine(pathToTemplateDir, projectName),
                 "*", SearchOption.TopDirectoryOnly);
 
-            if (Directory.Exists(pathToGeneratedDir))
-                Directory.Delete(pathToGeneratedDir, true);
-
-            var genSolutionProjectRef = new StringBuilder();
-            var genSolutionProjectConfigs = new StringBuilder();
-
-            for (int i = 1; i <= projectCount; i++) {
+            bool singleProject = false;
+            for (int i = 1; !singleProject && i <= projectCount; i++) {
                 var idxStr = string.Format("{0:D3}", i);
                 var genProjectName = projectName.Replace("NNN", idxStr);
+                if (genProjectName == projectName)
+                    singleProject = true;
                 var genProjectDirPath = Path.Combine(pathToGeneratedDir, genProjectName);
                 var genProjectGuid = projectGuid.Replace("000", idxStr);
 
@@ -110,9 +86,66 @@
                     genSolutionProjectConfigs.Append(genProjectConfig);
                 }
             }
-            var genSolutionText = solutionText
-                .Replace(projectRef, genSolutionProjectRef.ToString())
-                .Replace(projectConfigs, genSolutionProjectConfigs.ToString());
+        }
+
+        static void Main(string[] args)
+        {
+            int projectCount;
+            if (args.Length == 0 || !int.TryParse(args[0], out projectCount)) {
+                string userProjectCount;
+                do {
+                    Console.Write("Project count: ");
+                    userProjectCount = Console.ReadLine();
+                } while (!int.TryParse(userProjectCount, out projectCount));
+            }
+            var pathToTemplateDir = Path.GetFullPath(@"..\..\..\template");
+            var pathToGeneratedDir = Path.GetFullPath(
+                $@"..\..\..\generated_{DateTime.Now.ToString("yyyyMMddhhmmssfff")}");
+            var templateFiles = Directory.GetFiles(
+                pathToTemplateDir, "*", SearchOption.AllDirectories);
+            var solutionFilePath = templateFiles
+                .Where(x => Path.GetExtension(x) == ".sln")
+                .First();
+            var solutionName = Path.GetFileName(solutionFilePath);
+            var solutionText = File.ReadAllText(solutionFilePath);
+            var projectFilePaths = templateFiles
+                .Where(x => Path.GetExtension(x) == ".vcxproj");
+            var genSolutionText = solutionText;
+            if (Directory.Exists(pathToGeneratedDir))
+                Directory.Delete(pathToGeneratedDir, true);
+            foreach (var projectFilePath in projectFilePaths) {
+                var genSolutionProjectRef = new StringBuilder();
+                var genSolutionProjectConfigs = new StringBuilder();
+                var projectText = File.ReadAllText(projectFilePath);
+                var projectName = Path.GetFileNameWithoutExtension(projectFilePath);
+                var projectGuidMatch = Regex.Match(projectText, @"<ProjectGuid>({[^}]+})<");
+                var projectGuid = projectGuidMatch.Groups[1].Value;
+                var projectRef = Regex
+                    .Match(solutionText,
+                        @"^Project.*" + projectGuid + @"""\r\nEndProject\r\n",
+                        RegexOptions.Multiline | RegexOptions.IgnoreCase)
+                    .Value;
+                var projectConfigsList = Regex
+                    .Matches(solutionText,
+                        @"^\s+" + projectGuid + @".*\r\n",
+                        RegexOptions.Multiline | RegexOptions.IgnoreCase)
+                    .Cast<Match>()
+                    .Select(x => x.Value);
+                var projectConfigs = string.Join("", projectConfigsList);
+                GenerateProject(
+                    genSolutionProjectRef,
+                    genSolutionProjectConfigs,
+                    pathToTemplateDir,
+                    pathToGeneratedDir,
+                    projectCount,
+                    projectGuid,
+                    projectName,
+                    projectRef,
+                    projectConfigsList);
+                genSolutionText = genSolutionText
+                    .Replace(projectRef, genSolutionProjectRef.ToString())
+                    .Replace(projectConfigs, genSolutionProjectConfigs.ToString());
+            }
             var genSolutionFilePath = Path.Combine(pathToGeneratedDir, solutionName);
             File.WriteAllText(genSolutionFilePath, genSolutionText);
         }

--
Gitblit v1.9.1