diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 898d6e9..8b97305 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -898,7 +898,7 @@ p.description = input("Description", p.description); p.authors = input("Author name", author).split(",").map!(a => a.strip).array; p.license = input("License", p.license); - string copyrightString = .format("Copyright © %s, %-(%s, %)", Clock.currTime().year, p.authors); + string copyrightString = format("Copyright © %s, %-(%s, %)", Clock.currTime().year, p.authors); p.copyright = input("Copyright string", copyrightString); while (true) { @@ -986,6 +986,13 @@ ]); } + protected void setupVersionPackage(Dub dub, string str_package_info, string default_build_type = "debug") + { + PackageAndVersion package_info = splitPackageName(str_package_info); + Version ver = package_info.version_.length ? Version(package_info.version_) : Version.unknown; + setupPackage(dub, package_info.name, default_build_type, ver); + } + protected void setupPackage(Dub dub, string package_name, string default_build_type = "debug", Version ver = Version.unknown) { if (!m_compilerName.length) m_compilerName = dub.defaultCompiler; @@ -1055,7 +1062,10 @@ auto pack = ver.isUnknown ? dub.packageManager.getLatestPackage(package_name) : dub.packageManager.getPackage(package_name, ver); - enforce(pack, "Failed to find a package named '"~package_name~"' locally."); + + enforce(pack, format!"Failed to find a package named '%s%s' locally."(package_name, + ver.isUnknown ? "" : "@" ~ ver.toString() + )); logInfo("Building package %s in %s", pack.name, pack.path.toNativeString()); dub.loadPackage(pack); return true; @@ -1115,19 +1125,17 @@ override int execute(Dub dub, string[] free_args, string[] app_args) { - PackageAndVersion package_info; + string str_package_info; if (!m_generator.length) { enforceUsage(free_args.length >= 1 && free_args.length <= 2, "Expected one or two arguments."); m_generator = free_args[0]; - if (free_args.length >= 2) package_info = splitPackageName(free_args[1]); + if (free_args.length >= 2) str_package_info = free_args[1]; } else { enforceUsage(free_args.length <= 1, "Expected one or zero arguments."); - if (free_args.length >= 1) package_info = splitPackageName(free_args[0]); + if (free_args.length >= 1) str_package_info = free_args[0]; } - string package_name = package_info.name; - Version package_version = package_info.version_.length == 0 ? Version.unknown : Version(package_info.version_); - setupPackage(dub, package_name, "debug", package_version); + setupVersionPackage(dub, str_package_info, "debug"); if (m_printBuilds) { // FIXME: use actual package data logInfo("Available build types:"); @@ -1363,11 +1371,11 @@ override int execute(Dub dub, string[] free_args, string[] app_args) { - string package_name; + string str_package_info; enforceUsage(free_args.length <= 1, "Expected one or zero arguments."); - if (free_args.length >= 1) package_name = free_args[0]; + if (free_args.length >= 1) str_package_info = free_args[0]; - setupPackage(dub, package_name, "unittest", Version.unknown); + setupVersionPackage(dub, str_package_info, "unittest"); GeneratorSettings settings; settings.platform = m_buildPlatform; @@ -1454,9 +1462,9 @@ override int execute(Dub dub, string[] free_args, string[] app_args) { - string package_name; + string str_package_info; enforceUsage(free_args.length <= 1, "Expected one or zero arguments."); - if (free_args.length >= 1) package_name = free_args[0]; + if (free_args.length >= 1) str_package_info = free_args[0]; string[] args; if (!m_syntaxCheck && !m_styleCheck && !m_report && app_args.length == 0) { m_styleCheck = true; } @@ -1470,7 +1478,7 @@ foreach (import_path; m_importPaths) args ~= ["-I", import_path]; if (m_config) args ~= ["--config", m_config]; - setupPackage(dub, package_name); + setupVersionPackage(dub, str_package_info); dub.lintProject(args ~ app_args); return 0; } @@ -1567,10 +1575,10 @@ setLogLevel(max(ll, LogLevel.warn)); scope (exit) setLogLevel(ll); - string package_name; + string str_package_info; enforceUsage(free_args.length <= 1, "Expected one or zero arguments."); - if (free_args.length >= 1) package_name = free_args[0]; - setupPackage(dub, package_name); + if (free_args.length >= 1) str_package_info = free_args[0]; + setupVersionPackage(dub, str_package_info); m_defaultConfig = dub.project.getDefaultConfiguration(m_buildPlatform); diff --git a/test/.gitignore b/test/.gitignore index ff95cca..471c344 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -12,5 +12,8 @@ path-subpackage-ref/test subpackage-ref/test subpackage-common-with-sourcefile-globbing/mypackage* +version-spec/**/CMakeLists.txt +version-spec/**/foo.cmake +version-spec/**/foo -/test_registry +/test_registry \ No newline at end of file diff --git a/test/version-spec.sh b/test/version-spec.sh new file mode 100755 index 0000000..7add456 --- /dev/null +++ b/test/version-spec.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +. $(dirname "${BASH_SOURCE[0]}")/common.sh + +$DUB add-local "$CURR_DIR/version-spec/newfoo" +$DUB add-local "$CURR_DIR/version-spec/oldfoo" + +[[ $($DUB describe foo | grep path | head -1) == *"/newfoo/"* ]] || false +[[ $($DUB describe foo@1.0.0 | grep path | head -1) == *"/newfoo/"* ]] || false +[[ $($DUB describe foo@0.1.0 | grep path | head -1) == *"/oldfoo/"* ]] || false + +[[ $($DUB test foo | head -1) == *"/newfoo/" ]] || false +[[ $($DUB test foo@1.0.0 | head -1) == *"/newfoo/" ]] || false +[[ $($DUB test foo@0.1.0 | head -1) == *"/oldfoo/" ]] || false + +[[ $($DUB lint foo | tail -1) == *"/newfoo/" ]] || false +[[ $($DUB lint foo@1.0.0 | tail -1) == *"/newfoo/" ]] || false +[[ $($DUB lint foo@0.1.0 | tail -1) == *"/oldfoo/" ]] || false + +[[ $($DUB generate cmake foo | head -1) == *"/newfoo/" ]] || false +[[ $($DUB generate cmake foo@1.0.0 | head -1) == *"/newfoo/" ]] || false +[[ $($DUB generate cmake foo@0.1.0 | head -1) == *"/oldfoo/" ]] || false + +[[ $($DUB build -n foo | head -1) == *"/newfoo/" ]] || false +[[ $($DUB build -n foo@1.0.0 | head -1) == *"/newfoo/" ]] || false +[[ $($DUB build -n foo@0.1.0 | head -1) == *"/oldfoo/" ]] || false + +[[ $($DUB run -n foo | tail -1) == 'new-foo' ]] || false +[[ $($DUB run -n foo@1.0.0 | tail -1) == 'new-foo' ]] || false +[[ $($DUB run -n foo@0.1.0 | tail -1) == 'old-foo' ]] || false + +$DUB remove-local "$CURR_DIR/version-spec/newfoo" +$DUB remove-local "$CURR_DIR/version-spec/oldfoo" \ No newline at end of file diff --git a/test/version-spec/.no_build b/test/version-spec/.no_build new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/version-spec/.no_build diff --git a/test/version-spec/.no_run b/test/version-spec/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/version-spec/.no_run diff --git a/test/version-spec/.no_test b/test/version-spec/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/version-spec/.no_test diff --git a/test/version-spec/newfoo/dub.sdl b/test/version-spec/newfoo/dub.sdl new file mode 100644 index 0000000..b5f6277 --- /dev/null +++ b/test/version-spec/newfoo/dub.sdl @@ -0,0 +1,3 @@ +name "foo" +version "1.0.0" +targetType "executable" \ No newline at end of file diff --git a/test/version-spec/newfoo/source/app.d b/test/version-spec/newfoo/source/app.d new file mode 100644 index 0000000..314f1dd --- /dev/null +++ b/test/version-spec/newfoo/source/app.d @@ -0,0 +1,2 @@ +import std.stdio; +void main() { writeln("new-foo"); } diff --git a/test/version-spec/oldfoo/dub.sdl b/test/version-spec/oldfoo/dub.sdl new file mode 100644 index 0000000..7f571c0 --- /dev/null +++ b/test/version-spec/oldfoo/dub.sdl @@ -0,0 +1,3 @@ +name "foo" +version "0.1.0" +targetType "executable" \ No newline at end of file diff --git a/test/version-spec/oldfoo/source/app.d b/test/version-spec/oldfoo/source/app.d new file mode 100644 index 0000000..c4a6993 --- /dev/null +++ b/test/version-spec/oldfoo/source/app.d @@ -0,0 +1,2 @@ +import std.stdio; +void main() { writeln("old-foo"); }