protected string GetContent(string path, string state, Inserts patch = null) { string content = ""; if (state == Translation.Statuses.Added) { content = ReadFile(path); } else if (state == Translation.Statuses.Modified || state == Translation.Statuses.Moved) { if (patch == null) { content = ReadFile(path); content = content.Replace("CREATE", "ALTER"); } else { content = patch.GetContent(); } } else { if (patch != null) { content = patch.GetContent(); } } return(content); }
protected Inserts GetFileChanges(string patch) { Inserts cont = new Inserts(); Regex regPlus = new Regex("^\\+\\w+.*"); Regex regMin = new Regex("^\\-\\w+.*"); Regex comment = new Regex("^--"); Regex setIdent = new Regex("SET IDENTITY_INSERT"); string[] splitPatch = patch.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); List <string> added = splitPatch.Where(t => regPlus.IsMatch(t)).ToList(); foreach (string line in added) { string element = line.Remove(0, 1); if (element != String.Empty && !comment.IsMatch(element)) { string[] mas = element.Split(' '); string key = "INSERT INTO " + mas[2]; if (cont.AddedLines.ContainsKey(key)) { cont.AddedLines[key].Lines.Add(element); } else { cont.AddedLines.Add(key, new IncludeContent(element)); } } } List <string> deleted = splitPatch.Where(t => regMin.IsMatch(t)).ToList(); foreach (string line in deleted) { string element = line.Remove(0, 1); if (element != String.Empty && !comment.IsMatch(element) && !setIdent.IsMatch(element)) { string[] mas = element.Split(' '); string key = "DELETE FROM " + mas[2]; if (cont.AddedLines.ContainsKey(key)) { string generDelete = GetDeleteFrom(element, mas[2]); cont.AddedLines[key].Lines.Add(generDelete); } else { string generDelete = GetDeleteFrom(element, mas[2]); cont.AddedLines.Add(key, new IncludeContent(generDelete)); } } } return(cont); }
public Inserts GetInserts(string text) { string[] splitPatch = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); Inserts inserts = new Inserts(); for (var i = 0; i < splitPatch.Length; i++) { string[] masLine = splitPatch[i].Split(); string key = masLine[0] + " " + masLine[1] + " " + masLine[2]; if (inserts.AddedLines.ContainsKey(key)) { inserts.AddedLines[key].Lines.Add(splitPatch[i]); } else { inserts.AddedLines.Add(key, new IncludeContent(splitPatch[i])); } } return(inserts); }
public override ObservableCollection <Change> GetChanges(string pathRepository, string shortDatabaseFolderName) { Regex regex = new Regex(shortDatabaseFolderName + @"(.*)(\.sql$)"); var statuses = repository.RetrieveStatus().Where(t => regex.IsMatch(t.FilePath)); ObservableCollection <Change> changes = new ObservableCollection <Change>(); foreach (var status in statuses) { Change change = new Change(); string state = GetState(status.State.ToString()); change.Status = state; change.FilePath = pathRepository + "\\" + status.FilePath; if (state == Translation.Statuses.Added) { change.Content = GetContent(change.FilePath, state); } else if (state == Translation.Statuses.Modified) { bool isPostDiployment = IsPostDiployment(change.FilePath); if (isPostDiployment) { List <string> fileList = new List <string>() { status.FilePath }; var diff = repository.Diff.Compare <Patch>(fileList); string patch = ""; foreach (var diffItem in diff) { patch = diffItem.Patch; } Inserts pathFile = GetFileChanges(patch); change.Content = GetContent(status.FilePath, state, pathFile); change.Inserts = pathFile; } else { change.Content = GetContent(change.FilePath, state); } } else if (state == Translation.Statuses.Deleted) { List <string> fileList = new List <string>() { status.FilePath }; var diff = repository.Diff.Compare <Patch>(fileList); string patch = ""; foreach (var diffItem in diff) { patch = diffItem.Patch; } string[] splitPatch = patch.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); Regex reg = new Regex(@"^-\w+.*"); string[] masMin = splitPatch.Select(t => t = t.Replace("\ufeff", "")).Where(t => reg.IsMatch(t)).ToArray(); string element = masMin[0]; element = element.Remove(0, 1); string[] mas = element.Split(); bool isPostDiployment = mas[0] != "CREATE"; if (isPostDiployment) { Inserts inserts = GetFileChanges(patch); change.Content = GetContent(change.FilePath, change.Status, inserts); } else { change.Content = DeleteOrDrop(element); } } if (changes.Count == 0) { changes.Add(change); } else { bool addOrNot = RemoveSameFiles(changes, change); if (addOrNot) { changes.Add(change); } } } return(changes); }