public static void ViewChanges(this FileViewer diffViewer, string revision, string parentRevision, GitItemStatus file, string defaultText)
 {
     if (parentRevision == null)
     {
         if (file.TreeGuid.IsNullOrEmpty())
         {
             diffViewer.ViewGitItemRevision(file.Name, revision);
         }
         else if (!file.IsSubmodule)
         {
             diffViewer.ViewGitItem(file.Name, file.TreeGuid);
         }
         else
         {
             diffViewer.ViewText(file.Name,
                                 LocalizationHelpers.GetSubmoduleText(diffViewer.Module, file.Name, file.TreeGuid));
         }
     }
     else
     {
         diffViewer.ViewPatch(() =>
         {
             string selectedPatch = diffViewer.GetSelectedPatch(revision, parentRevision, file);
             return(selectedPatch ?? defaultText);
         });
     }
 }
        private void tvGitTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            ThreadHelper.JoinableTaskFactory.RunAsync(ViewItem);

            Task ViewItem()
            {
                return(e.Node?.Tag is GitItem gitItem
                    ? ViewGitItemAsync(gitItem)
                    : Task.CompletedTask);
            }

            Task ViewGitItemAsync(GitItem gitItem)
            {
                switch (gitItem.ObjectType)
                {
                case GitObjectType.Blob:
                {
                    return(FileText.ViewGitItemAsync(gitItem.FileName, gitItem.ObjectId));
                }

                case GitObjectType.Commit:
                {
                    return(FileText.ViewTextAsync(gitItem.FileName, LocalizationHelpers.GetSubmoduleText(Module, gitItem.FileName, gitItem.Guid)));
                }

                default:
                {
                    return(FileText.ViewTextAsync("", ""));
                }
                }
            }
        }
Example #3
0
        private void tvGitTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            var gitItem = e.Node?.Tag as GitItem;

            if (gitItem == null)
            {
                return;
            }

            switch (gitItem.ObjectType)
            {
            case GitObjectType.Blob:
            {
                FileText.ViewGitItem(gitItem.FileName, gitItem.Guid);
                break;
            }

            case GitObjectType.Commit:
            {
                FileText.ViewText(gitItem.FileName, LocalizationHelpers.GetSubmoduleText(Module, gitItem.FileName, gitItem.Guid));
                break;
            }

            default:
            {
                FileText.ViewText("", "");
                break;
            }
            }
        }
        public static string GetSelectedPatch(this FileViewer diffViewer, string firstRevision, string secondRevision, GitItemStatus file)
        {
            if (!file.IsTracked)
            {
                var fullPath = Path.Combine(diffViewer.Module.WorkingDir, file.Name);
                if (Directory.Exists(fullPath) && GitModule.IsValidGitWorkingDir(fullPath))
                {
                    // git-status does not detect details for untracked and git-diff --no-index will not give info
                    return(LocalizationHelpers.GetSubmoduleText(diffViewer.Module, file.Name.TrimEnd('/'), ""));
                }
            }

            if (file.IsSubmodule && file.SubmoduleStatus != null)
            {
                return(LocalizationHelpers.ProcessSubmoduleStatus(diffViewer.Module, file.SubmoduleStatus.Result));
            }

            PatchApply.Patch patch = GetItemPatch(diffViewer.Module, file, firstRevision, secondRevision,
                                                  diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);

            if (patch == null)
            {
                return(string.Empty);
            }

            if (file.IsSubmodule)
            {
                return(LocalizationHelpers.ProcessSubmodulePatch(diffViewer.Module, file.Name, patch));
            }

            return(patch.Text);
        }
Example #5
0
        private void tvGitTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node?.Tag is GitItem gitItem)
            {
                switch (gitItem.ObjectType)
                {
                case GitObjectType.Blob:
                {
                    FileText.ViewGitItemAsync(gitItem.FileName, gitItem.Guid);
                    break;
                }

                case GitObjectType.Commit:
                {
                    FileText.ViewTextAsync(gitItem.FileName, LocalizationHelpers.GetSubmoduleText(Module, gitItem.FileName, gitItem.Guid));
                    break;
                }

                default:
                {
                    FileText.ViewTextAsync("", "");
                    break;
                }
                }
            }
        }
