detached 9adcbdc

refactor(filesystem): extract digest filtering into helper function

- Create filterOutDigests helper to reduce code duplication
- Apply helper to both updateTagsList and removeFromTagsList
- Improves maintainability and reduces duplication per code review
commit
9adcbdc953cee792d01c6529ab749bbe04652f01
author
brice · · 2026-02-03 06:56 UTC
parent
96bcae5
signature
unsigned
1 file · +13 -16
M internal/adapters/out/filesystem/manifest.go +13 -16
@@ -303,6 +303,17 @@ func (s *ManifestStorage) deleteManifestContentType(name, reference string) erro
303303
304304 // Tags management helpers
305305
306+// filterOutDigests removes digest entries from a tag list.
307+func filterOutDigests(tags []string) []string {
308+ filtered := make([]string, 0, len(tags))
309+ for _, tag := range tags {
310+ if !validation.IsDigest(tag) {
311+ filtered = append(filtered, tag)
312+ }
313+ }
314+ return filtered
315+}
316+
306317 func (s *ManifestStorage) updateTagsList(name, reference string) error {
307318 if validation.IsDigest(reference) {
308319 return nil
@@ -313,14 +324,7 @@ func (s *ManifestStorage) updateTagsList(name, reference string) error {
313324 return err
314325 }
315326
316- // Drop any legacy digest entries before persisting
317- filtered := make([]string, 0, len(tags))
318- for _, tag := range tags {
319- if !validation.IsDigest(tag) {
320- filtered = append(filtered, tag)
321- }
322- }
323- tags = filtered
327+ tags = filterOutDigests(tags)
324328
325329 // Add tag if not already present
326330 for _, tag := range tags {
@@ -339,14 +343,7 @@ func (s *ManifestStorage) removeFromTagsList(name, reference string) error {
339343 return err
340344 }
341345
342- // Drop any legacy digest entries before persisting
343- filtered := make([]string, 0, len(tags))
344- for _, tag := range tags {
345- if !validation.IsDigest(tag) {
346- filtered = append(filtered, tag)
347- }
348- }
349- tags = filtered
346+ tags = filterOutDigests(tags)
350347
351348 // Remove tag if present
352349 var newTags []string
@@ -303,6 +303,17 @@ func (s *ManifestStorage) deleteManifestContentType(name, reference string) erro
303 303
304 // Tags management helpers304 // Tags management helpers
305 305
306+// filterOutDigests removes digest entries from a tag list.
307+func filterOutDigests(tags []string) []string {
308+ filtered := make([]string, 0, len(tags))
309+ for _, tag := range tags {
310+ if !validation.IsDigest(tag) {
311+ filtered = append(filtered, tag)
312+ }
313+ }
314+ return filtered
315+}
316+
306 func (s *ManifestStorage) updateTagsList(name, reference string) error {317 func (s *ManifestStorage) updateTagsList(name, reference string) error {
307 if validation.IsDigest(reference) {318 if validation.IsDigest(reference) {
308 return nil319 return nil
@@ -313,14 +324,7 @@ func (s *ManifestStorage) updateTagsList(name, reference string) error {
313 return err324 return err
314 }325 }
315 326
316- // Drop any legacy digest entries before persisting327+ tags = filterOutDigests(tags)
317- filtered := make([]string, 0, len(tags))
318- for _, tag := range tags {
319- if !validation.IsDigest(tag) {
320- filtered = append(filtered, tag)
321- }
322- }
323- tags = filtered
324 328
325 // Add tag if not already present329 // Add tag if not already present
326 for _, tag := range tags {330 for _, tag := range tags {
@@ -339,14 +343,7 @@ func (s *ManifestStorage) removeFromTagsList(name, reference string) error {
339 return err343 return err
340 }344 }
341 345
342- // Drop any legacy digest entries before persisting346+ tags = filterOutDigests(tags)
343- filtered := make([]string, 0, len(tags))
344- for _, tag := range tags {
345- if !validation.IsDigest(tag) {
346- filtered = append(filtered, tag)
347- }
348- }
349- tags = filtered
350 347
351 // Remove tag if present348 // Remove tag if present
352 var newTags []string349 var newTags []string

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