Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit dd0de7c

Browse files
authored
Handle repoNames with tags (#2128)
Fixes #2127
1 parent a1243d6 commit dd0de7c

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

docker-java-core/src/main/java/com/github/dockerjava/core/NameParser.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ private NameParser() {
2222
private static final int RepositoryNameTotalLengthMax = 255;
2323

2424
private static final String SHA256_SEPARATOR = "@sha256:";
25+
private static final String COLON_SEPARATOR = ":";
2526

2627
private static final Pattern RepositoryNameComponentRegexp = Pattern.compile("[a-z0-9]+(?:[._-][a-z0-9]+)*");
2728

@@ -106,6 +107,13 @@ public static HostnameReposName resolveRepositoryName(String reposName) {
106107
String[] nameParts = reposName.split("/", 2);
107108
if (nameParts.length == 1
108109
|| (!nameParts[0].contains(".") && !nameParts[0].contains(":") && !nameParts[0].equals("localhost"))) {
110+
if (StringUtils.containsIgnoreCase(reposName, SHA256_SEPARATOR)) {
111+
reposName = StringUtils.substringBeforeLast(reposName, SHA256_SEPARATOR);
112+
}
113+
114+
if (StringUtils.contains(reposName, COLON_SEPARATOR)) {
115+
reposName = StringUtils.substringBeforeLast(reposName, COLON_SEPARATOR);
116+
}
109117
return new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, reposName);
110118
}
111119

@@ -119,6 +127,10 @@ public static HostnameReposName resolveRepositoryName(String reposName) {
119127
reposName = StringUtils.substringBeforeLast(reposName, SHA256_SEPARATOR);
120128
}
121129

130+
if (StringUtils.contains(reposName, COLON_SEPARATOR)) {
131+
reposName = StringUtils.substringBeforeLast(reposName, COLON_SEPARATOR);
132+
}
133+
122134
validateRepoName(reposName);
123135
return new HostnameReposName(hostname, reposName);
124136
}

docker-java/src/test/java/com/github/dockerjava/core/NameParserTest.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ public void testResolveSimpleRepositoryName() {
8383
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
8484
}
8585

86+
@Test
87+
public void testResolveRepositoryNameWithTag() {
88+
HostnameReposName resolved = NameParser.resolveRepositoryName("repository:tag");
89+
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
90+
}
91+
92+
@Test
93+
public void testResolveRepositoryNameWithSHA256() {
94+
HostnameReposName resolved = NameParser.resolveRepositoryName("repository@sha256:sha256");
95+
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
96+
}
97+
98+
@Test
99+
public void testResolveRepositoryNameWithTagAndSHA256() {
100+
HostnameReposName resolved = NameParser.resolveRepositoryName("repository:tag@sha256:sha256");
101+
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
102+
}
103+
86104
@Test
87105
public void testResolveRepositoryNameWithNamespace() {
88106
HostnameReposName resolved = NameParser.resolveRepositoryName("namespace/repository");
@@ -92,7 +110,7 @@ public void testResolveRepositoryNameWithNamespace() {
92110
@Test
93111
public void testResolveRepositoryNameWithNamespaceAndSHA256() {
94112
HostnameReposName resolved = NameParser.resolveRepositoryName("namespace/repository@sha256:sha256");
95-
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "namespace/repository@sha256:sha256"), resolved);
113+
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "namespace/repository"), resolved);
96114
}
97115

98116
@Test
@@ -107,6 +125,17 @@ public void testResolveRepositoryNameWithNamespaceAndHostnameAndSHA256() {
107125
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
108126
}
109127

128+
@Test
129+
public void testResolveRepositoryNameWithNamespaceAndHostnameAndTag() {
130+
HostnameReposName resolved = NameParser.resolveRepositoryName("localhost:5000/namespace/repository:tag");
131+
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
132+
}
133+
@Test
134+
public void testResolveRepositoryNameWithNamespaceAndHostnameAndTagAndSHA256() {
135+
HostnameReposName resolved = NameParser.resolveRepositoryName("localhost:5000/namespace/repository:tag@sha256:sha256");
136+
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
137+
}
138+
110139
@Test(expected = InvalidRepositoryNameException.class)
111140
public void testResolveRepositoryNameWithIndex() {
112141
NameParser.resolveRepositoryName("index.docker.io/repository");
@@ -147,4 +176,16 @@ public void testResolveReposTagWithSHA256() {
147176
resolved = NameParser.parseRepositoryTag("localhost:5000/namespace/repository@sha256:sha256");
148177
assertEquals(new ReposTag("localhost:5000/namespace/repository@sha256:sha256", ""), resolved);
149178
}
179+
180+
@Test
181+
public void testResolveReposTagWithTagAndSHA256() {
182+
ReposTag resolved = NameParser.parseRepositoryTag("repository:tag@sha256:sha256");
183+
assertEquals(new ReposTag("repository:tag@sha256:sha256", ""), resolved);
184+
185+
resolved = NameParser.parseRepositoryTag("namespace/repository:tag@sha256:sha256");
186+
assertEquals(new ReposTag("namespace/repository:tag@sha256:sha256", ""), resolved);
187+
188+
resolved = NameParser.parseRepositoryTag("localhost:5000/namespace/repository:tag@sha256:sha256");
189+
assertEquals(new ReposTag("localhost:5000/namespace/repository:tag@sha256:sha256", ""), resolved);
190+
}
150191
}

0 commit comments

Comments
 (0)