diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index f921e0f9..33f13d9f 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -753,6 +753,7 @@
not initialized
revision changed
unmerged
+ Update Submodule
URL
OK
Copy Tag Name
diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml
index 4afd4b0b..861e2f30 100644
--- a/src/Resources/Locales/zh_CN.axaml
+++ b/src/Resources/Locales/zh_CN.axaml
@@ -757,6 +757,7 @@
未初始化
SHA变更
未解决冲突
+ 更新子模块
仓库
确 定
复制标签名
diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml
index dbad3d6a..e3e6a94c 100644
--- a/src/Resources/Locales/zh_TW.axaml
+++ b/src/Resources/Locales/zh_TW.axaml
@@ -757,6 +757,7 @@
未初始化
SHA 變更
未解決的衝突
+ 更新子模組
存放庫
確 定
複製標籤名稱
diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs
index 783b923e..d3303538 100644
--- a/src/ViewModels/Repository.cs
+++ b/src/ViewModels/Repository.cs
@@ -1440,7 +1440,7 @@ namespace SourceGit.ViewModels
public void UpdateSubmodules()
{
if (CanCreatePopup())
- ShowPopup(new UpdateSubmodules(this));
+ ShowPopup(new UpdateSubmodules(this, null));
}
public void OpenSubmodule(string submodule)
@@ -2556,6 +2556,16 @@ namespace SourceGit.ViewModels
ev.Handled = true;
};
+ var update = new MenuItem();
+ update.Header = App.Text("Submodule.Update");
+ update.Icon = App.CreateMenuIcon("Icons.Loading");
+ update.Click += (_, ev) =>
+ {
+ if (CanCreatePopup())
+ ShowPopup(new UpdateSubmodules(this, submodule));
+ ev.Handled = true;
+ };
+
var move = new MenuItem();
move.Header = App.Text("Submodule.Move");
move.Icon = App.CreateMenuIcon("Icons.MoveTo");
@@ -2599,6 +2609,7 @@ namespace SourceGit.ViewModels
var menu = new ContextMenu();
menu.Items.Add(open);
menu.Items.Add(new MenuItem() { Header = "-" });
+ menu.Items.Add(update);
menu.Items.Add(move);
menu.Items.Add(deinit);
menu.Items.Add(rm);
diff --git a/src/ViewModels/UpdateSubmodules.cs b/src/ViewModels/UpdateSubmodules.cs
index 4aec0e79..78bb1feb 100644
--- a/src/ViewModels/UpdateSubmodules.cs
+++ b/src/ViewModels/UpdateSubmodules.cs
@@ -5,12 +5,17 @@ namespace SourceGit.ViewModels
{
public class UpdateSubmodules : Popup
{
- public List Submodules
+ public bool HasPreSelectedSubmodule
{
get;
- } = [];
+ }
- public string SelectedSubmodule
+ public List Submodules
+ {
+ get => _repo.Submodules;
+ }
+
+ public Models.Submodule SelectedSubmodule
{
get;
set;
@@ -40,27 +45,42 @@ namespace SourceGit.ViewModels
set;
} = false;
- public UpdateSubmodules(Repository repo)
+ public UpdateSubmodules(Repository repo, Models.Submodule selected)
{
_repo = repo;
- foreach (var submodule in _repo.Submodules)
- Submodules.Add(submodule.Path);
-
- SelectedSubmodule = Submodules.Count > 0 ? Submodules[0] : string.Empty;
+ if (selected != null)
+ {
+ _updateAll = false;
+ SelectedSubmodule = selected;
+ EnableInit = selected.Status == Models.SubmoduleStatus.NotInited;
+ HasPreSelectedSubmodule = true;
+ }
+ else if (repo.Submodules.Count > 0)
+ {
+ SelectedSubmodule = repo.Submodules[0];
+ HasPreSelectedSubmodule = false;
+ }
}
public override async Task Sure()
{
- _repo.SetWatcherEnabled(false);
-
- List targets;
+ var targets = new List();
if (_updateAll)
- targets = Submodules;
- else
- targets = [SelectedSubmodule];
+ {
+ foreach (var submodule in Submodules)
+ targets.Add(submodule.Path);
+ }
+ else if (SelectedSubmodule != null)
+ {
+ targets.Add(SelectedSubmodule.Path);
+ }
+
+ if (targets.Count == 0)
+ return true;
var log = _repo.CreateLog("Update Submodule");
+ _repo.SetWatcherEnabled(false);
Use(log);
await new Commands.Submodule(_repo.FullPath)
diff --git a/src/Views/UpdateSubmodules.axaml b/src/Views/UpdateSubmodules.axaml
index f189b80d..2b732036 100644
--- a/src/Views/UpdateSubmodules.axaml
+++ b/src/Views/UpdateSubmodules.axaml
@@ -2,6 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:m="using:SourceGit.Models"
xmlns:vm="using:SourceGit.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="SourceGit.Views.UpdateSubmodules"
@@ -10,7 +11,7 @@
-
+
+ SelectedItem="{Binding SelectedSubmodule, Mode=TwoWay}">
+
+
+
+
+
+
+
-
+
-
+
+ IsChecked="{Binding UpdateAll, Mode=TwoWay}"
+ IsVisible="{Binding !HasPreSelectedSubmodule, Mode=OneWay}"/>