private static Branch ApplyModChanges(Repository repo, Branch ctxBranch, string cvStr, Mod mod) { Branch branch = repo.CreateBranch(GetModBranchName(mod)); Commands.Checkout(repo, branch); foreach (FileInfo file in new RecursiveFileIterator(mod.ExtractedPath)) { Directory.CreateDirectory(RecursiveFileIterator.GetRelativeDirectory(file, mod.ExtractedPath)); string relName = RecursiveFileIterator.GetRelativeName(file, mod.ExtractedPath); File.Copy(file.FullName, repo.Info.Path + relName, true); repo.Index.Add(relName); } repo.Commit("Added files for mod " + mod.Name, _sig, _sig, _cmtOpts); Commands.Checkout(repo, ctxBranch); return(branch); }
public static bool Compile(OrderedDictionary <string, Mod> mods, string targetVersion, bool clear) { bool keepOpen = true; if (mods.Count > 0) { bool valid = true; try { LoadVersionInfo(); } catch (Exception e) { ConsoleUtils.ErrorLn(e.Message); ConsoleUtils.WarnLn("Compilation aborted."); valid = false; } if (valid) { int i = 0; List <OrderedMod> mods2 = mods.Select(x => new OrderedMod(x.Value, i++)).ToList(); mods2.Sort((a, b) => { int res = VersionCompare(a.Mod.Version, b.Mod.Version); return(res != 0 ? res : a.Position.CompareTo(b.Position)); }); int[] vTarget = Mod.GetConcreteVersion(targetVersion); int[] currentVersion = mods2[0].Mod.Version; Repository repo = GitSetUp(mods2[0].Mod); foreach (OrderedMod mod in mods2) { if (VersionCompare(mod.Mod.Version, vTarget) > 0) { ConsoleUtils.WarnLn("Mod \"" + mod.Mod.Name + "\" is targeting a newer version of Stellaris then compilation is targeting."); ConsoleUtils.WarnLn("(Mod needs " + mod.Mod.VersionString + " but compilation is targeting " + targetVersion + ")."); ConsoleUtils.WarnLn("Skipping mod..."); } else { int cmp = VersionCompare(mod.Mod.Version, currentVersion); if (cmp > 0) { ChangeCoreVersion(currentVersion, mod.Mod); currentVersion = mod.Mod.Version; } ApplyMod(mod.Mod); } } string outDir = TearDownGit(repo); // int[] version = GetConcreteVersion(targetVersion); //string vStr = GetVersionString(version); //Console.WriteLine("Compiling against Stellaris " + vStr + "..."); //string gameFiles = GetGameFiles(version, "$CORE " + vStr, out valid); if (valid) { /* * var usedLines = new Dictionary<string, Dictionary<int, Mod>>(); * foreach (KeyValuePair<string, Mod> kvp in mods) { * Mod mod = kvp.Value; * //int[] modV = GetConcreteVersion(mod.Version); * //string modVStr = GetVersionString(modV); * bool compileThis = true; * if (vStr == modVStr) { * List<string> conflicts = GetConflicts(gameFiles, mod); * ConsoleUtils.WarnLn("Compilation is targeting " + vStr + " but mod \"" + mod.Name + "\" is targeting " + modVStr + "."); * if (conflicts.Count > 0) { * ConsoleUtils.WarnLn("Vanilla files have been overridden - compiling this mod may lead to an unstable end product."); * ConsoleUtils.WarnLn("List of overridden files:"); * foreach (string file in conflicts) { * ConsoleUtils.WarnLn(" " + file); * } * } else { * ConsoleUtils.WarnLn("No vanilla files have been overriden, but features used by the mod may have changed between versions."); * } * ConsoleUtils.Warn("Do you want to compile this mod? (y/n): "); * bool reading = true; * do { * string line = Console.ReadLine(); * if (line != null) { * line = line.Trim().ToLower(); * switch (line) { * case "y": * case "yes": * compileThis = true; * reading = false; * break; * case "n": * case "no": * compileThis = false; * reading = false; * break; * default: * ConsoleUtils.Warn("Invalid argument. Please specify y/n: "); * break; * } * } else { * reading = false; * valid = false; * keepOpen = false; * } * } while (reading); * Console.WriteLine(); * } * if (valid) { * if (compileThis) { * Console.WriteLine("Compiling \"" + ResolveName(mod.Name) + "\"..."); * ModDiffer.ApplyDiff(gameFiles, mod, usedLines); * } else { * Console.WriteLine("Skipping mod..."); * } * } * } * if (valid) { * if (clear) { * mods.Clear(); * } * } */ } } } else { ConsoleUtils.ErrorLn("No mods have been loaded - compilation aborted."); } return(keepOpen); }
private static string GetModBranchName(Mod mod) { return("MOD_" + mod.GetHashCode()); }