private void LoadAndChange <T> (String name, String file, IEnumerable <String> changes, TextWriter writer) where T : BaseEntity { T entity = BaseEntity.LoadFrom <T> (file); bool modified = false; foreach (var change in changes) { this.Log(Level.Verbose, "Patching {0} with '{1}'", name, change); int hash = entity.GetHashValue(); BaseEntity.Change <T> (entity, change); int newHash = entity.GetHashValue(); modified |= (hash != newHash); if (writer != null) { writer.WriteLine("{0} {1} with '{2}'", (hash != newHash) ? "MODIFIED " : "UNTOUCHED", name, change); } } if (modified) { this.Log(Level.Info, String.Format("Patching '{0}'...", name)); entity.SaveTo(file); } }