Skip to content

Commit 937ad0c

Browse files
committed
feature: add Update Submodule context menu entry for selected submodule
Signed-off-by: leo <[email protected]>
1 parent c54b6c2 commit 937ad0c

File tree

6 files changed

+64
-21
lines changed

6 files changed

+64
-21
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@
753753
<x:String x:Key="Text.Submodule.Status.NotInited" xml:space="preserve">not initialized</x:String>
754754
<x:String x:Key="Text.Submodule.Status.RevisionChanged" xml:space="preserve">revision changed</x:String>
755755
<x:String x:Key="Text.Submodule.Status.Unmerged" xml:space="preserve">unmerged</x:String>
756+
<x:String x:Key="Text.Submodule.Update" xml:space="preserve">Update Submodule</x:String>
756757
<x:String x:Key="Text.Submodule.URL" xml:space="preserve">URL</x:String>
757758
<x:String x:Key="Text.Sure" xml:space="preserve">OK</x:String>
758759
<x:String x:Key="Text.TagCM.Copy" xml:space="preserve">Copy Tag Name</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,7 @@
757757
<x:String x:Key="Text.Submodule.Status.NotInited" xml:space="preserve">未初始化</x:String>
758758
<x:String x:Key="Text.Submodule.Status.RevisionChanged" xml:space="preserve">SHA变更</x:String>
759759
<x:String x:Key="Text.Submodule.Status.Unmerged" xml:space="preserve">未解决冲突</x:String>
760+
<x:String x:Key="Text.Submodule.Update" xml:space="preserve">更新子模块</x:String>
760761
<x:String x:Key="Text.Submodule.URL" xml:space="preserve">仓库</x:String>
761762
<x:String x:Key="Text.Sure" xml:space="preserve">确 定</x:String>
762763
<x:String x:Key="Text.TagCM.Copy" 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
@@ -757,6 +757,7 @@
757757
<x:String x:Key="Text.Submodule.Status.NotInited" xml:space="preserve">未初始化</x:String>
758758
<x:String x:Key="Text.Submodule.Status.RevisionChanged" xml:space="preserve">SHA 變更</x:String>
759759
<x:String x:Key="Text.Submodule.Status.Unmerged" xml:space="preserve">未解決的衝突</x:String>
760+
<x:String x:Key="Text.Submodule.Update" xml:space="preserve">更新子模組</x:String>
760761
<x:String x:Key="Text.Submodule.URL" xml:space="preserve">存放庫</x:String>
761762
<x:String x:Key="Text.Sure" xml:space="preserve">確 定</x:String>
762763
<x:String x:Key="Text.TagCM.Copy" xml:space="preserve">複製標籤名稱</x:String>

src/ViewModels/Repository.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1440,7 +1440,7 @@ public void AddSubmodule()
14401440
public void UpdateSubmodules()
14411441
{
14421442
if (CanCreatePopup())
1443-
ShowPopup(new UpdateSubmodules(this));
1443+
ShowPopup(new UpdateSubmodules(this, null));
14441444
}
14451445

14461446
public void OpenSubmodule(string submodule)
@@ -2556,6 +2556,16 @@ public ContextMenu CreateContextMenuForSubmodule(Models.Submodule submodule)
25562556
ev.Handled = true;
25572557
};
25582558

2559+
var update = new MenuItem();
2560+
update.Header = App.Text("Submodule.Update");
2561+
update.Icon = App.CreateMenuIcon("Icons.Loading");
2562+
update.Click += (_, ev) =>
2563+
{
2564+
if (CanCreatePopup())
2565+
ShowPopup(new UpdateSubmodules(this, submodule));
2566+
ev.Handled = true;
2567+
};
2568+
25592569
var move = new MenuItem();
25602570
move.Header = App.Text("Submodule.Move");
25612571
move.Icon = App.CreateMenuIcon("Icons.MoveTo");
@@ -2599,6 +2609,7 @@ public ContextMenu CreateContextMenuForSubmodule(Models.Submodule submodule)
25992609
var menu = new ContextMenu();
26002610
menu.Items.Add(open);
26012611
menu.Items.Add(new MenuItem() { Header = "-" });
2612+
menu.Items.Add(update);
26022613
menu.Items.Add(move);
26032614
menu.Items.Add(deinit);
26042615
menu.Items.Add(rm);

