public void ResetSubmodule(IWin32Window owner, SubmoduleNode node) { FormResetChanges.ActionEnum resetType = FormResetChanges.ShowResetDialog(owner, true, true); if (resetType == FormResetChanges.ActionEnum.Cancel) { return; } GitModule module = new(node.Info.Path); // Reset all changes. module.Reset(ResetMode.Hard); // Also delete new files, if requested. if (resetType == FormResetChanges.ActionEnum.ResetAndDelete) { module.Clean(CleanMode.OnlyNonIgnored, directories: true); } }
public void CommitSubmodule(IWin32Window owner, SubmoduleNode node) { var submodulCommands = new GitUICommands(node.Info.Path.EnsureTrailingPathSeparator()); submodulCommands.StartCommitDialog(owner); }
public void StashSubmodule(IWin32Window owner, SubmoduleNode node) { var uiCmds = new GitUICommands(new GitModule(node.Info.Path)); uiCmds.StashSave(owner, AppSettings.IncludeUntrackedFilesInManualStash); }
public void OpenSubmoduleInGitExtensions(IWin32Window owner, SubmoduleNode node) { node.LaunchGitExtensions(); }
public void OpenSubmodule(IWin32Window owner, SubmoduleNode node) { node.Open(); }
public void UpdateSubmodule(IWin32Window owner, SubmoduleNode node) { UICommands.StartUpdateSubmoduleDialog(owner, node.LocalPath, node.SuperPath); }
private void AddTopAndNodesToTree( ref Nodes nodes, List <SubmoduleNode> submoduleNodes, GitModule threadModule, SubmoduleInfoResult result) { // Create tree of SubmoduleFolderNode for each path directory and add input SubmoduleNodes as leaves. // Example of (SuperPath + LocalPath).ToPosixPath() for all nodes: // // C:/code/gitextensions2/Externals/conemu-inside // C:/code/gitextensions2/Externals/Git.hub // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/conemu-inside // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/Git.hub // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/ICSharpCode.TextEditor // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/NBug // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/GitExtensionsDoc // C:/code/gitextensions2/Externals/NBug // C:/code/gitextensions2/GitExtensionsDoc // // What we want to do is first remove the topModule portion, "C:/code/gitextensions2/", and // then build our tree by breaking up each path into parts, separated by '/'. // // Note that when we break up the paths, some parts are just directories, the others are submodule nodes: // // Externals / ICSharpCode.TextEditor / gitextensions / Externals / Git.hub // folder submodule submodule folder submodule // // Input 'nodes' is an array of SubmoduleNodes for all the submodules; now we need to create SubmoduleFolderNodes // and insert everything into a tree. var topModule = threadModule.GetTopModule(); // Build a mapping of top-module-relative path to node var pathToNodes = new Dictionary <string, Node>(); // Add existing SubmoduleNodes foreach (var node in submoduleNodes) { pathToNodes[GetNodeRelativePath(topModule, node)] = node; } // Create and add missing SubmoduleFolderNodes foreach (var node in submoduleNodes) { var parts = GetNodeRelativePath(topModule, node).Split(Delimiters.ForwardSlash); for (int i = 0; i < parts.Length - 1; ++i) { var path = string.Join("/", parts.Take(i + 1)); if (!pathToNodes.ContainsKey(path)) { pathToNodes[path] = new SubmoduleFolderNode(this, parts[i]); } } } // Now build the tree var rootNode = new DummyNode(); var nodesInTree = new HashSet <Node>(); foreach (var node in submoduleNodes) { Node parentNode = rootNode; var parts = GetNodeRelativePath(topModule, node).Split(Delimiters.ForwardSlash); for (int i = 0; i < parts.Length; ++i) { var path = string.Join("/", parts.Take(i + 1)); var nodeToAdd = pathToNodes[path]; // If node is not already in the tree, add it if (!nodesInTree.Contains(nodeToAdd)) { parentNode.Nodes.AddNode(nodeToAdd); nodesInTree.Add(nodeToAdd); } parentNode = nodeToAdd; } } Validates.NotNull(result.TopProject); // Add top-module node, and move children of root to it var topModuleNode = new SubmoduleNode( this, result.TopProject, result.TopProject.Bold, result.TopProject.Bold ? result.CurrentSubmoduleStatus : null, "", result.TopProject.Path); topModuleNode.Nodes.AddNodes(rootNode.Nodes); nodes.AddNode(topModuleNode); }
private string GetNodeRelativePath(GitModule topModule, SubmoduleNode node) { return(node.SuperPath.SubstringAfter(topModule.WorkingDir).ToPosixPath() + node.LocalPath); }