From 07bfe20696e0876574dff517bd57dbb488af8586 Mon Sep 17 00:00:00 2001 From: Michael Seibt <36601201+mstv@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:50:32 +0100 Subject: [PATCH 1/6] fix(ShowProcessDialogPasswordInput): Default to false (since automatically shown if needed) Refs: #12171 --- src/app/GitCommands/Settings/AppSettings.cs | 2 +- .../UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/GitCommands/Settings/AppSettings.cs b/src/app/GitCommands/Settings/AppSettings.cs index 211173f49f5..ec115e1328d 100644 --- a/src/app/GitCommands/Settings/AppSettings.cs +++ b/src/app/GitCommands/Settings/AppSettings.cs @@ -1304,7 +1304,7 @@ public static bool CloseProcessDialog set => SetBool("closeprocessdialog", value); } - public static ISetting ShowProcessDialogPasswordInput => Setting.Create(DetailedSettingsPath, nameof(ShowProcessDialogPasswordInput), true); + public static ISetting ShowProcessDialogPasswordInput => Setting.Create(DetailedSettingsPath, nameof(ShowProcessDialogPasswordInput), false); public static BoolRuntimeSetting ShowCurrentBranchOnly { get; } = new(RootSettingsPath, nameof(ShowCurrentBranchOnly), false); diff --git a/tests/app/UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs b/tests/app/UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs index 5e12e45d1e1..2467dc4c226 100644 --- a/tests/app/UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs +++ b/tests/app/UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs @@ -380,6 +380,7 @@ private static IEnumerable TestCases() yield return (properties[nameof(AppSettings.AutomaticContinuousScroll)], false, false, false); yield return (properties[nameof(AppSettings.AutomaticContinuousScrollDelay)], 600, false, false); yield return (properties[nameof(AppSettings.IsEditorSettingsMigrated)], false, isNotNullable, isISetting); + yield return (properties[nameof(AppSettings.ShowProcessDialogPasswordInput)], false, isNotNullable, isISetting); } static IEnumerable Values() From 4e6cd87635ab7ec937d3b14836d6fafb5daf5ad5 Mon Sep 17 00:00:00 2001 From: Michael Seibt <36601201+mstv@users.noreply.github.com> Date: Thu, 16 Jan 2025 20:53:01 +0100 Subject: [PATCH 2/6] fix(AheadBehindDataProvider): Restrict debug output to debug build and never to Output tab Refs: #12143 (cherry picked from commit c0b9c368db928271f89990778e284b23258844e9) --- src/app/GitCommands/Git/AheadBehindDataProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/GitCommands/Git/AheadBehindDataProvider.cs b/src/app/GitCommands/Git/AheadBehindDataProvider.cs index 1cba1558d7b..07e03eb821d 100644 --- a/src/app/GitCommands/Git/AheadBehindDataProvider.cs +++ b/src/app/GitCommands/Git/AheadBehindDataProvider.cs @@ -51,7 +51,7 @@ public void ResetCache() // Callers setting branch name has the responsibility to ensure that not all are needed if (string.IsNullOrWhiteSpace(branchName) && !string.IsNullOrWhiteSpace(_branchName)) { - Trace.WriteLine($"Call for all branches after cache filled with specific branch {_branchName}"); + Debug.WriteLine($"Call for all branches after cache filled with specific branch {_branchName}"); ResetCache(); } From c9561ee29d05cd0ae6a1a86517ee9ebe13ff0a72 Mon Sep 17 00:00:00 2001 From: Michael Seibt <36601201+mstv@users.noreply.github.com> Date: Sun, 26 Jan 2025 17:29:47 +0100 Subject: [PATCH 3/6] fix(bare repo): Skip git status and git stash list Refs: #12165 (cherry picked from commit f4714f42bc38f211c2201b9a075f434ef61b1ae1) --- src/app/GitUI/CommandsDialogs/BrowseDialog/GitStatusMonitor.cs | 2 +- src/app/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/GitUI/CommandsDialogs/BrowseDialog/GitStatusMonitor.cs b/src/app/GitUI/CommandsDialogs/BrowseDialog/GitStatusMonitor.cs index 60a416f8274..84fb01c37e7 100644 --- a/src/app/GitUI/CommandsDialogs/BrowseDialog/GitStatusMonitor.cs +++ b/src/app/GitUI/CommandsDialogs/BrowseDialog/GitStatusMonitor.cs @@ -471,7 +471,7 @@ private void Update() return; } - if (!Directory.Exists(_workTreeWatcher.Path)) + if (!Directory.Exists(_workTreeWatcher.Path) || Module.IsBareRepository()) { // The directory no longer exists, watcher cannot be enabled return; diff --git a/src/app/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs b/src/app/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs index c0253eb45f2..a662e094f13 100644 --- a/src/app/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs +++ b/src/app/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs @@ -926,7 +926,7 @@ public void PerformRefreshRevisions(Func> get // Get the "main" stash commit, including the reflog selector Lazy> getStashRevs = new(() => - !AppSettings.ShowStashes + !AppSettings.ShowStashes || Module.IsBareRepository() ? Array.Empty() : new RevisionReader(capturedModule).GetStashes(cancellationToken)); From 482dc013b24634c44747f7b6da8ab4da7229226d Mon Sep 17 00:00:00 2001 From: Michael Seibt Date: Wed, 22 Jan 2025 20:37:31 +0100 Subject: [PATCH 4/6] fix(Blame): Do not cancel loading if nothing changed Refs: #12158 (cherry picked from commit dc9f66ae318f59c20345cc12d6adfaa9bb47fb45) --- .../GitUI/CommandsDialogs/FormFileHistory.cs | 2 +- .../CommandsDialogs/RevisionDiffControl.cs | 2 +- .../RevisionFileTreeControl.cs | 2 +- src/app/GitUI/UserControls/BlameControl.cs | 22 ++++++++++++------- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/app/GitUI/CommandsDialogs/FormFileHistory.cs b/src/app/GitUI/CommandsDialogs/FormFileHistory.cs index 11cb607de3f..eb47e99ce3d 100644 --- a/src/app/GitUI/CommandsDialogs/FormFileHistory.cs +++ b/src/app/GitUI/CommandsDialogs/FormFileHistory.cs @@ -338,7 +338,7 @@ bool fileAvailable if (tabControl1.SelectedTab == BlameTab) { - _ = Blame.LoadBlameAsync(revision, children, fileName, revisionGridInfo: RevisionGrid, revisionGridUpdate: RevisionGrid, controlToMask: BlameTab, Diff.Encoding, force: force, cancellationToken: _viewChangesSequence.Next()); + _ = Blame.LoadBlameAsync(revision, children, fileName, revisionGridInfo: RevisionGrid, revisionGridUpdate: RevisionGrid, controlToMask: BlameTab, Diff.Encoding, force: force, cancellationTokenSequence: _viewChangesSequence); } else if (tabControl1.SelectedTab == ViewTab) { diff --git a/src/app/GitUI/CommandsDialogs/RevisionDiffControl.cs b/src/app/GitUI/CommandsDialogs/RevisionDiffControl.cs index 2a4f9261bac..36c551c2e40 100644 --- a/src/app/GitUI/CommandsDialogs/RevisionDiffControl.cs +++ b/src/app/GitUI/CommandsDialogs/RevisionDiffControl.cs @@ -586,7 +586,7 @@ private async Task ShowSelectedFileBlameAsync(bool ensureNoSwitchToFilter, int? ? _revisionGridInfo.GetActualRevision(_revisionGridInfo.CurrentCheckout) : DiffFiles.SelectedItem.SecondRevision; await BlameControl.LoadBlameAsync(rev, children: null, DiffFiles.SelectedItem.Item.Name, _revisionGridInfo, _revisionGridUpdate, - controlToMask: null, DiffText.Encoding, line, cancellationToken: _viewChangesSequence.Next()); + controlToMask: null, DiffText.Encoding, line, cancellationTokenSequence: _viewChangesSequence); } /// diff --git a/src/app/GitUI/CommandsDialogs/RevisionFileTreeControl.cs b/src/app/GitUI/CommandsDialogs/RevisionFileTreeControl.cs index daf81ce1b16..c5e56184135 100644 --- a/src/app/GitUI/CommandsDialogs/RevisionFileTreeControl.cs +++ b/src/app/GitUI/CommandsDialogs/RevisionFileTreeControl.cs @@ -456,7 +456,7 @@ private Task ShowGitItemAsync(GitItem gitItem, int? line) FileText.Visible = false; BlameControl.Visible = true; - return BlameControl.LoadBlameAsync(_revision, children: null, gitItem.FileName, _revisionGridInfo, _revisionGridUpdate, controlToMask: null, FileText.Encoding, line, cancellationToken: _viewBlameSequence.Next()); + return BlameControl.LoadBlameAsync(_revision, children: null, gitItem.FileName, _revisionGridInfo, _revisionGridUpdate, controlToMask: null, FileText.Encoding, line, cancellationTokenSequence: _viewBlameSequence); } case GitObjectType.Commit: diff --git a/src/app/GitUI/UserControls/BlameControl.cs b/src/app/GitUI/UserControls/BlameControl.cs index f1f07b9275d..c8918754b07 100644 --- a/src/app/GitUI/UserControls/BlameControl.cs +++ b/src/app/GitUI/UserControls/BlameControl.cs @@ -16,6 +16,7 @@ using GitUIPluginInterfaces; using GitUIPluginInterfaces.RepositoryHosts; using Microsoft; +using Microsoft.VisualStudio.Threading; using ResourceManager; namespace GitUI.Blame @@ -31,7 +32,6 @@ public sealed partial class BlameControl : GitModuleControl private readonly AsyncLoader _blameLoader = new(); private int _lineIndex; - private GitBlameLine? _lastBlameLine; private GitBlameLine? _clickedBlameLine; private GitBlameCommit? _highlightedCommit; @@ -41,8 +41,8 @@ public sealed partial class BlameControl : GitModuleControl private ObjectId? _blameId; private string? _fileName; private Encoding? _encoding; - private int _lastTooltipX = -100; - private int _lastTooltipY = -100; + private int _lastTooltipX = int.MinValue; + private int _lastTooltipY = int.MinValue; private GitBlameCommit? _tooltipCommit; private bool _changingScrollPosition; private IRepositoryHostPlugin? _gitHoster; @@ -51,6 +51,7 @@ public sealed partial class BlameControl : GitModuleControl private static readonly TranslationString _blameVisiblePreviousRevision = new("&Blame previous visible revision"); private readonly IGitRevisionSummaryBuilder _gitRevisionSummaryBuilder; private readonly IGitBlameParser _gitBlameParser; + private bool _loading; // Relative path of the file to blame when blaming a new revision public string? PathToBlame { get; private set; } @@ -104,14 +105,14 @@ public void HideCommitInfo() CommitInfo.CommandClicked -= commitInfo_CommandClicked; } - public async Task LoadBlameAsync(GitRevision revision, IReadOnlyList? children, string fileName, IRevisionGridInfo? revisionGridInfo, IRevisionGridUpdate? revisionGridUpdate, Control? controlToMask, Encoding encoding, int? initialLine = null, bool force = false, CancellationToken cancellationToken = default) + public async Task LoadBlameAsync(GitRevision revision, IReadOnlyList? children, string fileName, IRevisionGridInfo? revisionGridInfo, IRevisionGridUpdate? revisionGridUpdate, Control? controlToMask, Encoding encoding, int? initialLine = null, bool force = false, CancellationTokenSequence? cancellationTokenSequence = null) { ObjectId objectId = revision.ObjectId; // refresh only when something changed if (!force && objectId == _blameId && fileName == _fileName && revisionGridInfo == _revisionGridInfo && _revisionGridUpdate == revisionGridUpdate && encoding == _encoding) { - if (initialLine is not null) + if (initialLine is not null && !_loading) { BlameFile.GoToLine(initialLine.Value); } @@ -119,8 +120,10 @@ public async Task LoadBlameAsync(GitRevision revision, IReadOnlyList? return; } - int line = _clickedBlameLine is not null ? _clickedBlameLine.OriginLineNumber - : initialLine ?? (fileName == _fileName ? BlameFile.CurrentFileLine : 1); + CancellationToken cancellationToken = cancellationTokenSequence?.Next() ?? default; + _loading = true; + + int line = _clickedBlameLine?.OriginLineNumber ?? initialLine ?? (fileName == _fileName ? BlameFile.CurrentFileLine : 1); _revisionGridInfo = revisionGridInfo; _revisionGridUpdate = revisionGridUpdate; _fileName = fileName; @@ -135,7 +138,8 @@ public async Task LoadBlameAsync(GitRevision revision, IReadOnlyList? try { - await _blameLoader.LoadAsync(cancellationToken => _blame = Module.Blame(fileName, objectId.ToString(), encoding, lines: null, cancellationToken: cancellationToken), + await _blameLoader.LoadAsync( + loaderCancellationToken => _blame = Module.Blame(fileName, objectId.ToString(), encoding, lines: null, cancellationToken: loaderCancellationToken.CombineWith(cancellationToken).Token), () => ProcessBlame(fileName, revision, children, controlToMask, line, cancellationToken)); } catch (ExternalOperationException ex) @@ -143,6 +147,8 @@ await _blameLoader.LoadAsync(cancellationToken => _blame = Module.Blame(fileName _blame = null; await BlameFile.ViewTextAsync(fileName, ex.Message); } + + _loading = false; } private void commitInfo_CommandClicked(object sender, CommandEventArgs e) From 6ec52aaa25a141123b40eea8e2d5fcae60f891c6 Mon Sep 17 00:00:00 2001 From: Michael Seibt Date: Wed, 29 Jan 2025 19:58:47 +0100 Subject: [PATCH 5/6] build: Bump version to 5.2.1 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 453d6964089..b615dcb1564 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 5.2.0.{build} +version: 5.2.1.{build} branches: except: From 0d74cfdc312df90114a0cf8d6c8a30ca4213e2ff Mon Sep 17 00:00:00 2001 From: Michael Seibt Date: Wed, 29 Jan 2025 20:08:12 +0100 Subject: [PATCH 6/6] Update changelog --- src/app/GitUI/Resources/ChangeLog.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/app/GitUI/Resources/ChangeLog.md b/src/app/GitUI/Resources/ChangeLog.md index 7a80a375d08..07a9a3f53f4 100644 --- a/src/app/GitUI/Resources/ChangeLog.md +++ b/src/app/GitUI/Resources/ChangeLog.md @@ -1,6 +1,21 @@ Changelog ========= +### Version v5.2.1 (no due date) + +#### Changes: +* [#12171] fix(ShowProcessDialogPasswordInput): Default to false +* [#12165] fix(bare repo): Skip "git status" and "git stash list" +* [#12158] fix: Improve blame loading and other minor +* [#12143] fix(AheadBehindDataProvider): Restrict debug output + + +[#12171]:https://github.com/gitextensions/gitextensions/pull/12171 +[#12165]:https://github.com/gitextensions/gitextensions/pull/12165 +[#12158]:https://github.com/gitextensions/gitextensions/pull/12158 +[#12143]:https://github.com/gitextensions/gitextensions/pull/12143 + + ### Version v5.2 (no due date) #### Changes: