diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index 2278d35..90eec57 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -689,14 +689,14 @@ void addOverride(PlacementLocation scope_, string package_, Dependency version_spec, Version target) { m_repositories[scope_].overrides ~= PackageOverride(package_, version_spec, target); - m_repositories[scope_].writeOverrides(); + m_repositories[scope_].writeOverrides(this); } /// ditto deprecated("Use the overload that accepts a `VersionRange` as 3rd argument") void addOverride(PlacementLocation scope_, string package_, Dependency version_spec, NativePath target) { m_repositories[scope_].overrides ~= PackageOverride(package_, version_spec, target); - m_repositories[scope_].writeOverrides(); + m_repositories[scope_].writeOverrides(this); } /// Ditto @@ -716,13 +716,13 @@ package(dub) void addOverride_(PlacementLocation scope_, string package_, VersionRange source, Version target) { m_repositories[scope_].overrides ~= PackageOverride_(package_, source, target); - m_repositories[scope_].writeOverrides(); + m_repositories[scope_].writeOverrides(this); } // Non deprecated version that is used by `commandline`. Do not use! package(dub) void addOverride_(PlacementLocation scope_, string package_, VersionRange source, NativePath target) { m_repositories[scope_].overrides ~= PackageOverride_(package_, source, target); - m_repositories[scope_].writeOverrides(); + m_repositories[scope_].writeOverrides(this); } /** Removes an existing package override. @@ -749,7 +749,7 @@ if (ovr.package_ != package_ || ovr.source != src) continue; rep.overrides = rep.overrides[0 .. i] ~ rep.overrides[i+1 .. $]; - (*rep).writeOverrides(); + (*rep).writeOverrides(this); return; } throw new Exception(format("No override exists for %s %s", package_, src)); @@ -990,7 +990,7 @@ addPackages(*packs, pack); - this.m_repositories[type].writeLocalPackageList(); + this.m_repositories[type].writeLocalPackageList(this); logInfo("Registered package: %s (version: %s)", pack.name, pack.version_); return pack; @@ -1020,7 +1020,7 @@ .filter!(en => !to_remove.canFind(en.index)) .map!(en => en.value).array; - this.m_repositories[type].writeLocalPackageList(); + this.m_repositories[type].writeLocalPackageList(this); foreach(ver, name; removed) logInfo("Deregistered package: %s (version: %s)", name, ver); @@ -1030,14 +1030,14 @@ void addSearchPath(NativePath path, PlacementLocation type) { m_repositories[type].searchPath ~= path; - this.m_repositories[type].writeLocalPackageList(); + this.m_repositories[type].writeLocalPackageList(this); } /// Removes a search path from the given type. void removeSearchPath(NativePath path, PlacementLocation type) { m_repositories[type].searchPath = m_repositories[type].searchPath.filter!(p => p != path)().array(); - this.m_repositories[type].writeLocalPackageList(); + this.m_repositories[type].writeLocalPackageList(this); } deprecated("Use `refresh()` without boolean argument(same as `refresh(false)`") @@ -1203,6 +1203,13 @@ } /// Ditto + protected void ensureDirectory(NativePath path) + { + static import dub.internal.vibecompat.core.file; + return dub.internal.vibecompat.core.file.ensureDirectory(path); + } + + /// Ditto protected bool existsFile(NativePath path) { static import dub.internal.vibecompat.core.file; @@ -1399,10 +1406,8 @@ } } - private void writeOverrides() + private void writeOverrides(PackageManager mgr) { - import dub.internal.vibecompat.core.file; - Json[] newlist; foreach (ovr; this.overrides) { auto jovr = Json.emptyObject; @@ -1415,14 +1420,14 @@ newlist ~= jovr; } auto path = this.packagePath; - ensureDirectory(path); - writeJsonFile(path ~ LocalOverridesFilename, Json(newlist)); + mgr.ensureDirectory(path); + auto app = appender!string(); + app.writePrettyJsonString(Json(newlist)); + mgr.writeFile(path ~ LocalOverridesFilename, app.data); } - private void writeLocalPackageList() + private void writeLocalPackageList(PackageManager mgr) { - import dub.internal.vibecompat.core.file; - Json[] newlist; foreach (p; this.searchPath) { auto entry = Json.emptyObject; @@ -1441,8 +1446,10 @@ } NativePath path = this.packagePath; - ensureDirectory(path); - writeJsonFile(path ~ LocalPackagesFilename, Json(newlist)); + mgr.ensureDirectory(path); + auto app = appender!string(); + app.writePrettyJsonString(Json(newlist)); + mgr.writeFile(path ~ LocalPackagesFilename, app.data); } // load locally defined packages diff --git a/source/dub/test/base.d b/source/dub/test/base.d index fd9717f..5b1a6e5 100644 --- a/source/dub/test/base.d +++ b/source/dub/test/base.d @@ -374,6 +374,12 @@ } /// + protected override void ensureDirectory(NativePath path) + { + this.fs.mkdir(path); + } + + /// protected override bool existsFile(NativePath path) { return this.fs.existsFile(path);