diff --git a/changelog/exitcodes.dd b/changelog/exitcodes.dd new file mode 100644 index 0000000..0ecdb3e --- /dev/null +++ b/changelog/exitcodes.dd @@ -0,0 +1,11 @@ +DUB command exit codes have been made more consistent + +Some dub commands have been adjusted to return exit code 2 instead of exit code 1. Exit code 1 is now always used for usage errors, while exit code 2 is the more generic any error occurred or package failed to load. + +The following commands are affected: + +- dub clean +- dub add +- dub search +- dub convert + diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 32b5f1e..e161eab 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -1686,7 +1686,7 @@ } } - if (any_error) return 1; + if (any_error) return 2; } else { dub.cleanPackage(dub.rootPath); } @@ -1723,12 +1723,12 @@ enforceUsage(free_args.length != 0, "Expected one or more arguments."); enforceUsage(app_args.length == 0, "Unexpected application arguments."); - if (!loadCwdPackage(dub, true)) return 1; + if (!loadCwdPackage(dub, true)) return 2; auto recipe = dub.project.rootPackage.rawRecipe.clone; foreach (depspec; free_args) { if (!addDependency(dub, recipe, depspec)) - return 1; + return 2; } writePackageRecipe(dub.project.rootPackage.recipePath, recipe); @@ -2142,7 +2142,7 @@ if (res.empty) { logError("No matches found."); - return 1; + return 2; } auto justify = res .map!((descNmatches) => descNmatches[1]) @@ -2555,7 +2555,7 @@ enforceUsage(app_args.length == 0, "Unexpected application arguments."); enforceUsage(free_args.length == 0, "Unexpected arguments: "~free_args.join(" ")); enforceUsage(m_format.length > 0, "Missing target format file extension (--format=...)."); - if (!loadCwdPackage(dub, true)) return 1; + if (!loadCwdPackage(dub, true)) return 2; dub.convertRecipe(m_format, m_stdout); return 0; }