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; WorkingDirectory = path;
TraitErrorAsOutput = true; TraitErrorAsOutput = true;
SSHKey = sshKey; SSHKey = sshKey;
Args = "clone --progress --verbose --recurse-submodules "; Args = "clone --progress --verbose ";
if (!string.IsNullOrEmpty(extraArgs)) if (!string.IsNullOrEmpty(extraArgs))
Args += $"{extraArgs} "; Args += $"{extraArgs} ";

View file

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

View file

@ -127,6 +127,14 @@ namespace SourceGit.ViewModels
config.Set("remote.origin.sshkey", _sshKey); 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(() => CallUIThread(() =>
{ {
var node = Preferences.Instance.FindOrAddNodeByRepositoryPath(path, null, true); var node = Preferences.Instance.FindOrAddNodeByRepositoryPath(path, null, true);

View file

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