src/ViewModels/UpdateSubmodules.cs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ namespace SourceGit.ViewModels
55
{
66
public class UpdateSubmodules : Popup
77
{
8-
public List<string> Submodules
8+
public bool HasPreSelectedSubmodule
99
{
1010
get;
11-
} = [];
11+
}
1212

13-
public string SelectedSubmodule
13+
public List<Models.Submodule> Submodules
14+
{
15+
get => _repo.Submodules;
16+
}
17+
18+
public Models.Submodule SelectedSubmodule
1419
{
1520
get;
1621
set;
@@ -40,27 +45,42 @@ public bool EnableRemote
4045
set;
4146
} = false;
4247

43-
public UpdateSubmodules(Repository repo)
48+
public UpdateSubmodules(Repository repo, Models.Submodule selected)
4449
{
4550
_repo = repo;
4651

47-
foreach (var submodule in _repo.Submodules)
48-
Submodules.Add(submodule.Path);
49-
50-
SelectedSubmodule = Submodules.Count > 0 ? Submodules[0] : string.Empty;
52+
if (selected != null)
53+
{
54+
_updateAll = false;
55+
SelectedSubmodule = selected;
56+
EnableInit = selected.Status == Models.SubmoduleStatus.NotInited;
57+
HasPreSelectedSubmodule = true;
58+
}
59+
else if (repo.Submodules.Count > 0)
60+
{
61+
SelectedSubmodule = repo.Submodules[0];
62+
HasPreSelectedSubmodule = false;
63+
}
5164
}
5265

5366
public override async Task<bool> Sure()
5467
{
55-
_repo.SetWatcherEnabled(false);
56-
57-
List<string> targets;
68+
var targets = new List<string>();
5869
if (_updateAll)
59-
targets = Submodules;
60-
else
61-
targets = [SelectedSubmodule];
70+
{
71+
foreach (var submodule in Submodules)
72+
targets.Add(submodule.Path);
73+
}
74+
else if (SelectedSubmodule != null)
75+
{
76+
targets.Add(SelectedSubmodule.Path);
77+
}
78+
79+
if (targets.Count == 0)
80+
return true;
6281

6382
var log = _repo.CreateLog("Update Submodule");
83+
_repo.SetWatcherEnabled(false);
6484
Use(log);
6585

6686
await new Commands.Submodule(_repo.FullPath)

src/Views/UpdateSubmodules.axaml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:m="using:SourceGit.Models"
56
xmlns:vm="using:SourceGit.ViewModels"
67
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
78
x:Class="SourceGit.Views.UpdateSubmodules"
@@ -10,7 +11,7 @@
1011
<TextBlock FontSize="18"
1112
Classes="bold"
1213
Text="{DynamicResource Text.UpdateSubmodules}"/>
13-
<Grid Margin="0,16,0,0" RowDefinitions="32,32,32,32,32" ColumnDefinitions="120,*">
14+
<Grid Margin="0,16,0,0" RowDefinitions="32,Auto,32,32,32" ColumnDefinitions="120,*">
1415
<TextBlock Grid.Row="0" Grid.Column="0"
1516
HorizontalAlignment="Right" VerticalAlignment="Center"
1617
Margin="0,0,8,0"
@@ -19,21 +20,29 @@
1920
Height="28" Padding="8,0"
2021
VerticalAlignment="Center" HorizontalAlignment="Stretch"
2122
ItemsSource="{Binding Submodules}"
22-
SelectedItem="{Binding SelectedSubmodule, Mode=TwoWay}"
23-
IsEnabled="{Binding !UpdateAll}">
23+
SelectedItem="{Binding SelectedSubmodule, Mode=TwoWay}">
24+
<ComboBox.IsEnabled>
25+
<MultiBinding Converter="{x:Static BoolConverters.And}">
26+
<Binding Path="UpdateAll" Converter="{x:Static BoolConverters.Not}"/>
27+
<Binding Path="HasPreSelectedSubmodule" Converter="{x:Static BoolConverters.Not}"/>
28+
</MultiBinding>
29+
</ComboBox.IsEnabled>
30+
2431
<ComboBox.ItemTemplate>
25-
<DataTemplate x:DataType="x:String">
32+
<DataTemplate x:DataType="m:Submodule">
2633
<StackPanel Orientation="Horizontal" Height="20" VerticalAlignment="Center">
2734
<Path Margin="0,0,8,0" Width="14" Height="14" Fill="{DynamicResource Brush.FG1}" Data="{StaticResource Icons.Submodule}"/>
28-
<TextBlock Text="{Binding}"/>
35+
<TextBlock Text="{Binding Path, Mode=OneWay}"/>
2936
</StackPanel>
3037
</DataTemplate>
3138
</ComboBox.ItemTemplate>
3239
</ComboBox>
3340

3441
<CheckBox Grid.Row="1" Grid.Column="1"
42+
Height="32"
3543
Content="{DynamicResource Text.UpdateSubmodules.All}"
36-
IsChecked="{Binding UpdateAll, Mode=TwoWay}"/>
44+
IsChecked="{Binding UpdateAll, Mode=TwoWay}"
45+
IsVisible="{Binding !HasPreSelectedSubmodule, Mode=OneWay}"/>
3746

3847
<CheckBox Grid.Row="2" Grid.Column="1"
3948
Content="{DynamicResource Text.UpdateSubmodules.Init}"

0 commit comments

Comments
 (0)