Ejemplo n.º 1
0
        static void OnFindFiles_INTERNAL(string input)
        {
            var files = VersionControl.ParseFiles(input);

            Debug.Log("Staged Files:");

            foreach (var file in files)
            {
                if (file.fileState1 != FileState.Unmodified && file.fileState1 != FileState.Untracked && file.fileState1 != FileState.Ignored)
                {
                    if (string.IsNullOrEmpty(file.name2))
                    {
                        Debug.Log(file.name1);
                    }
                    else
                    {
                        Debug.Log(file.name2);
                    }
                }
            }

            Debug.Log("Working tree:");

            foreach (var file in files)
            {
                if (file.fileState2 != FileState.Unmodified && file.fileState2 != FileState.Untracked && file.fileState2 != FileState.Ignored)
                {
                    if (string.IsNullOrEmpty(file.name2))
                    {
                        Debug.Log(file.name1);
                    }
                    else
                    {
                        Debug.Log(file.name2);
                    }
                }
            }

            Debug.Log("Untracked:");

            foreach (var file in files)
            {
                if (file.fileState1 == FileState.Untracked && file.fileState2 == FileState.Untracked)
                {
                    Debug.Log(file.name1);
                }
            }

            Debug.Log("Ignored:");

            foreach (var file in files)
            {
                if (file.fileState1 == FileState.Ignored && file.fileState2 == FileState.Ignored)
                {
                    Debug.Log(file.name1);
                }
            }
        }
        // TODO: Handle errors (BrowserUtility.OnFindFiles)
        private static void OnFindFiles(object sender, System.EventArgs e)
        {
            var process = sender as System.Diagnostics.Process;

            var files = VersionControl.ParseFiles(process.StandardOutput.ReadToEnd());

            #region removal
            var toRemove = new List <string>();

            // Staged files
            foreach (var kvp in stagedFiles)
            {
                bool keep = false;
                foreach (var file in files)
                {
                    if (file.fileState1 != FileState.Unmodified && file.fileState1 != FileState.Untracked && file.fileState1 != FileState.Ignored)
                    {
                        if (kvp.Key.Equals(file.path1 + file.path2))
                        {
                            // Found a match
                            keep = true;
                            break;
                        }
                    }
                }

                // Add to removal queue
                if (!keep)
                {
                    toRemove.Add(kvp.Key);
                }
            }

            // Perform removal
            foreach (var str in toRemove)
            {
                stagedFiles.Remove(str);
            }

            toRemove.Clear();

            // Working tree
            foreach (var kvp in workingTree)
            {
                bool keep = false;
                foreach (var file in files)
                {
                    if ((file.fileState2 != FileState.Unmodified && file.fileState2 != FileState.Untracked && file.fileState2 != FileState.Ignored) ||
                        (file.fileState1 == FileState.Untracked && file.fileState2 == FileState.Untracked) ||
                        (file.fileState1 == FileState.Ignored && file.fileState2 == FileState.Ignored))
                    {
                        if (kvp.Key.Equals(file.path1 + file.path2))
                        {
                            // Found a match
                            keep = true;
                            break;
                        }
                    }
                }

                // Add to removal queue
                if (!keep)
                {
                    toRemove.Add(kvp.Key);
                }
            }

            // Perform removal
            foreach (var str in toRemove)
            {
                workingTree.Remove(str);
            }
            #endregion

            #region addition
            foreach (var file in files)
            {
                // Staged files
                if (file.fileState1 != FileState.Unmodified && file.fileState1 != FileState.Untracked && file.fileState1 != FileState.Ignored)
                {
                    // Check for duplicate
                    if (!stagedFiles.ContainsKey(file.path1 + file.path2))
                    {
                        // Add file
                        stagedFiles.Add(file.path1 + file.path2, file);
                    }
                }

                // Working tree
                if (file.fileState2 != FileState.Unmodified && file.fileState2 != FileState.Untracked && file.fileState2 != FileState.Ignored)
                {
                    // Check for duplicate
                    if (!workingTree.ContainsKey(file.path1 + file.path2))
                    {
                        // Check for duplicate (stagedFiles)
                        if (stagedFiles.ContainsValue(file))
                        {
                            // Add file (new instance)
                            workingTree.Add(file.path1 + file.path2, new VCFile(file));
                        }
                        else
                        {
                            // Add file
                            workingTree.Add(file.path1 + file.path2, file);
                        }
                    }
                }

                // Untracked (added to working tree)
                if (file.fileState1 == FileState.Untracked && file.fileState2 == FileState.Untracked)
                {
                    // Check for duplicate
                    if (!workingTree.ContainsKey(file.path1 + file.path2))
                    {
                        // Add value
                        workingTree.Add(file.path1 + file.path2, file);
                    }
                }

                // Ignored (added to working tree)
                if (file.fileState1 == FileState.Ignored && file.fileState2 == FileState.Ignored)
                {
                    // Check for duplicate
                    if (!workingTree.ContainsKey(file.path1 + file.path2))
                    {
                        // Add value
                        workingTree.Add(file.path1 + file.path2, file);
                    }
                }
            }
            #endregion

            // Validate selection
            ValidateSelection(null, false, false, -1, -1, null);

            // Update stats
            UpdateStats();
        }