diff --git a/source/dub/dub.d b/source/dub/dub.d index 31eb84e..2f2196f 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -205,7 +205,8 @@ foreach (p; m_project.selections.selectedPackages) { auto dep = m_project.selections.getSelectedVersion(p); if (!dep.path.empty) { - if (m_packageManager.getOrLoadPackage(dep.path)) continue; + try if (m_packageManager.getOrLoadPackage(dep.path)) continue; + catch (Exception e) { logDebug("Failed to load path based selection: %s", e.toString().sanitize); } } else { if (m_packageManager.getPackage(p, dep.version_)) continue; foreach (ps; m_packageSuppliers) { @@ -268,8 +269,13 @@ foreach (p, ver; versions) { assert(!p.canFind(":"), "Resolved packages contain a sub package!?: "~p); Package pack; - if (!ver.path.empty) pack = m_packageManager.getOrLoadPackage(ver.path); - else { + if (!ver.path.empty) { + try pack = m_packageManager.getOrLoadPackage(ver.path); + catch (Exception e) { + logDebug("Failed to load path based selection: %s", e.toString().sanitize); + continue; + } + } else { pack = m_packageManager.getBestPackage(p, ver); if (pack && m_packageManager.isManagedPackage(pack) && ver.version_.isBranch && (options & UpgradeOptions.upgrade) != 0) @@ -992,8 +998,14 @@ } if (!dep.path.empty) { - auto ret = m_dub.packageManager.getOrLoadPackage(dep.path); - if (dep.matches(ret.ver)) return ret; + try { + auto ret = m_dub.packageManager.getOrLoadPackage(dep.path); + if (dep.matches(ret.ver)) return ret; + } catch (Exception e) { + logDiagnostic("Failed to load path based dependency %s: %s", name, e.msg); + logDebug("Full error: %s", e.toString().sanitize); + return null; + } } if (auto ret = m_dub.m_packageManager.getBestPackage(name, dep)) diff --git a/test/issue564-invalid-upgrade-dependency.sh b/test/issue564-invalid-upgrade-dependency.sh new file mode 100755 index 0000000..3de9aa1 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +cd ${CURR_DIR}/issue564-invalid-upgrade-dependency +rm -rf a-1.0.0/.dub +rm -rf a-1.1.0/.dub +rm -rf main/.dub +${DUB} build --bare --compiler=${COMPILER} main || exit 1 diff --git a/test/issue564-invalid-upgrade-dependency/.no_build b/test/issue564-invalid-upgrade-dependency/.no_build new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/.no_build diff --git a/test/issue564-invalid-upgrade-dependency/.no_run b/test/issue564-invalid-upgrade-dependency/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/.no_run diff --git a/test/issue564-invalid-upgrade-dependency/.no_test b/test/issue564-invalid-upgrade-dependency/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/.no_test diff --git a/test/issue564-invalid-upgrade-dependency/a-1.0.0/dub.json b/test/issue564-invalid-upgrade-dependency/a-1.0.0/dub.json new file mode 100644 index 0000000..cc36ecb --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/a-1.0.0/dub.json @@ -0,0 +1,4 @@ +{ + "name": "a", + "version": "1.0.0", +} diff --git a/test/issue564-invalid-upgrade-dependency/a-1.0.0/source/a.d b/test/issue564-invalid-upgrade-dependency/a-1.0.0/source/a.d new file mode 100644 index 0000000..b430cbc --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/a-1.0.0/source/a.d @@ -0,0 +1,3 @@ +void test() +{ +} \ No newline at end of file diff --git a/test/issue564-invalid-upgrade-dependency/a-1.1.0/dub.json b/test/issue564-invalid-upgrade-dependency/a-1.1.0/dub.json new file mode 100644 index 0000000..4103fe5 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/a-1.1.0/dub.json @@ -0,0 +1,7 @@ +{ + "name": "a", + "version": "1.1.0", + "dependencies": { + "invalid": {"path": "invalid"} + } +} diff --git a/test/issue564-invalid-upgrade-dependency/a-1.1.0/source/a.d b/test/issue564-invalid-upgrade-dependency/a-1.1.0/source/a.d new file mode 100644 index 0000000..b430cbc --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/a-1.1.0/source/a.d @@ -0,0 +1,3 @@ +void test() +{ +} \ No newline at end of file diff --git a/test/issue564-invalid-upgrade-dependency/main/dub.json b/test/issue564-invalid-upgrade-dependency/main/dub.json new file mode 100644 index 0000000..7d27d9d --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/main/dub.json @@ -0,0 +1,6 @@ +{ + "name": "main", + "dependencies": { + "a": "~>1.0" + } +} diff --git a/test/issue564-invalid-upgrade-dependency/main/dub.selections.json b/test/issue564-invalid-upgrade-dependency/main/dub.selections.json new file mode 100644 index 0000000..e24adfe --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/main/dub.selections.json @@ -0,0 +1,6 @@ +{ + "fileVersion": 1, + "versions": { + "a": "1.0.0" + } +} diff --git a/test/issue564-invalid-upgrade-dependency/main/source/app.d b/test/issue564-invalid-upgrade-dependency/main/source/app.d new file mode 100644 index 0000000..c0b76f0 --- /dev/null +++ b/test/issue564-invalid-upgrade-dependency/main/source/app.d @@ -0,0 +1,6 @@ +import a; + +void main() +{ + test(); +}