diff --git a/.travis.yml b/.travis.yml index 82cd5ee..0e408ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,7 +58,7 @@ - d: ldc-1.3.0 env: [FRONTEND=2.073] - stage: deploy - d: ldc-1.14.0 + d: ldc-1.15.0 os: osx script: echo "Deploying to GitHub releases ..." && ./release.sh deploy: @@ -69,7 +69,7 @@ api_key: $GH_REPO_TOKEN on: tags: true - - d: ldc-1.13.0 + - d: ldc-1.15.0 script: echo "Deploying to GitHub releases ..." && ./release.sh env: [ARCH=32] addons: @@ -85,7 +85,7 @@ api_key: $GH_REPO_TOKEN on: tags: true - - d: ldc-1.14.0 + - d: ldc-1.15.0 script: echo "Deploying to GitHub releases ..." && ./release.sh deploy: - provider: releases @@ -95,7 +95,7 @@ api_key: $GH_REPO_TOKEN on: tags: true - - d: ldc-1.14.0 + - d: ldc-1.15.0 script: echo "Deploying to GitHub releases (win32) ..." && ./release-windows.sh addons: apt: @@ -109,7 +109,7 @@ api_key: $GH_REPO_TOKEN on: tags: true - - d: ldc-1.14.0 + - d: ldc-1.15.0 script: echo "Deploying to GitHub releases (win64) ..." && ARCH=64 ./release-windows.sh addons: apt: diff --git a/changelog/single-api-requests.dd b/changelog/single-api-requests.dd new file mode 100644 index 0000000..a8b15a3 --- /dev/null +++ b/changelog/single-api-requests.dd @@ -0,0 +1,4 @@ +DUB uses single API requests to upgrade/resolve dependencies. + +`dub` now uses single API request to upgrade/resolve dependencies. +For more details, see $(LINK2 https://github.com/dlang/dub/pull/1366, pull #1366). diff --git a/source/dub/packagesuppliers/registry.d b/source/dub/packagesuppliers/registry.d index 546dac0..470f636 100644 --- a/source/dub/packagesuppliers/registry.d +++ b/source/dub/packagesuppliers/registry.d @@ -86,24 +86,21 @@ m_metadataCache.remove(packageId); } - auto url = m_registryUrl ~ NativePath("api/packages/" ~ packageId ~ "/info?minimize=true"); + auto url = m_registryUrl ~ NativePath("api/packages/infos?packages=[\"" ~ + packageId ~ "\"]&include_dependencies=true&minimize=true"); logDebug("Downloading metadata for %s", packageId); string jsonData; - try - jsonData = cast(string)retryDownload(url); - catch(HTTPStatusException e) { - if (e.status == 404) { - logDebug("Package %s not found at %s (404): %s", packageId, description, e.msg); - return Json(null); - } - else throw e; - } + jsonData = cast(string)retryDownload(url); Json json = parseJsonString(jsonData, url.toString()); - m_metadataCache[packageId] = CacheEntry(json, now); - return json; + foreach (pkg, info; json.get!(Json[string])) + { + logDebug("adding %s to metadata cache", pkg); + m_metadataCache[pkg] = CacheEntry(info, now); + } + return json[packageId]; } SearchResult[] searchPackages(string query) { diff --git a/test/issue1336-registry/api/packages/gitcompatibledubpackage/info__minimize=true b/test/issue1336-registry/api/packages/gitcompatibledubpackage/info__minimize=true deleted file mode 100644 index 6f0d641..0000000 --- a/test/issue1336-registry/api/packages/gitcompatibledubpackage/info__minimize=true +++ /dev/null @@ -1 +0,0 @@ -{"repository":{"project":"gitcompatibledubpackage","owner":"dlang-community","kind":"github"},"dateAdded":"2017-02-11T21:00:16","name":"gitcompatibledubpackage","categories":[],"owner":"5148973d2179ddb20b0002fd","id":"589f6d501c18646d0ee49f12","versions":[{"packageDescriptionFile":"dub.sdl","configurations":[{"name":"exe","targetType":"executable","mainSourceFile":"hello.d"},{"excludedSourceFiles":["hello.d"],"name":"lib","targetType":"library"}],"commitID":"9e3972be4c63790c32257220f40c0af7dc41bec5","importPaths":[".."],"name":"gitcompatibledubpackage","version":"~master","license":"public domain","readmeFile":"/README.md","date":"2017-09-18T18:18:35Z","description":"Example of a DUB package also usable as git submodule. For DUB test suite.","sourcePaths":["."]},{"packageDescriptionFile":"dub.json","commitID":"b62466d32dd6bbb0d45f9a73c91142205d1048e5","importPaths":[".."],"name":"gitcompatibledubpackage","version":"1.0.1","license":"public domain","readmeFile":"/README.md","date":"2015-10-31T11:09:14Z","description":"Example of a DUB package also usable as git submodule. For DUB test suite."},{"packageDescriptionFile":"dub.json","commitID":"cef89b5513a140b1e3417809f59d1957ddaad837","importPaths":[".."],"name":"gitcompatibledubpackage","version":"1.0.2","license":"public domain","readmeFile":"/README.md","date":"2015-10-31T11:23:53Z","description":"Example of a DUB package also usable as git submodule. For DUB test suite.","sourcePaths":["."]},{"packageDescriptionFile":"dub.json","commitID":"d36e49d31b26ea76e1670e9d5cd89aaac40fde75","importPaths":[".."],"name":"gitcompatibledubpackage","version":"1.0.3","targetType":"executable","license":"public domain","readmeFile":"/README.md","date":"2017-04-05T22:12:48Z","description":"Example of a DUB package also usable as git submodule. For DUB test suite.","mainSourceFile":"hello.d","sourcePaths":["."]},{"packageDescriptionFile":"dub.sdl","configurations":[{"name":"exe","targetType":"executable","mainSourceFile":"hello.d"},{"excludedSourceFiles":["hello.d"],"name":"lib","targetType":"library"}],"commitID":"9e3972be4c63790c32257220f40c0af7dc41bec5","importPaths":[".."],"name":"gitcompatibledubpackage","version":"1.0.4","license":"public domain","readmeFile":"/README.md","date":"2017-09-18T18:18:35Z","description":"Example of a DUB package also usable as git submodule. For DUB test suite.","sourcePaths":["."]}]} \ No newline at end of file diff --git a/test/issue1336-registry/api/packages/infos__packages=%5B%22gitcompatibledubpackage%22%5D&include_dependencies=true&minimize=true b/test/issue1336-registry/api/packages/infos__packages=%5B%22gitcompatibledubpackage%22%5D&include_dependencies=true&minimize=true new file mode 100644 index 0000000..7258e3d --- /dev/null +++ b/test/issue1336-registry/api/packages/infos__packages=%5B%22gitcompatibledubpackage%22%5D&include_dependencies=true&minimize=true @@ -0,0 +1,3 @@ +{ + "gitcompatibledubpackage": {"versions":[{"configurations":[{"name":"exe"},{"name":"lib"}],"version":"~master","name":"gitcompatibledubpackage"},{"version":"1.0.1","name":"gitcompatibledubpackage"},{"version":"1.0.2","name":"gitcompatibledubpackage"},{"version":"1.0.3","name":"gitcompatibledubpackage"},{"configurations":[{"name":"exe"},{"name":"lib"}],"version":"1.0.4","name":"gitcompatibledubpackage"}]} +} \ No newline at end of file