Improve BuildpackReference's handling of URL-like strings on Windows

Closes gh-39792
This commit is contained in:
Andy Wilkinson 2024-02-28 13:59:58 +00:00
parent dd38fb8b65
commit 16b6400bdf
2 changed files with 7 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,6 +17,7 @@
package org.springframework.boot.buildpack.platform.build;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -51,11 +52,11 @@ public final class BuildpackReference {
try {
URL url = new URL(this.value);
if (url.getProtocol().equals("file")) {
return Paths.get(url.getPath());
return Paths.get(url.toURI());
}
return null;
}
catch (MalformedURLException ex) {
catch (MalformedURLException | URISyntaxException ex) {
// not a URL, fall through to attempting to find a plain file path
}
try {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -61,9 +61,9 @@ class TarGzipBuildpackTests {
@Test
void resolveWhenFileUrlReturnsBuildpack() throws Exception {
Path compressedArchive = this.testTarGzip.createArchive();
BuildpackReference reference = BuildpackReference.of("file://" + compressedArchive.toString());
BuildpackReference reference = BuildpackReference.of(compressedArchive.toUri().toString());
Buildpack buildpack = TarGzipBuildpack.resolve(this.resolverContext, reference);
assertThat(buildpack).isNotNull();
assertThat(buildpack).as("Buildpack %s resolved from reference %s", buildpack, reference).isNotNull();
assertThat(buildpack.getCoordinates()).hasToString("example/buildpack1@0.0.1");
this.testTarGzip.assertHasExpectedLayers(buildpack);
}