public static GitRepoData GetRepoHandle(string path) { if ((path != null) && Directory.Exists(path)) { var gitRepoData = new GitRepoData(path); if (gitRepoData.IsGitRepository) { return(gitRepoData); } } return(null); }
private void VersionBuild(GitRepoData gitRepo) { string VERSION_HEADER_FILE = @"C:\Unreal Projects\your_project_name_here\Source\your_project_name_here\GameVersion.h"; string UNREAL_DEFAULT_GAME_FILE = @"C:\Unreal Projects\your_project_name_here\Config\DefaultGame.ini"; string UNREAL_DEFAULT_ENGINE_FILE = @"C:\Unreal Projects\your_project_name_here\Config\DefaultEngine.ini"; const string GAME_VERSION_MAJOR_TEXT = @"#define GAME_VERSION_MAJOR"; const string GAME_VERSION_MINOR_TEXT = @"#define GAME_VERSION_MINOR"; const string GAME_VERSION_PATCH_TEXT = @"#define GAME_VERSION_PATCH"; const string GAME_VERSION_BUILD_TEXT = @"#define GAME_VERSION_BUILD"; const string GAME_VERSION_USES_GIT_TEXT = @"#define GAME_VERSION_USES_GIT"; const string GAME_VERSION_GIT_SHA_TEXT = @"#define GAME_VERSION_GIT_SHA"; const string GAME_VERSION_GIT_BRANCH_TEXT = @"#define GAME_VERSION_GIT_BRANCH"; const string UNREAL_PROJECT_VERSION_TEXT = @"ProjectVersion="; const string UNREAL_VERSION_DISPLAY_NAME_TEXT = @"VersionDisplayName="; int GVBTPos = GAME_VERSION_BUILD_TEXT.Length + 1; int GVGSTPos = GAME_VERSION_GIT_SHA_TEXT.Length + 1; int GVGBTPos = GAME_VERSION_GIT_BRANCH_TEXT.Length + 1; int GVUGTPos = GAME_VERSION_USES_GIT_TEXT.Length + 1; int UPVTPos = UNREAL_PROJECT_VERSION_TEXT.Length; System.Console.WriteLine("Modifying: " + VERSION_HEADER_FILE + ", " + UNREAL_DEFAULT_ENGINE_FILE + " and " + UNREAL_DEFAULT_GAME_FILE + "."); if (File.Exists(VERSION_HEADER_FILE)) { FileInfo VHFInfo = new FileInfo(VERSION_HEADER_FILE); FileInfo UDGFInfo = new FileInfo(UNREAL_DEFAULT_GAME_FILE); FileInfo UDEFInfo = new FileInfo(UNREAL_DEFAULT_ENGINE_FILE); VHFInfo.IsReadOnly = false; UDGFInfo.IsReadOnly = false; UDEFInfo.IsReadOnly = false; var VHFLines = new List <string>(File.ReadAllLines(VERSION_HEADER_FILE)); int totalLines = VHFLines.Count; int majorNumber = 0; int minorNumber = 0; int patchNumber = 0; int buildNumber = 0; int usesGit = 0; using (var sr = new StreamReader(VERSION_HEADER_FILE)) { for (int curLine = 0; curLine < totalLines; curLine++) { string curLineStr = sr.ReadLine(); if (curLineStr.Contains(GAME_VERSION_MAJOR_TEXT)) { majorNumber = int.Parse(curLineStr.Substring(GVBTPos)); continue; } if (curLineStr.Contains(GAME_VERSION_MINOR_TEXT)) { minorNumber = int.Parse(curLineStr.Substring(GVBTPos)); continue; } if (curLineStr.Contains(GAME_VERSION_PATCH_TEXT)) { patchNumber = int.Parse(curLineStr.Substring(GVBTPos)); continue; } if (curLineStr.Contains(GAME_VERSION_BUILD_TEXT)) { buildNumber = int.Parse(curLineStr.Substring(GVBTPos)) + 1; System.Console.WriteLine("New Build number generated: " + buildNumber.ToString()); VHFLines.RemoveAt(curLine); VHFLines.Insert(curLine, (GAME_VERSION_BUILD_TEXT + " " + buildNumber)); var USFLines = new List <string>(File.ReadAllLines(UNREAL_DEFAULT_GAME_FILE)); int totalLinesu = USFLines.Count; bool foundVersion = false; using (var sru = new StreamReader(UNREAL_DEFAULT_GAME_FILE)) { for (int curLineu = 0; curLineu < totalLinesu; curLineu++) { string curLineStru = sru.ReadLine(); if (curLineStru.Contains(UNREAL_PROJECT_VERSION_TEXT)) { System.Console.WriteLine("Modifying " + UNREAL_DEFAULT_GAME_FILE); foundVersion = true; sru.Close(); USFLines.RemoveAt(curLineu); USFLines.Insert(curLineu, (UNREAL_PROJECT_VERSION_TEXT + majorNumber + "." + minorNumber + "." + patchNumber + "." + buildNumber)); File.WriteAllLines(UNREAL_DEFAULT_GAME_FILE, USFLines); break; } } if (!foundVersion) { sru.Close(); USFLines.Add((UNREAL_PROJECT_VERSION_TEXT + majorNumber + "." + minorNumber + "." + patchNumber + "." + buildNumber)); File.WriteAllLines(UNREAL_DEFAULT_GAME_FILE, USFLines); } } var UEFLines = new List <string>(File.ReadAllLines(UNREAL_DEFAULT_ENGINE_FILE)); totalLinesu = UEFLines.Count; foundVersion = false; using (var sru = new StreamReader(UNREAL_DEFAULT_ENGINE_FILE)) { for (int curLineu = 0; curLineu < totalLinesu; curLineu++) { string curLineStru = sru.ReadLine(); if (curLineStru.Contains(UNREAL_VERSION_DISPLAY_NAME_TEXT)) { System.Console.WriteLine("Modifying " + UNREAL_DEFAULT_ENGINE_FILE); foundVersion = true; sru.Close(); UEFLines.RemoveAt(curLineu); UEFLines.Insert(curLineu, (UNREAL_VERSION_DISPLAY_NAME_TEXT + majorNumber + "." + minorNumber + "." + patchNumber + "." + buildNumber)); File.WriteAllLines(UNREAL_DEFAULT_ENGINE_FILE, UEFLines); break; } } if (!foundVersion) { sru.Close(); // Let's not do this since it needs to be in the right category //UEFLines.Add((UNREAL_VERSION_DISPLAY_NAME_TEXT + majorNumber + "." + minorNumber + "." + patchNumber + "." + buildNumber)); //File.WriteAllLines(UNREAL_DEFAULT_ENGINE_FILE, UEFLines); } } } if (curLineStr.Contains(GAME_VERSION_USES_GIT_TEXT)) { usesGit = int.Parse((curLineStr.Substring(GVUGTPos))); if (usesGit == 0) { if (gitRepo != null) { usesGit = 1; System.Console.WriteLine("System uses Git now."); VHFLines.RemoveAt(curLine); VHFLines.Insert(curLine, (GAME_VERSION_USES_GIT_TEXT + " 1")); } else { System.Console.WriteLine("No Git used."); sr.Close(); break; } } } if (curLineStr.Contains(GAME_VERSION_GIT_SHA_TEXT)) { string sha = curLineStr.Substring(GVGSTPos); /* Need to cut off the " */ sha = sha.Substring(1, sha.Length - 2); if (usesGit == 1) { string gitSHA = gitRepo.CurrentSha; if (sha != gitSHA) { System.Console.WriteLine("New Git Sha found : " + gitSHA); VHFLines.RemoveAt(curLine); VHFLines.Insert(curLine, (GAME_VERSION_GIT_SHA_TEXT + " \"" + gitSHA + "\"")); } } } if (curLineStr.Contains(GAME_VERSION_GIT_BRANCH_TEXT)) { string branch = curLineStr.Substring(GVGBTPos); /* Need to cut off the " */ branch = branch.Substring(1, branch.Length - 2); if (usesGit == 1) { string gitBranch = gitRepo.BranchName; if (branch != gitBranch) { System.Console.WriteLine("New Git branch found : " + gitBranch); VHFLines.RemoveAt(curLine); VHFLines.Insert(curLine, (GAME_VERSION_GIT_BRANCH_TEXT + " \"" + gitBranch + "\"")); } } /* This is the last entry we're looking for */ sr.Close(); break; } } } File.WriteAllLines(VERSION_HEADER_FILE, VHFLines); } else { throw new BuildException("Failed to get " + VERSION_HEADER_FILE + ", " + UNREAL_DEFAULT_ENGINE_FILE + " or " + UNREAL_PROJECT_VERSION_TEXT + ". Make sure they exist!"); } return; }
private GitRepoData GetGitRepo() { string RepoPath = @"C:\Unreal Projects\your_project_name_here\"; return(GitRepoData.GetRepoHandle(RepoPath)); }