diff --git a/source/dub/dub.d b/source/dub/dub.d index fa07398..a9af064 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -57,6 +57,7 @@ Json m_systemConfig, m_userConfig; Path m_projectPath; Project m_project; + Path m_overrideSearchPath; } /// Initiales the package manager for the vibe application @@ -144,6 +145,13 @@ m_project = new Project(m_packageManager, pack); } + void overrideSearchPath(Path path) + { + if (!path.absolute) path = Path(getcwd()) ~ path; + m_overrideSearchPath = path; + updatePackageSearchPath(); + } + string getDefaultConfiguration(BuildPlatform platform, bool allow_non_library_configs = true) const { return m_project.getDefaultConfiguration(platform, allow_non_library_configs); } /// Performs retrieval and removal as necessary for @@ -535,13 +543,19 @@ private void updatePackageSearchPath() { - auto p = environment.get("DUBPATH"); - Path[] paths; + if (m_overrideSearchPath.length) { + m_packageManager.disableDefaultSearchPaths = true; + m_packageManager.searchPath = [m_overrideSearchPath]; + } else { + auto p = environment.get("DUBPATH"); + Path[] paths; - version(Windows) enum pathsep = ";"; - else enum pathsep = ":"; - if (p.length) paths ~= p.split(pathsep).map!(p => Path(p))().array(); - m_packageManager.searchPath = paths; + version(Windows) enum pathsep = ";"; + else enum pathsep = ":"; + if (p.length) paths ~= p.split(pathsep).map!(p => Path(p))().array(); + m_packageManager.disableDefaultSearchPaths = false; + m_packageManager.searchPath = paths; + } } private Path makeAbsolute(Path p) const { return p.absolute ? p : m_rootPath ~ p; } diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index bc941e9..f9adf14 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -56,6 +56,7 @@ Path[] m_searchPath; Package[] m_packages; Package[] m_temporaryPackages; + bool m_disableDefaultSearchPaths = false; } this(Path user_path, Path system_path) @@ -68,14 +69,18 @@ @property void searchPath(Path[] paths) { m_searchPath = paths.dup; refresh(false); } @property const(Path)[] searchPath() const { return m_searchPath; } + @property void disableDefaultSearchPaths(bool val) { m_disableDefaultSearchPaths = val; refresh(true); } + @property const(Path)[] completeSearchPath() const { auto ret = appender!(Path[])(); ret.put(m_searchPath); - ret.put(m_repositories[LocalPackageType.user].searchPath); - ret.put(m_repositories[LocalPackageType.user].packagePath); - ret.put(m_repositories[LocalPackageType.system].searchPath); - ret.put(m_repositories[LocalPackageType.system].packagePath); + if (!m_disableDefaultSearchPaths) { + ret.put(m_repositories[LocalPackageType.user].searchPath); + ret.put(m_repositories[LocalPackageType.user].packagePath); + ret.put(m_repositories[LocalPackageType.system].searchPath); + ret.put(m_repositories[LocalPackageType.system].packagePath); + } return ret.data; } @@ -462,7 +467,7 @@ Path list_path = m_repositories[type].packagePath; Package[] packs; Path[] paths; - try { + if (!m_disableDefaultSearchPaths) try { auto local_package_file = list_path ~ LocalPackagesFilename; logDiagnostic("Looking for local package map at %s", local_package_file.toNativeString()); if( !existsFile(local_package_file) ) return;