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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package receivepack
import (
"errors"
common "codeberg.org/lindenii/furgit/protocol/v0v1/server"
"codeberg.org/lindenii/furgit/ref"
"codeberg.org/lindenii/furgit/refstore"
)
func advertisedRefs(opts Options) ([]common.AdvertisedRef, error) {
listed, err := opts.Refs.List("")
if err != nil {
return nil, err
}
return buildAdvertisedRefs(opts, listed)
}
func buildAdvertisedRefs(opts Options, listed []ref.Ref) ([]common.AdvertisedRef, error) {
refs := make([]common.AdvertisedRef, 0, len(listed))
for _, entry := range listed {
switch resolved := entry.(type) {
case ref.Detached:
advertised := common.AdvertisedRef{
Name: resolved.Name(),
ID: resolved.ID,
}
if resolved.Peeled != nil {
advertised.Peeled = resolved.Peeled
}
refs = append(refs, advertised)
case ref.Symbolic:
if resolved.Name() != "HEAD" {
continue
}
head, err := opts.Refs.ResolveToDetached("HEAD")
if err != nil {
if errors.Is(err, refstore.ErrReferenceNotFound) {
continue
}
return nil, err
}
refs = append(refs, common.AdvertisedRef{
Name: "HEAD",
ID: head.ID,
})
}
}
return refs, nil
}
|