From b691da896e792bbee7aaf25170b89bf6ee47219e Mon Sep 17 00:00:00 2001 From: Jakob Grabner Date: Tue, 11 Nov 2025 15:46:33 +0100 Subject: [PATCH 1/2] Fix custom pub repositories with path could not be used --- lib/src/utils.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/utils.dart b/lib/src/utils.dart index ddbbef088..c1afb2efc 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -165,7 +165,7 @@ Future copyDir(String from, String to) async { Future getVersionListing(String package, {Uri? pubHostedUrl}) async { final url = (pubHostedUrl ?? Uri.parse('https://pub.dartlang.org')).resolve( - '/api/packages/$package', + 'api/packages/$package', ); log.fine('Downloading: $url'); From 2839fb4b8ea869bc55fdf069a7b49ab33dac9877 Mon Sep 17 00:00:00 2001 From: Jakob Grabner Date: Wed, 12 Nov 2025 09:09:04 +0100 Subject: [PATCH 2/2] Normalize pub PUB_HOSTED_URL --- lib/src/utils.dart | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/src/utils.dart b/lib/src/utils.dart index c1afb2efc..b2b5b6fd0 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -164,9 +164,17 @@ Future copyDir(String from, String to) async { } Future getVersionListing(String package, {Uri? pubHostedUrl}) async { - final url = (pubHostedUrl ?? Uri.parse('https://pub.dartlang.org')).resolve( - 'api/packages/$package', - ); + var url = (pubHostedUrl ?? Uri.parse('https://pub.dartlang.org')) + .normalizePath(); + // If we have a path of only `/` + if (url.path == '/') { + url = url.replace(path: ''); + } + // If there is a path, and it doesn't end in a slash we normalize to slash + if (url.path.isNotEmpty && !url.path.endsWith('/')) { + url = url.replace(path: '${url.path}/'); + } + url = url.resolve('api/packages/$package'); log.fine('Downloading: $url'); return await retry(