refactor: Update submodules individually to avoid failures (#925) (#936)

* refactor: Update submodules individually to avoid failures (#925)

- Remove `--recurse-submodules` flag from the clone command to simplify the cloning process.
- Refactor submodule update logic to handle updating all submodules in a loop and improve progress description handling.

* fix: Parse submodule list even if submodule status fails (#935)
This commit is contained in:
GadflyFang 2025-02-06 10:08:12 +08:00 committed by GitHub
parent a4157e11e6
commit 3af6012561
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 17 deletions

View file

@ -12,7 +12,7 @@ namespace SourceGit.Commands
WorkingDirectory = path;
TraitErrorAsOutput = true;
SSHKey = sshKey;
Args = "clone --progress --verbose --recurse-submodules ";
Args = "clone --progress --verbose ";
if (!string.IsNullOrEmpty(extraArgs))
Args += $"{extraArgs} ";

View file

@ -24,8 +24,6 @@ namespace SourceGit.Commands
{
var submodules = new List<Models.Submodule>();
var rs = ReadToEnd();
if (!rs.IsSuccess)
return submodules;
var builder = new StringBuilder();
var lines = rs.StdOut.Split('\n', System.StringSplitOptions.RemoveEmptyEntries);

View file

@ -127,6 +127,14 @@ namespace SourceGit.ViewModels
config.Set("remote.origin.sshkey", _sshKey);
}
// individually update submodule (if any)
var submoduleList = new Commands.QuerySubmodules(path).Result();
foreach (var submodule in submoduleList)
{
var update = new Commands.Submodule(path);
update.Update(submodule.Path, true, true, false, SetProgressDescription);
}
CallUIThread(() =>
{
var node = Preferences.Instance.FindOrAddNodeByRepositoryPath(path, null, true);

View file

@ -56,25 +56,24 @@ namespace SourceGit.ViewModels
{
_repo.SetWatcherEnabled(false);
string target = string.Empty;
List<string> targets;
if (_updateAll)
{
ProgressDescription = "Updating submodules ...";
}
targets = Submodules;
else
{
target = SelectedSubmodule;
ProgressDescription = $"Updating submodule {target} ...";
}
targets = [SelectedSubmodule];
return Task.Run(() =>
{
foreach (var submodule in targets)
{
ProgressDescription = $"Updating submodule {submodule} ...";
new Commands.Submodule(_repo.FullPath).Update(
target,
submodule,
EnableInit,
EnableRecursive,
EnableRemote,
SetProgressDescription);
}
CallUIThread(() => _repo.SetWatcherEnabled(true));
return true;