Skip to content

Commit 6ee2d47

Browse files
authored
Ensure to use computed reference on copy (#572)
2 parents 1dba917 + c4f1560 commit 6ee2d47

2 files changed

Lines changed: 34 additions & 3 deletions

File tree

src/main/java/land/oras/CopyUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ void copy(
127127
// Index
128128
else if (source.isIndexMediaType(contentType)) {
129129

130-
Index index = source.getIndex(sourceRef);
131-
String tag = sourceRef.getTag();
130+
Index index = source.getIndex(effectiveSourceRef);
131+
String tag = effectiveSourceRef.getTag();
132132

133133
// Write all manifests and their config
134134
for (ManifestDescriptor manifestDescriptor : index.getManifests()) {
135-
Manifest manifest = source.getManifest(sourceRef.withDigest(manifestDescriptor.getDigest()));
135+
Manifest manifest = source.getManifest(effectiveSourceRef.withDigest(manifestDescriptor.getDigest()));
136136

137137
// Push config
138138
copyConfig(manifest, source, effectiveSourceRef, target, effectiveTargetRef);

src/test/java/land/oras/DockerIoITCase.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,35 @@ void shouldCopyTagToInternalRegistry() {
102102
CopyUtils.copy(sourceRegistry, containerSource, targetRegistry, containerTarget, true);
103103
assertTrue(targetRegistry.exists(containerTarget));
104104
}
105+
106+
@Test
107+
@Execution(ExecutionMode.SAME_THREAD)
108+
void shouldCopyTagToInternalRegistryViaAlias(@TempDir Path homeDir) throws Exception {
109+
110+
// language=toml
111+
String config =
112+
"""
113+
[aliases]
114+
"dockerhub-alpine" = "docker.io/library/alpine"
115+
""";
116+
TestUtils.createRegistriesConfFile(homeDir, config);
117+
118+
TestUtils.withHome(homeDir, () -> {
119+
// Source registry
120+
Registry sourceRegistry = Registry.Builder.builder().defaults().build();
121+
122+
// Copy to this internal registry
123+
Registry targetRegistry = Registry.Builder.builder()
124+
.defaults("myuser", "mypass")
125+
.withInsecure(true)
126+
.build();
127+
128+
ContainerRef containerSource = ContainerRef.parse("dockerhub-alpine");
129+
ContainerRef containerTarget =
130+
ContainerRef.parse("%s/docker/library/alpine:latest".formatted(unsecureRegistry.getRegistry()));
131+
132+
CopyUtils.copy(sourceRegistry, containerSource, targetRegistry, containerTarget, true);
133+
assertTrue(targetRegistry.exists(containerTarget));
134+
});
135+
}
105136
}

0 commit comments

Comments
 (0)