diff --git a/changelog/cwd-fix.dd b/changelog/cwd-fix.dd new file mode 100644 index 0000000..16d1ca5 --- /dev/null +++ b/changelog/cwd-fix.dd @@ -0,0 +1,12 @@ +Reverted v1.31.0 working directory change when using `dub run --root=` + +DUB < v1.31.0 would run applications in the working directory it was invoked in, +ignoring the `--root` argument. + +In v1.31.0, `dub` started to respect the `--root` argument and run programs in +the requested directory. + +While sometimes desirable, this change was not intended, and has now been +reverted. To restore the 1.31.0 behaivor, set `"workingDirectory"` to `"."` in +the dub.json/dub.sdl file. This works both with older DUB versions and with +future DUB versions. diff --git a/changelog/path-dep-fix.dd b/changelog/path-dep-fix.dd new file mode 100644 index 0000000..2798729 --- /dev/null +++ b/changelog/path-dep-fix.dd @@ -0,0 +1,7 @@ +Path dependencies of path-based sub-packages have been fixed + +Path-based dependencies in path-based sub-packages in DUB v1.30.0 and 1.31.0 +have had regressed and didn't resolve properly. (dub.selections.json could be +used to workaround this issue before) + +From this release, these resolve properly again. diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 03a2521..93c8457 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -1252,6 +1252,8 @@ if (!gensettings.config.length) gensettings.config = m_defaultConfig; gensettings.runArgs = app_args; + // legacy compatibility, default working directory is always CWD + gensettings.overrideToolWorkingDirectory = getWorkingDirectory(); logDiagnostic("Generating using %s", m_generator); dub.generateProject(m_generator, gensettings); diff --git a/source/dub/dependency.d b/source/dub/dependency.d index 79392fb..4e8be93 100644 --- a/source/dub/dependency.d +++ b/source/dub/dependency.d @@ -215,7 +215,10 @@ return this.m_value.match!( (NativePath v) { if (v.empty || v.absolute) return this; - return Dependency(path ~ v); + auto ret = Dependency(path ~ v); + ret.m_default = m_default; + ret.m_optional = m_optional; + return ret; }, (Repository v) => this, (VersionRange v) => this, diff --git a/source/dub/dub.d b/source/dub/dub.d index f0c56da..64a1426 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -864,7 +864,7 @@ if (options & FetchOptions.printOnly) { if (existing && existing.version_ != ver) logInfo("A new version for %s is available (%s -> %s). Run \"%s\" to switch.", - packageId.color(Mode.bold), existing.version_, ver, + packageId.color(Mode.bold), existing, ver, text("dub upgrade ", packageId).color(Mode.bold)); return null; } @@ -983,7 +983,7 @@ try { remove(pack); } catch (Exception e) { - logError("Failed to remove %s %s: %s", package_id, pack.version_, e.msg); + logError("Failed to remove %s %s: %s", package_id, pack, e.msg); logInfo("Continuing with other packages (if any)."); } } @@ -1632,7 +1632,7 @@ protected override Dependency[] getSpecificConfigs(string pack, TreeNodes nodes) { if (!nodes.configs.path.empty || !nodes.configs.repository.empty) { - if (getPackage(pack, nodes.configs)) return [nodes.configs]; + if (getPackage(nodes.pack, nodes.configs)) return [nodes.configs]; else return null; } else return null; @@ -1677,7 +1677,7 @@ if (!d.spec.path.empty && absdeppath != desireddeppath) logWarn("Sub package %s, referenced by %s %s must be referenced using the path to its base package", - subpack.name, pack.name, pack.version_); + subpack.name, pack.name, pack); enforce(d.spec.path.empty || absdeppath == desireddeppath || absdeppath == altdeppath, format("Dependency from %s to %s uses wrong path: %s vs. %s", @@ -1747,11 +1747,11 @@ m_remotePackages[sp.name] = sp; return sp; } else { - logDiagnostic("Sub package %s doesn't exist in %s %s.", name, basename, dep.version_); + logDiagnostic("Sub package %s doesn't exist in %s %s.", name, basename, dep); return null; } } else { - logDiagnostic("External sub package %s %s not found.", name, dep.version_); + logDiagnostic("External sub package %s %s not found.", name, dep); return null; } } @@ -1806,7 +1806,7 @@ m_dub.fetch(rootpack, vers, m_dub.defaultPlacementLocation, fetchOpts, "need sub package description"); auto ret = m_dub.m_packageManager.getBestPackage(name, vers); if (!ret) { - logWarn("Package %s %s doesn't have a sub package %s", rootpack, dep.version_, name); + logWarn("Package %s %s doesn't have a sub package %s", rootpack, dep, name); return null; } m_remotePackages[key] = ret; diff --git a/source/dub/recipe/packagerecipe.d b/source/dub/recipe/packagerecipe.d index 81ee3f4..909e653 100644 --- a/source/dub/recipe/packagerecipe.d +++ b/source/dub/recipe/packagerecipe.d @@ -38,7 +38,8 @@ } /** - Returns the name of the top level package for a given (sub) package name. + Returns the name of the top level package for a given (sub) package name of + format `"basePackageName"` or `"basePackageName:subPackageName"`. In case of a top level package, the qualified name is returned unmodified. */ @@ -48,7 +49,8 @@ } /** - Returns the qualified sub package part of the given package name. + Returns the qualified sub package part of the given package name of format + `"basePackageName:subPackageName"`, or empty string if none. This is the part of the package name excluding the base package name. See also $(D getBasePackageName). diff --git a/source/dub/version_.d b/source/dub/version_.d index 4d34bc2..d28ea61 100644 --- a/source/dub/version_.d +++ b/source/dub/version_.d @@ -1,2 +1,2 @@ module dub.version_; -enum dubVersion = "v1.31.0"; +enum dubVersion = "v1.31.1-beta.1"; diff --git a/test/dub-as-a-library-cwd/dub.json b/test/dub-as-a-library-cwd/dub.json index 15adddf..958f419 100644 --- a/test/dub-as-a-library-cwd/dub.json +++ b/test/dub-as-a-library-cwd/dub.json @@ -1,5 +1,6 @@ { "name": "dub-as-a-library-cwd", + "workingDirectory": ".", "dependencies": { "dub": { "path": "../.." diff --git a/test/dub-custom-root-2/.gitignore b/test/dub-custom-root-2/.gitignore new file mode 100644 index 0000000..2278645 --- /dev/null +++ b/test/dub-custom-root-2/.gitignore @@ -0,0 +1,6 @@ +.dub +docs.json +__dummy.html +*.o +*.obj +/target-exe diff --git a/test/dub-custom-root-2/.no_run b/test/dub-custom-root-2/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/dub-custom-root-2/.no_run diff --git a/test/dub-custom-root-2/.no_test b/test/dub-custom-root-2/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/dub-custom-root-2/.no_test diff --git a/test/dub-custom-root-2/dub.json b/test/dub-custom-root-2/dub.json new file mode 100644 index 0000000..e0d7508 --- /dev/null +++ b/test/dub-custom-root-2/dub.json @@ -0,0 +1,4 @@ +{ + "name": "target-exe", + "workingDirectory": "source" +} diff --git a/test/dub-custom-root-2/source/app.d b/test/dub-custom-root-2/source/app.d new file mode 100644 index 0000000..5d07423 --- /dev/null +++ b/test/dub-custom-root-2/source/app.d @@ -0,0 +1,12 @@ +import std.file; +import std.path; +import std.stdio; +import std.string; + +void main() +{ + // run me from test/ with dub --root=dub-custom-root + string cwd = getcwd.chomp("/"); + assert(cwd.endsWith("test/dub-custom-root-2/source"), cwd); + writeln("ok"); +} diff --git a/test/dub-custom-root.sh b/test/dub-custom-root.sh new file mode 100755 index 0000000..f7e52ca --- /dev/null +++ b/test/dub-custom-root.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +. $(dirname "${BASH_SOURCE[0]}")/common.sh + +pushd "$CURR_DIR" + +$DUB --root=dub-custom-root + +$DUB --root=dub-custom-root-2 + +popd diff --git a/test/dub-custom-root/.gitignore b/test/dub-custom-root/.gitignore new file mode 100644 index 0000000..2278645 --- /dev/null +++ b/test/dub-custom-root/.gitignore @@ -0,0 +1,6 @@ +.dub +docs.json +__dummy.html +*.o +*.obj +/target-exe diff --git a/test/dub-custom-root/.no_run b/test/dub-custom-root/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/dub-custom-root/.no_run diff --git a/test/dub-custom-root/.no_test b/test/dub-custom-root/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/dub-custom-root/.no_test diff --git a/test/dub-custom-root/dub.json b/test/dub-custom-root/dub.json new file mode 100644 index 0000000..172c135 --- /dev/null +++ b/test/dub-custom-root/dub.json @@ -0,0 +1,3 @@ +{ + "name": "target-exe" +} diff --git a/test/dub-custom-root/source/app.d b/test/dub-custom-root/source/app.d new file mode 100644 index 0000000..612dfe0 --- /dev/null +++ b/test/dub-custom-root/source/app.d @@ -0,0 +1,10 @@ +import std.file; +import std.path; +import std.stdio; + +void main() +{ + // run me from test/ with dub --root=test/dub-custom-root + assert(getcwd.baseName == "test", getcwd); + writeln("ok"); +} diff --git a/test/issue2587-subpackage-dependency-resolution.sh b/test/issue2587-subpackage-dependency-resolution.sh new file mode 100755 index 0000000..bee1454 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e + +. $(dirname "${BASH_SOURCE[0]}")/common.sh +cd "${CURR_DIR}/issue2587-subpackage-dependency-resolution/a" + +rm -f dub.selections.json +$DUB upgrade -v +$DUB run + +rm -f dub.selections.json +$DUB run diff --git a/test/issue2587-subpackage-dependency-resolution/.no_build b/test/issue2587-subpackage-dependency-resolution/.no_build new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/.no_build diff --git a/test/issue2587-subpackage-dependency-resolution/.no_run b/test/issue2587-subpackage-dependency-resolution/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/.no_run diff --git a/test/issue2587-subpackage-dependency-resolution/.no_test b/test/issue2587-subpackage-dependency-resolution/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/.no_test diff --git a/test/issue2587-subpackage-dependency-resolution/a/.gitignore b/test/issue2587-subpackage-dependency-resolution/a/.gitignore new file mode 100644 index 0000000..7b9e404 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/a/.gitignore @@ -0,0 +1,16 @@ +.dub +docs.json +__dummy.html +docs/ +/a +a.so +a.dylib +a.dll +a.a +a.lib +a-test-* +*.exe +*.pdb +*.o +*.obj +*.lst diff --git a/test/issue2587-subpackage-dependency-resolution/a/dub.json b/test/issue2587-subpackage-dependency-resolution/a/dub.json new file mode 100644 index 0000000..febb36a --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/a/dub.json @@ -0,0 +1,6 @@ +{ + "name": "a", + "dependencies": { + "b": {"path":"../b"} + } +} diff --git a/test/issue2587-subpackage-dependency-resolution/a/source/app.d b/test/issue2587-subpackage-dependency-resolution/a/source/app.d new file mode 100644 index 0000000..8d1ede9 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/a/source/app.d @@ -0,0 +1,7 @@ +import b, c; + +void main() +{ + doB(); + doC(); +} diff --git a/test/issue2587-subpackage-dependency-resolution/b/.gitignore b/test/issue2587-subpackage-dependency-resolution/b/.gitignore new file mode 100644 index 0000000..d699f7e --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/b/.gitignore @@ -0,0 +1,16 @@ +.dub +docs.json +__dummy.html +docs/ +/b +b.so +b.dylib +b.dll +b.a +b.lib +b-test-* +*.exe +*.pdb +*.o +*.obj +*.lst diff --git a/test/issue2587-subpackage-dependency-resolution/b/dub.json b/test/issue2587-subpackage-dependency-resolution/b/dub.json new file mode 100644 index 0000000..94a359b --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/b/dub.json @@ -0,0 +1,14 @@ +{ + "name": "b", + "dependencies": { + "b:sub":"*" + }, + "subPackages": [ + { + "name": "sub", + "dependencies": { + "c": {"path":"../c"} + } + } + ] +} diff --git a/test/issue2587-subpackage-dependency-resolution/b/source/b.d b/test/issue2587-subpackage-dependency-resolution/b/source/b.d new file mode 100644 index 0000000..ae8b14a --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/b/source/b.d @@ -0,0 +1,5 @@ +module b; + +void doB() +{ +} diff --git a/test/issue2587-subpackage-dependency-resolution/c/.gitignore b/test/issue2587-subpackage-dependency-resolution/c/.gitignore new file mode 100644 index 0000000..7c7bbbd --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/c/.gitignore @@ -0,0 +1,16 @@ +.dub +docs.json +__dummy.html +docs/ +/c +c.so +c.dylib +c.dll +c.a +c.lib +c-test-* +*.exe +*.pdb +*.o +*.obj +*.lst diff --git a/test/issue2587-subpackage-dependency-resolution/c/dub.json b/test/issue2587-subpackage-dependency-resolution/c/dub.json new file mode 100644 index 0000000..16e56e9 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/c/dub.json @@ -0,0 +1,3 @@ +{ + "name": "c" +} diff --git a/test/issue2587-subpackage-dependency-resolution/c/source/c.d b/test/issue2587-subpackage-dependency-resolution/c/source/c.d new file mode 100644 index 0000000..6886227 --- /dev/null +++ b/test/issue2587-subpackage-dependency-resolution/c/source/c.d @@ -0,0 +1,5 @@ +module c; + +void doC() +{ +}