diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index e329ada..44d8f3b 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -61,10 +61,10 @@ { m_repositories[LocalPackageType.user] = Repository(user_path); m_repositories[LocalPackageType.system] = Repository(system_path); - refresh(); + refresh(true); } - @property void searchPath(Path[] paths) { m_searchPath = paths.dup; refresh(); } + @property void searchPath(Path[] paths) { m_searchPath = paths.dup; refresh(false); } @property const(Path)[] searchPath() const { return m_searchPath; } @property const(Path)[] completeSearchPath() @@ -399,7 +399,7 @@ writeLocalPackageList(type); } - void refresh() + void refresh(bool refresh_existing_packages) { // load locally defined packages void scanLocalPackages(LocalPackageType type) @@ -427,7 +427,15 @@ logWarn("Local package at %s has different name than %s (%s)", path.toNativeString(), name, info.name.get!string()); info.name = name; info["version"] = ver; - auto pp = new Package(info, path); + + Package pp; + if (!refresh_existing_packages) + foreach (p; m_repositories[type].localPackages) + if (p.path == path) { + pp = p; + break; + } + if (!pp) pp = new Package(info, path); packs ~= pp; } } catch( Exception e ){ @@ -443,6 +451,8 @@ scanLocalPackages(LocalPackageType.system); scanLocalPackages(LocalPackageType.user); + Package[][string] old_packages = m_packages; + // rescan the system and user package folder void scanPackageFolder(Path path) { @@ -455,7 +465,14 @@ if( !existsFile(pack_path ~ PackageJsonFilename) ) continue; Package p; try { - p = new Package(pack_path); + if (!refresh_existing_packages) + foreach (plist; old_packages) + foreach (pp; plist) + if (pp.path == pack_path) { + p = pp; + break; + } + if (!p) p = new Package(pack_path); m_packages[p.name] ~= p; } catch( Exception e ){ logError("Failed to load package in %s: %s", pack_path, e.msg); diff --git a/source/dub/project.d b/source/dub/project.d index 8696317..f4c62e1 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -155,7 +155,7 @@ m_dependencies = null; m_main = null; - m_packageManager.refresh(); + m_packageManager.refresh(false); try m_json = jsonFromFile(m_root ~ ".dub/dub.json", true); catch(Exception t) logDebug("Failed to read .dub/dub.json: %s", t.msg);