1
0
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:
Riyaz Faizullabhoy
2016-06-10 09:50:03 -07:00
parent c48b4faf29
commit bfbce57560
2 changed files with 13 additions and 13 deletions

View File

@@ -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

View File

@@ -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")