detached cda2c5a

fix(cli): avoid waitgroup go helper in route aggregation

commit
cda2c5a594c61b912e7576ca3e0423ca4840c5bb
author
brice · · 2026-05-22 04:34 UTC
parent
b9cf20d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +14 -12
M internal/adapters/in/cli/routes.go +14 -12
@@ -346,16 +346,17 @@ func collectRoutesListAggregateSections(ctx context.Context, cfgPath string, dep
346346 names := sortedRemoteNames(remotes.entries)
347347 remoteSections := make([]routeListSection, len(names))
348348 var wg sync.WaitGroup
349- for i := range names {
350- name := names[i]
349+ for i, name := range names {
351350 entry := remotes.entries[name]
352- wg.Go(func() {
353- section, err := deps.loadRemote(ctx, name, entry)
351+ wg.Add(1)
352+ go func(idx int, remoteName string, remoteEntry remote.RemoteEntry) {
353+ defer wg.Done()
354+ section, err := deps.loadRemote(ctx, remoteName, remoteEntry)
354355 if err != nil && section.Error == "" {
355356 section.Error = err.Error()
356357 }
357- remoteSections[i] = normalizeRouteListRemoteSection(section, name, entry)
358- })
358+ remoteSections[idx] = normalizeRouteListRemoteSection(section, remoteName, remoteEntry)
359+ }(i, name, entry)
359360 }
360361 wg.Wait()
361362
@@ -468,16 +469,17 @@ func collectRoutesStatusAggregateSections(ctx context.Context, cfgPath string, d
468469 names := sortedRemoteNames(remotes.entries)
469470 remoteSections := make([]routeStatusSection, len(names))
470471 var wg sync.WaitGroup
471- for i := range names {
472- name := names[i]
472+ for i, name := range names {
473473 entry := remotes.entries[name]
474- wg.Go(func() {
475- section, err := deps.loadRemote(ctx, name, entry)
474+ wg.Add(1)
475+ go func(idx int, remoteName string, remoteEntry remote.RemoteEntry) {
476+ defer wg.Done()
477+ section, err := deps.loadRemote(ctx, remoteName, remoteEntry)
476478 if err != nil && section.Error == "" {
477479 section.Error = err.Error()
478480 }
479- remoteSections[i] = normalizeRouteStatusRemoteSection(section, name, entry)
480- })
481+ remoteSections[idx] = normalizeRouteStatusRemoteSection(section, remoteName, remoteEntry)
482+ }(i, name, entry)
481483 }
482484 wg.Wait()
483485
@@ -346,16 +346,17 @@ func collectRoutesListAggregateSections(ctx context.Context, cfgPath string, dep
346 names := sortedRemoteNames(remotes.entries)346 names := sortedRemoteNames(remotes.entries)
347 remoteSections := make([]routeListSection, len(names))347 remoteSections := make([]routeListSection, len(names))
348 var wg sync.WaitGroup348 var wg sync.WaitGroup
349- for i := range names {349+ for i, name := range names {
350- name := names[i]
351 entry := remotes.entries[name]350 entry := remotes.entries[name]
352- wg.Go(func() {351+ wg.Add(1)
353- section, err := deps.loadRemote(ctx, name, entry)352+ go func(idx int, remoteName string, remoteEntry remote.RemoteEntry) {
353+ defer wg.Done()
354+ section, err := deps.loadRemote(ctx, remoteName, remoteEntry)
354 if err != nil && section.Error == "" {355 if err != nil && section.Error == "" {
355 section.Error = err.Error()356 section.Error = err.Error()
356 }357 }
357- remoteSections[i] = normalizeRouteListRemoteSection(section, name, entry)358+ remoteSections[idx] = normalizeRouteListRemoteSection(section, remoteName, remoteEntry)
358- })359+ }(i, name, entry)
359 }360 }
360 wg.Wait()361 wg.Wait()
361 362
@@ -468,16 +469,17 @@ func collectRoutesStatusAggregateSections(ctx context.Context, cfgPath string, d
468 names := sortedRemoteNames(remotes.entries)469 names := sortedRemoteNames(remotes.entries)
469 remoteSections := make([]routeStatusSection, len(names))470 remoteSections := make([]routeStatusSection, len(names))
470 var wg sync.WaitGroup471 var wg sync.WaitGroup
471- for i := range names {472+ for i, name := range names {
472- name := names[i]
473 entry := remotes.entries[name]473 entry := remotes.entries[name]
474- wg.Go(func() {474+ wg.Add(1)
475- section, err := deps.loadRemote(ctx, name, entry)475+ go func(idx int, remoteName string, remoteEntry remote.RemoteEntry) {
476+ defer wg.Done()
477+ section, err := deps.loadRemote(ctx, remoteName, remoteEntry)
476 if err != nil && section.Error == "" {478 if err != nil && section.Error == "" {
477 section.Error = err.Error()479 section.Error = err.Error()
478 }480 }
479- remoteSections[i] = normalizeRouteStatusRemoteSection(section, name, entry)481+ remoteSections[idx] = normalizeRouteStatusRemoteSection(section, remoteName, remoteEntry)
480- })482+ }(i, name, entry)
481 }483 }
482 wg.Wait()484 wg.Wait()
483 485

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close