Hi, I ran into a tricky part of the code that I would like some hints with. Background: I am investigating how to make it possible to make incremental builds after a rename or move of the rootDir (normal for incremental builds in CI servers running many executors on different slaves).
The first part was fairly easy to solve, in a not so pretty way, but with minimal changes. Now I can read the task history even after a move of directories. My solution for the first part was to use the incoming task in CacheBackedTaskHistoryRepository to get the project root dir and then strip that part from the path in the binary file just before serializing. Changing the internal representation to non absolute will have way too big impact for me to grasp so I figured small change (a new boolan before the path) in the binary format was better. public void write(Encoder encoder, LazyTaskExecution execution) throws Exception { ... encoder.writeInt(execution.getOutputFiles().size()); for (String outputFile : execution.getOutputFiles()) { if (canBeConvertedFromAbsolutePath(outputFile)){ encoder.writeBoolean(true); encoder.writeString(convertFromAbsolutePath(outputFile)); }else{ encoder.writeBoolean(false); encoder.writeString(outputFile); } } ... } However, it was not done yet. Now I face that the CacheBackedFileSnapshotRepository is also involved in setting the UP-TO-DATE flag to false since it compares output files directly between runs. And this time the whole FileCollectionSnapshot is stored so my minimal change attempt will fail. Any suggestions for solving the CacheBackedFileSnapshotRepository? Here, the whole object is serialized and in the serializer, there is no access to Task, Project or Gradle. Replacing the object with relative file references would probably fail the serialization since it uses File.exists for each file. Regards, Joachim