Example #6
0
        private void StashedSelectedIndexChanged(object sender, EventArgs e)
        {
            GitStash      gitStash    = Stashes.SelectedItem as GitStash;
            GitItemStatus stashedItem = Stashed.SelectedItem;

            EnablePartialStash();

            using (WaitCursorScope.Enter())
            {
                if (stashedItem != null &&
                    gitStash == _currentWorkingDirStashItem)
                {
                    // current working directory
                    View.ViewCurrentChanges(stashedItem);
                }
                else if (stashedItem != null)
                {
                    if (stashedItem.IsNew)
                    {
                        if (!stashedItem.IsSubmodule)
                        {
                            View.ViewGitItemAsync(stashedItem.Name, stashedItem.TreeGuid);
                        }
                        else
                        {
                            View.ViewTextAsync(
                                stashedItem.Name,
                                LocalizationHelpers.GetSubmoduleText(Module, stashedItem.Name, stashedItem.TreeGuid));
                        }
                    }
                    else
                    {
                        string   extraDiffArguments = View.GetExtraDiffArguments();
                        Encoding encoding           = View.Encoding;
                        View.ViewPatchAsync(
                            () =>
                        {
                            Patch patch = Module.GetSingleDiff(gitStash.Name + "^", gitStash.Name, stashedItem.Name, stashedItem.OldName, extraDiffArguments, encoding, true, stashedItem.IsTracked);
                            if (patch == null)
                            {
                                return(text: string.Empty, openWithDifftool: null /* not applicable */);
                            }

                            if (stashedItem.IsSubmodule)
                            {
                                return(text: LocalizationHelpers.ProcessSubmodulePatch(Module, stashedItem.Name, patch),
                                       openWithDifftool: null /* not implemented */);
                            }

                            return(text: patch.Text, openWithDifftool: null /* not implemented */);
                        });
                    }
                }
                else
                {
                    View.ViewTextAsync(string.Empty, string.Empty);
                }
            }
        }
Example #7
0
        private void StashedSelectedIndexChanged(object sender, EventArgs e)
        {
            GitStash      gitStash    = Stashes.SelectedItem as GitStash;
            GitItemStatus stashedItem = Stashed.SelectedItem;

            EnablePartialStash();

            Cursor.Current = Cursors.WaitCursor;

            if (stashedItem != null &&
                gitStash == _currentWorkingDirStashItem)
            {
                // current working directory
                View.ViewCurrentChanges(stashedItem);
            }
            else if (stashedItem != null)
            {
                if (stashedItem.IsNew)
                {
                    if (!stashedItem.IsSubmodule)
                    {
                        View.ViewGitItem(stashedItem.Name, stashedItem.TreeGuid);
                    }
                    else
                    {
                        View.ViewText(stashedItem.Name,
                                      LocalizationHelpers.GetSubmoduleText(Module, stashedItem.Name, stashedItem.TreeGuid));
                    }
                }
                else
                {
                    string   extraDiffArguments = View.GetExtraDiffArguments();
                    Encoding encoding           = View.Encoding;
                    View.ViewPatch(() =>
                    {
                        Patch patch = Module.GetSingleDiff(gitStash.Name + "^", gitStash.Name, stashedItem.Name, stashedItem.OldName, extraDiffArguments, encoding, true, stashedItem.IsTracked);
                        if (patch == null)
                        {
                            return(string.Empty);
                        }

                        if (stashedItem.IsSubmodule)
                        {
                            return(LocalizationHelpers.ProcessSubmodulePatch(Module, stashedItem.Name, patch));
                        }

                        return(patch.Text);
                    });
                }
            }
            else
            {
                View.ViewText(string.Empty, string.Empty);
            }

            Cursor.Current = Cursors.Default;
        }
        public static string GetSelectedPatch(this FileViewer diffViewer, string firstRevision, string secondRevision, GitItemStatus file)
        {
            if (firstRevision == null)
            {
                return(null);
            }

            //to simplify if-ology
            if (GitRevision.IsArtificial(secondRevision) && firstRevision != GitRevision.UnstagedGuid)
            {
                string temp = firstRevision;
                firstRevision  = secondRevision;
                secondRevision = temp;
            }

            if (IsItemUntracked(file, firstRevision, secondRevision))
            {
                var fullPath = Path.Combine(diffViewer.Module.WorkingDir, file.Name);
                if (Directory.Exists(fullPath) && GitModule.IsValidGitWorkingDir(fullPath))
                {
                    return(LocalizationHelpers.GetSubmoduleText(diffViewer.Module, file.Name.TrimEnd('/'), ""));
                }
                return(FileReader.ReadFileContent(fullPath, diffViewer.Encoding));
            }

            if (file.IsSubmodule && file.SubmoduleStatus != null)
            {
                return(LocalizationHelpers.ProcessSubmoduleStatus(diffViewer.Module, file.SubmoduleStatus.Result));
            }

            PatchApply.Patch patch = GetItemPatch(diffViewer.Module, file, firstRevision, secondRevision,
                                                  diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);

            if (patch == null)
            {
                return(string.Empty);
            }

            if (file.IsSubmodule)
            {
                return(LocalizationHelpers.ProcessSubmodulePatch(diffViewer.Module, file.Name, patch));
            }
            return(patch.Text);
        }
