changelog generator & diff tool
stormlightlabs.github.io/git-storm/
changelog
changeset
markdown
golang
git
1package main
2
3import (
4 "fmt"
5
6 "github.com/stormlightlabs/git-storm/internal/toolchain"
7)
8
9func updateToolchainTargets(repoPath, newVersion string, selectors []string) ([]toolchain.Manifest, error) {
10 if len(selectors) == 0 {
11 return nil, nil
12 }
13
14 selected, interactive, available, err := toolchain.ResolveTargets(repoPath, selectors)
15 if err != nil {
16 return nil, err
17 }
18
19 if interactive {
20 if len(available) == 0 {
21 return nil, fmt.Errorf("no toolchain manifests detected for interactive selection")
22 }
23 chosen, err := toolchain.SelectManifests(available)
24 if err != nil {
25 return nil, err
26 }
27 selected = append(selected, chosen...)
28 }
29
30 selected = dedupeManifests(selected)
31 if len(selected) == 0 {
32 return nil, nil
33 }
34
35 for _, manifest := range selected {
36 if err := toolchain.UpdateManifest(manifest, newVersion); err != nil {
37 return nil, err
38 }
39 }
40
41 return selected, nil
42}
43
44func dedupeManifests(manifests []toolchain.Manifest) []toolchain.Manifest {
45 if len(manifests) == 0 {
46 return nil
47 }
48
49 seen := make(map[string]struct{})
50 var result []toolchain.Manifest
51 for _, manifest := range manifests {
52 key := manifest.Path
53 if _, ok := seen[key]; ok {
54 continue
55 }
56 seen[key] = struct{}{}
57 result = append(result, manifest)
58 }
59 return result
60}