@@ -36,6 +36,7 @@ import org.modelix.streams.IExecutableStream
36
36
import org.modelix.streams.IStream
37
37
import org.modelix.streams.getBlocking
38
38
import org.modelix.streams.iterateBlocking
39
+ import org.modelix.streams.plus
39
40
import org.slf4j.LoggerFactory
40
41
import java.util.UUID
41
42
@@ -390,9 +391,16 @@ class RepositoriesManager(val stores: StoreManager) : IRepositoriesManager {
390
391
val store = stores.getAsyncStore(repository?.takeIf { isIsolated(it) ? : false })
391
392
return store.getStreamExecutor().queryManyLater {
392
393
val version = CLVersion .loadFromHash(versionHash, store)
393
- IStream .many(filter.knownVersions).flatMap { CLVersion .tryLoadFromHash(it, store) }.toList().flatMap { knownVersions ->
394
- version.diff(knownVersions, filter).map { it.getHashString() to it.data.serialize() }
395
- }
394
+
395
+ val diff = IStream .many(filter.knownVersions).flatMap { CLVersion .tryLoadFromHash(it, store) }.toList()
396
+ .flatMap { knownVersions ->
397
+ version.diff(knownVersions, filter)
398
+ }
399
+ val versionHash = version.getObjectHash()
400
+ // The version itself is always included, because version objects on the client are weakly referenced,
401
+ // and it may already be garbage collected.
402
+ (IStream .of(version.asObject()) + diff.filter { it.getHash() != versionHash })
403
+ .map { it.getHashString() to it.data.serialize() }
396
404
}.let { ObjectDataFlow (it) }
397
405
}
398
406
0 commit comments