Example #9
0
        private void GitTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            var item = e.Node.Tag as GitItem;

            if (item == null)
            {
                return;
            }

            if (item.IsBlob)
            {
                FileText.ViewGitItem(item.FileName, item.Guid);
            }
            else if (item.IsCommit)
            {
                FileText.ViewText(item.FileName, LocalizationHelpers.GetSubmoduleText(Module, item.FileName, item.Guid));
            }
            else
            {
                FileText.ViewText("", "");
            }
        }
Example #10
0
        private static string GetSelectedPatch(
            [NotNull] this FileViewer diffViewer,
            [CanBeNull] ObjectId firstRevision,
            [CanBeNull] ObjectId secondRevision,
            [NotNull] GitItemStatus file)
        {
            if (!file.IsTracked)
            {
                var fullPath = Path.Combine(diffViewer.Module.WorkingDir, file.Name);
                if (Directory.Exists(fullPath) && GitModule.IsValidGitWorkingDir(fullPath))
                {
                    // git-status does not detect details for untracked and git-diff --no-index will not give info
                    return(LocalizationHelpers.GetSubmoduleText(diffViewer.Module, file.Name.TrimEnd('/'), ""));
                }
            }

            if (file.IsSubmodule && file.GetSubmoduleStatusAsync() != null)
            {
                return(LocalizationHelpers.ProcessSubmoduleStatus(diffViewer.Module, ThreadHelper.JoinableTaskFactory.Run(() => file.GetSubmoduleStatusAsync())));
            }

            Patch patch = GetItemPatch(diffViewer.Module, file, firstRevision, secondRevision,
                                       diffViewer.GetExtraDiffArguments(), diffViewer.Encoding);

            if (patch == null)
            {
                return(string.Empty);
            }

            if (file.IsSubmodule)
            {
                return(LocalizationHelpers.ProcessSubmodulePatch(diffViewer.Module, file.Name, patch));
            }

            return(patch.Text);
        }
Example #11
0
 public void ViewGitItem(string fileName, string guid)
 {
     ViewItem(fileName, () => GetImage(fileName, guid), () => GetFileTextIfBlobExists(guid),
              () => LocalizationHelpers.GetSubmoduleText(Module, fileName.TrimEnd('/'), guid));
 }
Example #12
0
 public void ViewFile(string fileName)
 {
     ViewItem(fileName, () => GetImage(fileName), () => GetFileText(fileName),
              () => LocalizationHelpers.GetSubmoduleText(Module, fileName.TrimEnd('/'), ""));
 }