storage: correctly handle error during Walk
Signed-off-by: Stephen J Day <stephen.day@docker.com>master
							parent
							
								
									329c353411
								
							
						
					
					
						commit
						6ad10796ef
					
				|  | @ -38,7 +38,9 @@ func Walk(ctx context.Context, driver storageDriver.StorageDriver, from string, | |||
| 		} | ||||
| 
 | ||||
| 		if fileInfo.IsDir() && !skipDir { | ||||
| 			Walk(ctx, driver, child, f) | ||||
| 			if err := Walk(ctx, driver, child, f); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
|  |  | |||
|  | @ -41,10 +41,12 @@ func TestWalkErrors(t *testing.T) { | |||
| 		t.Error("Expected invalid root err") | ||||
| 	} | ||||
| 
 | ||||
| 	errEarlyExpected := fmt.Errorf("Early termination") | ||||
| 
 | ||||
| 	err = Walk(ctx, d, "/", func(fileInfo driver.FileInfo) error { | ||||
| 		// error on the 2nd file
 | ||||
| 		if fileInfo.Path() == "/a/b" { | ||||
| 			return fmt.Errorf("Early termination") | ||||
| 			return errEarlyExpected | ||||
| 		} | ||||
| 		delete(expected, fileInfo.Path()) | ||||
| 		return nil | ||||
|  | @ -52,8 +54,12 @@ func TestWalkErrors(t *testing.T) { | |||
| 	if len(expected) != fileCount-1 { | ||||
| 		t.Error("Walk failed to terminate with error") | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		t.Error(err.Error()) | ||||
| 	if err != errEarlyExpected { | ||||
| 		if err == nil { | ||||
| 			t.Fatalf("expected an error due to early termination") | ||||
| 		} else { | ||||
| 			t.Error(err.Error()) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	err = Walk(ctx, d, "/nonexistant", func(fileInfo driver.FileInfo) error { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue