This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / spindle / secret_copy.go
994 B 39 lines
1package spindle 2 3import ( 4 "context" 5 "errors" 6 "fmt" 7 8 "tangled.org/core/spindle/secrets" 9) 10 11func copyRepoSecrets(ctx context.Context, mgr secrets.Manager, src, dst secrets.RepoIdentifier) (int, error) { 12 cur, err := mgr.GetSecretsUnlocked(ctx, src) 13 if err != nil { 14 return 0, fmt.Errorf("get %s: %w", src, err) 15 } 16 var step func(remaining []secrets.UnlockedSecret, copied int) (int, error) 17 step = func(remaining []secrets.UnlockedSecret, copied int) (int, error) { 18 if len(remaining) == 0 { 19 return copied, nil 20 } 21 s := remaining[0] 22 addErr := mgr.AddSecret(ctx, secrets.UnlockedSecret{ 23 Repo: dst, 24 Key: s.Key, 25 Value: s.Value, 26 CreatedAt: s.CreatedAt, 27 CreatedBy: s.CreatedBy, 28 }) 29 switch { 30 case addErr == nil: 31 return step(remaining[1:], copied+1) 32 case errors.Is(addErr, secrets.ErrKeyAlreadyPresent): 33 return step(remaining[1:], copied) 34 default: 35 return copied, fmt.Errorf("add %s/%s: %w", dst, s.Key, addErr) 36 } 37 } 38 return step(cur, 0) 39}