mirror of
https://github.com/docker/docs.git
synced 2026-11-05 00:14:17 +03:00
Change target info API from list to map return
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
This commit is contained in:
@@ -463,13 +463,13 @@ func (r *NotaryRepository) GetTargetByName(name string, roles ...string) (*Targe
|
||||
}
|
||||
|
||||
// GetAllTargetMetadataByName searches the entire delegation role tree to find the specified target by name for all
|
||||
// roles, and returns a list of TargetWithRole structs for each time it finds the specified target.
|
||||
func (r *NotaryRepository) GetAllTargetMetadataByName(name string) ([]*TargetWithRole, error) {
|
||||
// roles, and returns a map of role strings to Target structs for each time it finds the specified target.
|
||||
func (r *NotaryRepository) GetAllTargetMetadataByName(name string) (map[string]Target, error) {
|
||||
if err := r.Update(false); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var targetInfo []*TargetWithRole
|
||||
targetInfoMap := make(map[string]Target)
|
||||
|
||||
// Define a visitor function to find the specified target
|
||||
getAllTargetInfoByNameVisitorFunc := func(tgt *data.SignedTargets, validRole data.DelegationRole) interface{} {
|
||||
@@ -479,7 +479,7 @@ func (r *NotaryRepository) GetAllTargetMetadataByName(name string) ([]*TargetWit
|
||||
// We found the target and validated path compatibility in our walk,
|
||||
// so add it to our list
|
||||
if resultMeta, foundTarget := tgt.Signed.Targets[name]; foundTarget {
|
||||
targetInfo = append(targetInfo, &TargetWithRole{Target: Target{Name: name, Hashes: resultMeta.Hashes, Length: resultMeta.Length}, Role: validRole.Name})
|
||||
targetInfoMap[validRole.Name] = Target{Name: name, Hashes: resultMeta.Hashes, Length: resultMeta.Length}
|
||||
}
|
||||
// continue walking to all child roles
|
||||
return nil
|
||||
@@ -489,10 +489,10 @@ func (r *NotaryRepository) GetAllTargetMetadataByName(name string) ([]*TargetWit
|
||||
if err := r.tufRepo.WalkTargets(name, "", getAllTargetInfoByNameVisitorFunc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(targetInfo) == 0 {
|
||||
if len(targetInfoMap) == 0 {
|
||||
return nil, fmt.Errorf("No trust data for %s", name)
|
||||
}
|
||||
return targetInfo, nil
|
||||
return targetInfoMap, nil
|
||||
}
|
||||
|
||||
// GetChangelist returns the list of the repository's unpublished changes
|
||||
|
||||
@@ -3491,28 +3491,28 @@ func TestGetAllTargetInfo(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, targetData)
|
||||
require.Len(t, targetData, 3)
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *targetsCurrentTarget, Role: data.CanonicalTargetsRole})
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *level1CurrentTarget, Role: "targets/level1"})
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *level2CurrentTarget, Role: "targets/level2"})
|
||||
require.Equal(t, targetData[data.CanonicalTargetsRole], *targetsCurrentTarget)
|
||||
require.Equal(t, targetData["targets/level1"], *level1CurrentTarget)
|
||||
require.Equal(t, targetData["targets/level2"], *level2CurrentTarget)
|
||||
|
||||
targetData, err = repo.GetAllTargetMetadataByName("other")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, targetData)
|
||||
require.Len(t, targetData, 1)
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *level1OtherTarget, Role: "targets/level1"})
|
||||
require.Equal(t, targetData["targets/level1"], *level1OtherTarget)
|
||||
|
||||
targetData, err = repo.GetAllTargetMetadataByName("latest")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, targetData)
|
||||
require.Len(t, targetData, 1)
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *targetsLatestTarget, Role: data.CanonicalTargetsRole})
|
||||
require.Equal(t, targetData[data.CanonicalTargetsRole], *targetsLatestTarget)
|
||||
|
||||
targetData, err = repo.GetAllTargetMetadataByName("level2")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, targetData)
|
||||
require.Len(t, targetData, 2)
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *level2Level2Target, Role: "targets/level2"})
|
||||
require.Contains(t, targetData, &TargetWithRole{Target: *level1Level2Level2Target, Role: "targets/level1/level2"})
|
||||
require.Equal(t, targetData["targets/level2"], *level2Level2Target)
|
||||
require.Equal(t, targetData["targets/level1/level2"], *level1Level2Level2Target)
|
||||
|
||||
// nonexistent targets
|
||||
targetData, err = repo.GetAllTargetMetadataByName("level23")
|
||||
|
||||
Reference in New Issue
Block a user