Merge pull request #1860 from Seb-Solon/master

Fix #1854
pull/1861/head
Richard Scothern 2016-07-22 10:04:01 -07:00 committed by GitHub
commit c2a201dabf
2 changed files with 43 additions and 4 deletions

View File

@ -39,7 +39,7 @@ func (reg *registry) Repositories(ctx context.Context, repos []string, last stri
_, file := path.Split(repoPath)
if file == "_layers" {
repoPath = strings.TrimSuffix(repoPath, "/_layers")
if repoPath > last {
if pathGreaterThan(repoPath, last) {
foundRepos = append(foundRepos, repoPath)
}
return ErrSkipDir
@ -95,3 +95,23 @@ func (reg *registry) Enumerate(ctx context.Context, ingester func(string) error)
return nil
}
func pathGreaterThan(pathX, pathY string) (b bool) {
splitPathX := strings.SplitN(pathX, "/", 2)
splitPathY := strings.SplitN(pathY, "/", 2)
if splitPathX[0] == splitPathY[0] {
if len(splitPathX) == 1 && len(splitPathY) == 1 {
return false
} else if len(splitPathX) == 1 && len(splitPathY) != 1 {
return false
} else if len(splitPathX) != 1 && len(splitPathY) == 1 {
return true
}
return pathGreaterThan(splitPathX[1], splitPathY[1])
}
return splitPathX[0] > splitPathY[0]
}

View File

@ -33,9 +33,13 @@ func setupFS(t *testing.T) *setupEnv {
repos := []string{
"foo/a",
"foo/b",
"foo-bar/a",
"bar/c",
"bar/d",
"bar/e",
"foo/d/in",
"foo-bar/b",
"test",
}
for _, repo := range repos {
@ -45,9 +49,13 @@ func setupFS(t *testing.T) *setupEnv {
expected := []string{
"bar/c",
"bar/d",
"bar/e",
"foo/a",
"foo/b",
"foo/d/in",
"foo-bar/a",
"foo-bar/b",
"test",
}
return &setupEnv{
@ -118,7 +126,7 @@ func TestCatalog(t *testing.T) {
func TestCatalogInParts(t *testing.T) {
env := setupFS(t)
chunkLen := 2
chunkLen := 3
p := make([]string, chunkLen)
numFilled, err := env.registry.Repositories(env.ctx, p, "")
@ -144,12 +152,23 @@ func TestCatalogInParts(t *testing.T) {
lastRepo = p[len(p)-1]
numFilled, err = env.registry.Repositories(env.ctx, p, lastRepo)
if err != io.EOF || numFilled != len(p) {
t.Errorf("Expected end of catalog")
}
if !testEq(p, env.expected[chunkLen*2:chunkLen*3], numFilled) {
t.Errorf("Expected catalog third chunk err")
}
lastRepo = p[len(p)-1]
numFilled, err = env.registry.Repositories(env.ctx, p, lastRepo)
if err != io.EOF {
t.Errorf("Catalog has more values which we aren't expecting")
}
if !testEq(p, env.expected[chunkLen*2:chunkLen*3-1], numFilled) {
t.Errorf("Expected catalog third chunk err")
if numFilled != 0 {
t.Errorf("Expected catalog fourth chunk err")
}
}