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