blob: c577ca85c9116ea5e552ba539e739a9c281c3df4 (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package chain
import (
"fmt"
"codeberg.org/lindenii/furgit/ref"
)
// List lists references from every backend and deduplicates by ref name.
//
// First-seen wins, so earlier backends have precedence.
func (chain *Chain) List(pattern string) ([]ref.Ref, error) {
var refs []ref.Ref
seen := map[string]struct{}{}
for i, backend := range chain.backends {
listed, err := backend.List(pattern)
if err != nil {
return nil, fmt.Errorf("refstore: backend %d list: %w", i, err)
}
for _, entry := range listed {
if entry == nil {
continue
}
name := entry.Name()
if _, ok := seen[name]; ok {
continue
}
seen[name] = struct{}{}
refs = append(refs, entry)
}
}
return refs, nil
}
|