/// <summary> /// Validate patch definitions, checks their fields /// </summary> /// <param name="change"></param> /// <returns></returns> private List <string> ValidatePatchDefinition(LegacyChanges change) { List <string> problems = new List <string>(); if (string.IsNullOrEmpty(change.Action)) { problems.Add($"Undefined action in patch"); } if (string.IsNullOrEmpty(change.Target)) { problems.Add($"Target is not defined in entry"); } if (string.IsNullOrEmpty(change.FromFile)) { problems.Add("No content defined! `FromFile` must be set in entry"); } if (change.Action != null && change.Action.Equals("Replace") && !string.IsNullOrEmpty(change.Locale)) { problems.Add("Locale can't be used for `Replace` action! Use action `Patch` instead for localization patches"); } if (change.Action != null && !change.Action.Equals("Replace") && !change.Action.Equals("Patch")) { problems.Add($"Unknown action `{change.Action}`"); } return(problems); }
/// <summary> /// Apply rewrites for fields in patches /// </summary> /// <param name="change"></param> /// <param name="formatVersion"></param> /// <returns></returns> private List <string> ApplyPatchRewrites(LegacyChanges change, ISemanticVersion formatVersion) { List <string> notices = new List <string>(); if (formatVersion.IsOlderThan("1.2") && !string.IsNullOrEmpty(change.Locale)) { // Locales exists in format version 1.2 and newer. For older formats is locale undefined change.Locale = null; notices.Add($"Ignore field `Locale` in format version `{formatVersion}`"); } if (formatVersion.IsOlderThan("1.2") && !string.IsNullOrEmpty(change.LogName)) { // Locales exists in format version 1.2 and newer. For older formats is locale undefined change.LogName = null; notices.Add($"Ignore field `LogName` in format version `{formatVersion}`"); } if (!formatVersion.IsOlderThan("1.3") && string.IsNullOrEmpty(change.Action)) { change.Action = "Patch"; // Action patch is a default action in format >=1.3 } if (formatVersion.IsOlderThan("1.3") && (change.Action == "Load" || change.Action == "Edit")) { var replace = change.Action == "Load" ? "Replace" : "Patch"; notices.Add($"Rewrite action `{change.Action}` -> `{replace}`"); change.Action = replace; } if (change.Action == "Replace") { notices.Add($"Detected content replacer `{change.LogName}` for `{change.Target}`"); } return(notices); }