Skip to content

Commit

Permalink
Merge pull request #1790 from player-03/stale_assets
Browse files Browse the repository at this point in the history
Automatically delete stale assets and dependency files.
  • Loading branch information
player-03 committed Jun 4, 2024
2 parents f23ecb6 + 224c0a0 commit 6a23b6e
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 13 deletions.
91 changes: 88 additions & 3 deletions src/lime/tools/PlatformTarget.hx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import haxe.rtti.Meta;
import hxp.*;
import lime.tools.AssetHelper;
import lime.tools.CommandHelper;
import sys.FileSystem;
import sys.io.File;

class PlatformTarget
{
Expand Down Expand Up @@ -99,10 +101,12 @@ class PlatformTarget
if (command == "update" || command == "build" || command == "test")
{
logCommand("update");
// #if lime
// AssetHelper.processLibraries (project, targetDirectory);
// #end

_touchedFiles = [];
update();

deleteStaleFiles(_touchedFiles);
_touchedFiles = null;
}

if (command == "build" || command == "test")
Expand Down Expand Up @@ -168,4 +172,85 @@ class PlatformTarget
@ignore public function update():Void {}

@ignore public function watch():Void {}

// Functions to track and delete stale files

/**
Files that were copied into the output directory due to something in
project.xml, but which might not be included next time.
`PlatformTarget` will handle assets and templates, but subclasses are
responsible for adding any other files they copy (e.g., dependencies).
**/
private var _touchedFiles:Array<String> = null;

/**
Calls `System.copyIfNewer()` with the given arguments, then records the
file in `_touchedFiles`. See `_touchedFiles` for information about what
needs to be recorded.
**/
private function copyIfNewer(source:String, destination:String):Void
{
System.copyIfNewer(source, destination);

if (_touchedFiles != null)
{
_touchedFiles.push(destination);
}
}

private function deleteStaleFiles(touchedFiles:Array<String>):Void
{
if (project.defines.exists("lime-ignore-stale-files")) return;

for (asset in project.assets)
{
touchedFiles.push(targetDirectory + "/bin/" + asset.targetPath);
}

var record:String = targetDirectory + "/.files";
if (FileSystem.exists(record))
{
for (oldFile in File.getContent(record).split("\n"))
{
if (oldFile.length > 0 && touchedFiles.indexOf(oldFile) < 0)
{
System.deleteFile(oldFile);
}
}
}

File.saveContent(record, touchedFiles.join("\n"));
}

/**
Calls `System.recursiveCopy()` with the given arguments, then records
the files in `_touchedFiles`. See `_touchedFiles` for information about
what needs to be recorded.
**/
private function recursiveCopy(source:String, destination:String, context:Dynamic = null, process:Bool = true):Void
{
System.recursiveCopy(source, destination, context, process);

if (_touchedFiles == null || !FileSystem.exists(source)) return;

function recurse(source:String, destination:String):Void
{
for (file in FileSystem.readDirectory(source))
{
if (file.charAt(0) == ".") continue;

if (FileSystem.isDirectory(source + "/" + file))
{
recurse(source + "/" + file, destination + "/" + file);
}
else
{
_touchedFiles.push(destination + "/" + file);
}
}
}

recurse(source, destination);
}
}
8 changes: 4 additions & 4 deletions tools/platforms/AndroidPlatform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -595,17 +595,17 @@ class AndroidPlatform extends PlatformTarget
{
if (FileSystem.isDirectory(javaPath))
{
System.recursiveCopy(javaPath, sourceSet + "/java", context, true);
recursiveCopy(javaPath, sourceSet + "/java", context, true);
}
else
{
if (Path.extension(javaPath) == "jar")
{
System.copyIfNewer(javaPath, destination + "/app/libs/" + Path.withoutDirectory(javaPath));
copyIfNewer(javaPath, destination + "/app/libs/" + Path.withoutDirectory(javaPath));
}
else
{
System.copyIfNewer(javaPath, sourceSet + "/java/" + Path.withoutDirectory(javaPath));
copyIfNewer(javaPath, sourceSet + "/java/" + Path.withoutDirectory(javaPath));
}
}
}
Expand All @@ -618,7 +618,7 @@ class AndroidPlatform extends PlatformTarget

for (library in cast(context.ANDROID_LIBRARY_PROJECTS, Array<Dynamic>))
{
System.recursiveCopy(library.source, destination + "/deps/" + library.name, context, true);
recursiveCopy(library.source, destination + "/deps/" + library.name, context, true);
}

ProjectHelper.recursiveSmartCopyTemplate(project, "android/template", destination, context);
Expand Down
2 changes: 1 addition & 1 deletion tools/platforms/HTML5Platform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ class HTML5Platform extends PlatformTarget
var name = Path.withoutDirectory(dependency.path);

context.linkedLibraries.push("./" + dependencyPath + "/" + name);
System.copyIfNewer(dependency.path, Path.combine(destination, Path.combine(dependencyPath, name)));
copyIfNewer(dependency.path, Path.combine(destination, Path.combine(dependencyPath, name)));
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tools/platforms/IOSPlatform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -862,7 +862,7 @@ class IOSPlatform extends PlatformTarget
fileName = "lib" + fileName;
}

System.copyIfNewer(dependency.path, projectDirectory + "/lib/" + arch + "/" + fileName);
copyIfNewer(dependency.path, projectDirectory + "/lib/" + arch + "/" + fileName);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tools/platforms/TVOSPlatform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,7 @@ class TVOSPlatform extends PlatformTarget
fileName = "lib" + fileName;
}

System.copyIfNewer(dependency.path, projectDirectory + "/lib/" + arch + "/" + fileName);
copyIfNewer(dependency.path, projectDirectory + "/lib/" + arch + "/" + fileName);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tools/platforms/WebAssemblyPlatform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ class WebAssemblyPlatform extends PlatformTarget
var name = Path.withoutDirectory(dependency.path);

context.linkedLibraries.push("./" + dependencyPath + "/" + name);
System.copyIfNewer(dependency.path, Path.combine(destination, Path.combine(dependencyPath, name)));
copyIfNewer(dependency.path, Path.combine(destination, Path.combine(dependencyPath, name)));
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions tools/platforms/WindowsPlatform.hx
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ class WindowsPlatform extends PlatformTarget
if (StringTools.endsWith(dependency.path, ".dll"))
{
var fileName = Path.withoutDirectory(dependency.path);
System.copyIfNewer(dependency.path, applicationDirectory + "/" + fileName);
copyIfNewer(dependency.path, applicationDirectory + "/" + fileName);
}
}

Expand Down Expand Up @@ -1121,7 +1121,7 @@ class WindowsPlatform extends PlatformTarget
var name = Path.withoutDirectory(dependency.path);

context.linkedLibraries.push("./js/lib/" + name);
System.copyIfNewer(dependency.path, Path.combine(destination, Path.combine("js/lib", name)));
copyIfNewer(dependency.path, Path.combine(destination, Path.combine("js/lib", name)));
}
}

Expand Down

0 comments on commit 6a23b6e

Please sign in to comment.