Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dd0de7c

Browse filesBrowse files
authored
Handle repoNames with tags (#2128)
Fixes #2127
1 parent a1243d6 commit dd0de7c
Copy full SHA for dd0de7c

File tree

2 files changed

+54
-1
lines changed
Filter options

2 files changed

+54
-1
lines changed

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

Copy file name to clipboardExpand all lines: docker-java-core/src/main/java/com/github/dockerjava/core/NameParser.java
+12Lines 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

Copy file name to clipboardExpand all lines: docker-java/src/test/java/com/github/dockerjava/core/NameParserTest.java
+42-1Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.