fix script
This commit is contained in:
@@ -24,68 +24,51 @@ namespace rename_ue_project
|
|||||||
/// <exception cref="ArgumentException">if an app parameter was invalid</exception>
|
/// <exception cref="ArgumentException">if an app parameter was invalid</exception>
|
||||||
static async Task Main(string[] args)
|
static async Task Main(string[] args)
|
||||||
{
|
{
|
||||||
if (args.Length < 1) {
|
if (args.Length < 1)
|
||||||
|
{
|
||||||
throw new ArgumentException("Please provide the absolute root path to your unreal project");
|
throw new ArgumentException("Please provide the absolute root path to your unreal project");
|
||||||
}
|
}
|
||||||
var projectPath = args[0];
|
var projectPath = args[0];
|
||||||
|
|
||||||
if (args.Length < 2) {
|
if (args.Length < 2)
|
||||||
|
{
|
||||||
throw new ArgumentException("Please provide the new project name");
|
throw new ArgumentException("Please provide the new project name");
|
||||||
}
|
}
|
||||||
var projectName = args[1];
|
var projectName = args[1];
|
||||||
|
|
||||||
if (args.Length < 3) {
|
if (args.Length < 3)
|
||||||
|
{
|
||||||
throw new ArgumentException("Please provide a description for your READ.ME (as markdown)");
|
throw new ArgumentException("Please provide a description for your READ.ME (as markdown)");
|
||||||
}
|
}
|
||||||
var descLong = args[2];
|
var descLong = args[2];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!Directory.Exists(projectPath))
|
if (!Directory.Exists(projectPath))
|
||||||
{
|
{
|
||||||
throw new IOException($"Directory {projectPath} does not exist");
|
throw new IOException($"Directory {projectPath} does not exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
// step 0: validate ue project name
|
// step 0: validate ue project name
|
||||||
var rgxName = "'^[a-zA-Z0-9_-]+$";
|
validateNewName(projectName);
|
||||||
Match m = Regex.Match(projectName, rgxName, RegexOptions.IgnoreCase);
|
|
||||||
if (m.Success)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Unreal project names can not be longer than 20 chars and must not contain special chars, except - and _");
|
|
||||||
}
|
|
||||||
|
|
||||||
// step 1: rename directory
|
// step 1: rename directory
|
||||||
// todo: find the .uproject file. in case there is more than one, throw an exception
|
string oldFile = renameDir(projectPath, projectName);
|
||||||
|
|
||||||
if (!Directory.Exists(OLD_PROJECT_NAME))
|
|
||||||
{
|
|
||||||
throw new IOException($"Directory {OLD_PROJECT_NAME} does not exist");
|
|
||||||
}
|
|
||||||
|
|
||||||
Directory.Move(
|
|
||||||
Path.Combine(projectPath, OLD_PROJECT_NAME),
|
|
||||||
Path.Combine(projectPath, projectName)
|
|
||||||
);
|
|
||||||
Console.WriteLine("Renamed project directory");
|
|
||||||
|
|
||||||
// step 2: rename project file
|
// step 2: rename project file
|
||||||
File.Move(
|
renameUProjectFile(projectPath, projectName, oldFile);
|
||||||
Path.Combine(projectPath, projectName, $"{OLD_PROJECT_NAME}{UE_PROJECT_EXTENSION}"),
|
|
||||||
Path.Combine(projectPath, projectName, $"{projectName}{UE_PROJECT_EXTENSION}")
|
|
||||||
);
|
|
||||||
|
|
||||||
// step 3: replace everything in gitignore
|
// step 3: replace everything in gitignore
|
||||||
var ignoreContent = await File.ReadAllTextAsync(Path.Combine(projectPath, GITIGNORE));
|
await updateIgnore(projectPath, projectName, oldFile);
|
||||||
ignoreContent = ignoreContent.Replace(OLD_PROJECT_NAME, projectName);
|
|
||||||
Console.WriteLine("Replaced project name in gitignore");
|
|
||||||
|
|
||||||
// step 4: write read.me in format # projectName + new line + descrLong
|
// step 4: write read.me in format # projectName + new line + descrLong
|
||||||
var readMe = @$"# {projectName}{Environment.NewLine}{descLong}";
|
await updateReadMe(projectPath, projectName, descLong);
|
||||||
await File.WriteAllTextAsync(Path.Combine(projectPath, README), readMe);
|
|
||||||
Console.WriteLine("Wrote READ.ME");
|
|
||||||
|
|
||||||
// step 5: replace name in DefaultGame.ini
|
// step 5: replace name in DefaultGame.ini
|
||||||
|
await updateGameIni(projectPath, projectName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task updateGameIni(string projectPath, string projectName)
|
||||||
|
{
|
||||||
var configPath = Path.Combine(projectPath, projectName, CONFIG_FOLDER, DEGAULT_GAME_INI);
|
var configPath = Path.Combine(projectPath, projectName, CONFIG_FOLDER, DEGAULT_GAME_INI);
|
||||||
if (!File.Exists(configPath))
|
if (!File.Exists(configPath))
|
||||||
{
|
{
|
||||||
@@ -93,13 +76,67 @@ namespace rename_ue_project
|
|||||||
}
|
}
|
||||||
|
|
||||||
var defaultGameIni = await File.ReadAllTextAsync(configPath);
|
var defaultGameIni = await File.ReadAllTextAsync(configPath);
|
||||||
var rgxPrjName = @"(?<=ProjectName=)[^\s]+";
|
var rgxPrjName = @"(?<=ProjectName=).*";
|
||||||
|
|
||||||
// Perform the replacement
|
// Perform the replacement
|
||||||
defaultGameIni = Regex.Replace(defaultGameIni, rgxPrjName, projectName);
|
defaultGameIni = Regex.Replace(defaultGameIni, rgxPrjName, projectName);
|
||||||
await File.WriteAllTextAsync(configPath, defaultGameIni);
|
await File.WriteAllTextAsync(configPath, defaultGameIni);
|
||||||
Console.WriteLine($"Replaced project name in {DEGAULT_GAME_INI}");
|
Console.WriteLine($"Replaced project name in {DEGAULT_GAME_INI}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task updateReadMe(string projectPath, string projectName, string descLong)
|
||||||
|
{
|
||||||
|
var readMe = @$"# {projectName}{Environment.NewLine}{descLong}";
|
||||||
|
await File.WriteAllTextAsync(Path.Combine(projectPath, README), readMe);
|
||||||
|
Console.WriteLine("Wrote READ.ME");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task updateIgnore(string projectPath, string projectName, string oldFile)
|
||||||
|
{
|
||||||
|
var ignoreContent = await File.ReadAllTextAsync(Path.Combine(projectPath, GITIGNORE));
|
||||||
|
ignoreContent = ignoreContent.Replace(Path.GetFileName(oldFile), projectName);
|
||||||
|
Console.WriteLine("Replaced project name in gitignore");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void renameUProjectFile(string projectPath, string projectName, string oldFile)
|
||||||
|
{
|
||||||
|
File.Move(
|
||||||
|
Path.Combine(projectPath, projectName, Path.GetFileName(oldFile)),
|
||||||
|
Path.Combine(projectPath, projectName, $"{projectName}{UE_PROJECT_EXTENSION}")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string renameDir(string projectPath, string projectName)
|
||||||
|
{
|
||||||
|
var files = Directory.EnumerateFiles(projectPath, $"*{UE_PROJECT_EXTENSION}", SearchOption.AllDirectories).ToList();
|
||||||
|
if (files.Count > 1)
|
||||||
|
{
|
||||||
|
throw new IOException($"More than one {UE_PROJECT_EXTENSION} file found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var oldFile = files[0];
|
||||||
|
var oldDir = Path.GetDirectoryName(oldFile);
|
||||||
|
if (!Directory.Exists(oldDir))
|
||||||
|
{
|
||||||
|
throw new IOException($"Directory {oldDir} does not exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
Directory.Move(
|
||||||
|
Path.Combine(projectPath, oldDir),
|
||||||
|
Path.Combine(projectPath, projectName)
|
||||||
|
);
|
||||||
|
Console.WriteLine("Renamed project directory");
|
||||||
|
return oldFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void validateNewName(string projectName)
|
||||||
|
{
|
||||||
|
var rgxName = "'^[a-zA-Z0-9_-]+$";
|
||||||
|
Match m = Regex.Match(projectName, rgxName, RegexOptions.IgnoreCase);
|
||||||
|
if (m.Success)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Unreal project names can not be longer than 20 chars and must not contain special chars, except - and _");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user