Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }