Skip to content

Commit fa02c65

Browse files
committed
code_review: PR #1153
- use a single filter for both unstage and staged files - show confirm dialog if staged files are displayed partially Signed-off-by: leo <[email protected]>
1 parent a37c6b2 commit fa02c65

File tree

9 files changed

+103
-143
lines changed

9 files changed

+103
-143
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,7 @@
719719
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Trigger click event</x:String>
720720
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">Commit (Edit)</x:String>
721721
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Stage all changes and commit</x:String>
722+
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithFilter">You have staged {0} file(s) but only {1} file(s) displayed ({2} files are filtered out). Do you want to continue?</x:String>
722723
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">Empty commit detected! Do you want to continue (--allow-empty)?</x:String>
723724
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">CONFLICTS DETECTED</x:String>
724725
<x:String x:Key="Text.WorkingCopy.Conflicts.Resolved" xml:space="preserve">FILE CONFLICTS ARE RESOLVED</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,7 @@
723723
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">触发点击事件</x:String>
724724
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">提交(修改原始提交)</x:String>
725725
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">自动暂存所有变更并提交</x:String>
726+
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithFilter">当前有 {0} 个文件在暂存区中,但仅显示了 {1} 个文件({2} 个文件被过滤掉了),是否继续提交?</x:String>
726727
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">提交未包含变更文件!是否继续(--allow-empty)?</x:String>
727728
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">检测到冲突</x:String>
728729
<x:String x:Key="Text.WorkingCopy.Conflicts.Resolved" xml:space="preserve">文件冲突已解决</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,7 @@
722722
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">觸發點擊事件</x:String>
723723
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">提交 (修改原始提交)</x:String>
724724
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">自動暫存全部變更並提交</x:String>
725+
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithFilter">您已暫存 {0} 檔案,但只顯示 {1} 檔案 ({2} 檔案被篩選器隱藏)。您要繼續嗎?</x:String>
725726
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">未包含任何檔案變更! 您是否仍要提交 (--allow-empty)?</x:String>
726727
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">檢測到衝突</x:String>
727728
<x:String x:Key="Text.WorkingCopy.Conflicts.Resolved" xml:space="preserve">檔案衝突已解決</x:String>

src/ViewModels/ConfirmCommit.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
3+
namespace SourceGit.ViewModels
4+
{
5+
public class ConfirmCommit
6+
{
7+
public string Message
8+
{
9+
get;
10+
private set;
11+
}
12+
13+
public ConfirmCommit(string message, Action onSure)
14+
{
15+
Message = message;
16+
_onSure = onSure;
17+
}
18+
19+
public void Continue()
20+
{
21+
_onSure?.Invoke();
22+
}
23+
24+
private Action _onSure;
25+
}
26+
}

src/ViewModels/ConfirmCommitWithoutFiles.cs

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/ViewModels/WorkingCopy.cs

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -99,38 +99,23 @@ public bool UseAmend
9999
}
100100
}
101101

102-
public string UnstagedFilter
102+
public string Filter
103103
{
104-
get => _unstagedFilter;
104+
get => _filter;
105105
set
106106
{
107-
if (SetProperty(ref _unstagedFilter, value))
107+
if (SetProperty(ref _filter, value))
108108
{
109109
if (_isLoadingData)
110110
return;
111111

112-
VisibleUnstaged = GetVisibleChanges(_unstaged, _unstagedFilter);
112+
VisibleUnstaged = GetVisibleChanges(_unstaged);
113+
VisibleStaged = GetVisibleChanges(_staged);
113114
SelectedUnstaged = [];
114115
}
115116
}
116117
}
117118

118-
public string StagedFilter
119-
{
120-
get => _stagedFilter;
121-
set
122-
{
123-
if (SetProperty(ref _stagedFilter, value))
124-
{
125-
if (_isLoadingData)
126-
return;
127-
128-
VisibleStaged = GetVisibleChanges(_staged, _stagedFilter);
129-
SelectedStaged = [];
130-
}
131-
}
132-
}
133-
134119
public List<Models.Change> Unstaged
135120
{
136121
get => _unstaged;
@@ -294,7 +279,7 @@ public void SetData(List<Models.Change> changes)
294279
}
295280
}
296281

297-
var visibleUnstaged = GetVisibleChanges(unstaged, _unstagedFilter);
282+
var visibleUnstaged = GetVisibleChanges(unstaged);
298283
var selectedUnstaged = new List<Models.Change>();
299284
foreach (var c in visibleUnstaged)
300285
{
@@ -304,7 +289,7 @@ public void SetData(List<Models.Change> changes)
304289

305290
var staged = GetStagedChanges();
306291

307-
var visibleStaged = GetVisibleChanges(staged, _stagedFilter);
292+
var visibleStaged = GetVisibleChanges(staged);
308293
var selectedStaged = new List<Models.Change>();
309294
foreach (var c in visibleStaged)
310295
{
@@ -374,14 +359,9 @@ public void Discard(List<Models.Change> changes)
374359
_repo.ShowPopup(new Discard(_repo, changes));
375360
}
376361

377-
public void ClearUnstagedFilter()
378-
{
379-
UnstagedFilter = string.Empty;
380-
}
381-
382-
public void ClearStagedFilter()
362+
public void ClearFilter()
383363
{
384-
StagedFilter = string.Empty;
364+
Filter = string.Empty;
385365
}
386366

387367
public async void UseTheirs(List<Models.Change> changes)
@@ -571,11 +551,6 @@ public void CommitWithPush()
571551
DoCommit(false, true, false);
572552
}
573553

574-
public void CommitWithoutFiles(bool autoPush)
575-
{
576-
DoCommit(false, autoPush, true);
577-
}
578-
579554
public ContextMenu CreateContextMenuForUnstagedChanges()
580555
{
581556
if (_selectedUnstaged == null || _selectedUnstaged.Count == 0)
@@ -1505,16 +1480,16 @@ public ContextMenu CreateContextForOpenAI()
15051480
return menu;
15061481
}
15071482

1508-
private List<Models.Change> GetVisibleChanges(List<Models.Change> changes, string filter)
1483+
private List<Models.Change> GetVisibleChanges(List<Models.Change> changes)
15091484
{
1510-
if (string.IsNullOrEmpty(filter))
1485+
if (string.IsNullOrEmpty(_filter))
15111486
return changes;
15121487

15131488
var visible = new List<Models.Change>();
15141489

15151490
foreach (var c in changes)
15161491
{
1517-
if (c.Path.Contains(filter, StringComparison.OrdinalIgnoreCase))
1492+
if (c.Path.Contains(_filter, StringComparison.OrdinalIgnoreCase))
15181493
visible.Add(c);
15191494
}
15201495

@@ -1675,18 +1650,25 @@ private void SetDetail(Models.Change change, bool isUnstaged)
16751650
DetailContext = new DiffContext(_repo.FullPath, new Models.DiffOption(change, isUnstaged), _detailContext as DiffContext);
16761651
}
16771652

1678-
private void DoCommit(bool autoStage, bool autoPush, bool allowEmpty)
1653+
private void DoCommit(bool autoStage, bool autoPush, bool allowEmpty = false, bool confirmWithFilter = false)
16791654
{
16801655
if (!_repo.CanCreatePopup())
16811656
{
16821657
App.RaiseException(_repo.FullPath, "Repository has unfinished job! Please wait!");
16831658
return;
16841659
}
16851660

1686-
if (!string.IsNullOrEmpty(_stagedFilter))
1661+
if (!string.IsNullOrEmpty(_filter) && _staged.Count > _visibleStaged.Count && !confirmWithFilter)
16871662
{
1688-
// FIXME - make this a proper warning message-box "Staged-area filter will not be applied to commit. Continue?" Yes/No
1689-
App.RaiseException(_repo.FullPath, "Committing with staged-area filter applied is NOT allowed!");
1663+
var confirmMessage = App.Text("WorkingCopy.ConfirmCommitWithFilter", _staged.Count, _visibleStaged.Count, _staged.Count - _visibleStaged.Count);
1664+
App.OpenDialog(new Views.ConfirmCommit()
1665+
{
1666+
DataContext = new ConfirmCommit(confirmMessage, () =>
1667+
{
1668+
DoCommit(autoStage, autoPush, allowEmpty, true);
1669+
})
1670+
});
1671+
16901672
return;
16911673
}
16921674

@@ -1700,9 +1682,13 @@ private void DoCommit(bool autoStage, bool autoPush, bool allowEmpty)
17001682
{
17011683
if ((autoStage && _count == 0) || (!autoStage && _staged.Count == 0))
17021684
{
1703-
App.OpenDialog(new Views.ConfirmCommitWithoutFiles()
1685+
var confirmMessage = App.Text("WorkingCopy.ConfirmCommitWithoutFiles");
1686+
App.OpenDialog(new Views.ConfirmCommit()
17041687
{
1705-
DataContext = new ConfirmCommitWithoutFiles(this, autoPush)
1688+
DataContext = new ConfirmCommit(confirmMessage, () =>
1689+
{
1690+
DoCommit(autoStage, autoPush, true, confirmWithFilter);
1691+
})
17061692
});
17071693

17081694
return;
@@ -1774,8 +1760,7 @@ private bool IsChanged(List<Models.Change> old, List<Models.Change> cur)
17741760
private List<Models.Change> _selectedStaged = [];
17751761
private int _count = 0;
17761762
private object _detailContext = null;
1777-
private string _unstagedFilter = string.Empty;
1778-
private string _stagedFilter = string.Empty;
1763+
private string _filter = string.Empty;
17791764
private string _commitMessage = string.Empty;
17801765

17811766
private bool _hasUnsolvedConflicts = false;

src/Views/ConfirmCommitWithoutFiles.axaml renamed to src/Views/ConfirmCommit.axaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
xmlns:v="using:SourceGit.Views"
66
xmlns:vm="using:SourceGit.ViewModels"
77
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
8-
x:Class="SourceGit.Views.ConfirmCommitWithoutFiles"
9-
x:DataType="vm:ConfirmCommitWithoutFiles"
8+
x:Class="SourceGit.Views.ConfirmCommit"
9+
x:DataType="vm:ConfirmCommit"
1010
x:Name="ThisControl"
1111
Icon="/App.ico"
1212
Title="{DynamicResource Text.Warn}"
@@ -38,7 +38,7 @@
3838

3939
<!-- Body -->
4040
<Border Grid.Row="1" Margin="16">
41-
<TextBlock Text="{DynamicResource Text.WorkingCopy.ConfirmCommitWithoutFiles}"/>
41+
<TextBlock Text="{Binding Message}" MaxWidth="400" TextWrapping="Wrap"/>
4242
</Border>
4343

4444
<!-- Buttons -->

src/Views/ConfirmCommitWithoutFiles.axaml.cs renamed to src/Views/ConfirmCommit.axaml.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22

33
namespace SourceGit.Views
44
{
5-
public partial class ConfirmCommitWithoutFiles : ChromelessWindow
5+
public partial class ConfirmCommit : ChromelessWindow
66
{
7-
public ConfirmCommitWithoutFiles()
7+
public ConfirmCommit()
88
{
99
InitializeComponent();
1010
}
1111

1212
private void Sure(object _1, RoutedEventArgs _2)
1313
{
14-
if (DataContext is ViewModels.ConfirmCommitWithoutFiles vm)
15-
{
16-
vm.Continue();
17-
}
18-
14+
(DataContext as ViewModels.ConfirmCommit)?.Continue();
1915
Close();
2016
}
2117

0 commit comments

Comments
 (0)