Skip to content

Commit 212a0df

Browse files
committed
show skipped repositories
1 parent 27fc219 commit 212a0df

2 files changed

Lines changed: 44 additions & 17 deletions

File tree

‎src/ViewModels/Launcher.cs‎

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ public async Task FetchAllRepositoriesAsync()
133133
var total = 0;
134134
var succeeded = 0;
135135
var noRemoteNames = new List<string>();
136+
var skippedNames = new List<string>();
136137
var failedNames = new List<string>();
137138

138139
foreach (var page in pages)
@@ -147,17 +148,31 @@ public async Task FetchAllRepositoriesAsync()
147148
}
148149

149150
total++;
150-
if (await repo.FetchAllRemotesAsync())
151-
succeeded++;
152-
else
153-
failedNames.Add(page.Node.Name);
151+
var result = await repo.FetchAllRemotesAsync();
152+
switch (result.Status)
153+
{
154+
case Repository.FetchAllStatus.Succeeded:
155+
succeeded++;
156+
break;
157+
case Repository.FetchAllStatus.Skipped:
158+
skippedNames.Add(page.Node.Name);
159+
total--;
160+
break;
161+
case Repository.FetchAllStatus.Failed:
162+
var remotesInfo = string.Join(", ", result.FailedRemotes);
163+
failedNames.Add($"{page.Node.Name} (remote: {remotesInfo})");
164+
break;
165+
}
154166
}
155167

156168
var message = $"Fetched {succeeded}/{total} repositories";
157169

158170
if (noRemoteNames.Count > 0)
159171
message += $"\n{noRemoteNames.Count} repositories skipped (no remote):\n {string.Join("\n ", noRemoteNames)}";
160172

173+
if (skippedNames.Count > 0)
174+
message += $"\n{skippedNames.Count} repositories skipped:\n {string.Join("\n ", skippedNames)}";
175+
161176
if (failedNames.Count > 0)
162177
message += $"\n{failedNames.Count} repositories failed:\n {string.Join("\n ", failedNames)}";
163178

‎src/ViewModels/Repository.cs‎

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -650,44 +650,56 @@ public async Task FetchAsync(bool autoStart)
650650
ShowPopup(new Fetch(this));
651651
}
652652

653-
public async Task<bool> FetchAllRemotesAsync()
653+
public enum FetchAllStatus
654654
{
655+
Succeeded,
656+
Failed,
657+
Skipped,
658+
}
659+
660+
public class FetchAllRemotesResult
661+
{
662+
public FetchAllStatus Status { get; set; } = FetchAllStatus.Succeeded;
663+
public List<string> FailedRemotes { get; } = new List<string>();
664+
}
665+
666+
public async Task<FetchAllRemotesResult> FetchAllRemotesAsync()
667+
{
668+
var result = new FetchAllRemotesResult();
669+
655670
if (IsAutoFetching)
656-
return false;
671+
{
672+
result.Status = FetchAllStatus.Skipped;
673+
return result;
674+
}
657675

658676
CommandLog log = null;
659-
var succeeded = true;
660677

661678
try
662679
{
663-
var lockFile = Path.Combine(GitDir, "index.lock");
664-
if (File.Exists(lockFile))
665-
return false;
666-
667-
if (_remotes.Count == 0)
668-
return false;
669-
670680
IsAutoFetching = true;
671681
log = CreateLog("Fetch");
672682

673683
foreach (var remote in _remotes)
674684
{
675685
var succ = await new Commands.Fetch(FullPath, remote).Use(log).ExecAsync();
676686
if (!succ)
677-
succeeded = false;
687+
result.FailedRemotes.Add(remote.Name);
678688
}
679689

680690
_lastFetchTime = DateTime.Now;
681691
}
682692
catch
683693
{
684694
// Ignore all exceptions.
685-
succeeded = false;
695+
result.FailedRemotes.Add("*");
686696
}
687697

688698
IsAutoFetching = false;
689699
log?.Complete();
690-
return succeeded;
700+
701+
result.Status = result.FailedRemotes.Count == 0 ? FetchAllStatus.Succeeded : FetchAllStatus.Failed;
702+
return result;
691703
}
692704

693705
public async Task PullAsync(bool autoStart)

0 commit comments

Comments
 (0)