diff --git a/source/dub/commandline.d b/source/dub/commandline.d index ad71a53..43cf2ab 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -839,15 +839,16 @@ this() { this.name = "add-local"; - this.argumentsPattern = " "; + this.argumentsPattern = " []"; this.description = "Adds a local package directory (e.g. a git repository)"; this.helpText = ["Adds a local package directory (e.g. a git repository)"]; } override int execute(Dub dub, string[] free_args, string[] app_args) { - enforceUsage(free_args.length == 2, "Expecting two arguments."); - dub.addLocalPackage(free_args[0], free_args[1], m_system); + enforceUsage(free_args.length == 1 || free_args.length == 2, "Expecting one or two arguments."); + string ver = free_args.length == 2 ? free_args[1] : null; + dub.addLocalPackage(free_args[0], ver, m_system); return 0; } } diff --git a/source/dub/dub.d b/source/dub/dub.d index 38f028a..bc6faa9 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -446,7 +446,7 @@ void addLocalPackage(string path, string ver, bool system) { if (m_dryRun) return; - m_packageManager.addLocalPackage(makeAbsolute(path), Version(ver), system ? LocalPackageType.system : LocalPackageType.user); + m_packageManager.addLocalPackage(makeAbsolute(path), ver, system ? LocalPackageType.system : LocalPackageType.user); } void removeLocalPackage(string path, bool system) diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index 80ec53a..8ed8d73 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -373,13 +373,18 @@ logInfo("Removed package: '"~pack.name~"'"); } - Package addLocalPackage(in Path path, in Version ver, LocalPackageType type) + Package addLocalPackage(in Path path, string verName, LocalPackageType type) { Package[]* packs = &m_repositories[type].localPackages; auto info = jsonFromFile(path ~ PackageJsonFilename, false); string name; if( "name" !in info ) info["name"] = path.head.toString(); - info["version"] = ver.toString(); + if (verName !is null) + info["version"] = Version(verName).toString(); + + // load package + auto pack = new Package(info, path); + Version ver = pack.ver; // don't double-add packages foreach( p; *packs ){ @@ -390,8 +395,6 @@ } } - auto pack = new Package(info, path); - *packs ~= pack; writeLocalPackageList(type); @@ -481,7 +484,6 @@ if( "name" in info && info.name.get!string() != name ) logWarn("Local package at %s has different name than %s (%s)", path.toNativeString(), name, info.name.get!string()); info.name = name; - info["version"] = ver; Package pp; if (!refresh_existing_packages)