Class ReoccupiedMovedPathPlanner
Finds the one combination that corrupts an additive package upgrade: a GUID that the PREVIOUS release
shipped at one path now ships at a different path, while the OLD path is occupied by a different GUID
in the current shipped set. Unity imports by GUID — an incoming entry whose GUID already exists in the
customer project is written onto the path that currently OWNS that GUID, not onto the incoming path.
On an upgrading project the moved file's content is therefore redirect-written onto the old path, the
new path is never created, and the different-GUID occupant of the old path is dropped as an unknown
GUID collision — compilation breaks, and the cleaner cannot heal it because the old path is still a
shipped path (so the stranded file is not an orphan). Each half alone is safe: a GUID-preserving move
is covered by the restore payloads, and a path that gets a new GUID is covered by the tombstones. Only
the combination is a defect; the remedy is to keep the previous-release GUID at the old path and give
the moved file the new GUID, or to stop re-occupying the old path. A blank-GUID occupant is never
reported: AssetDatabase.AssetPathToGUID yields a blank GUID only for a path that does not exist,
so a guid-less entry is not a shipped file and cannot take part in a redirect-write. A GUID the previous
snapshot lists at several paths is checked against every one of them. Pure: no Unity API calls, so it is
unit-testable without a running editor.
Inheritance
ReoccupiedMovedPathPlanner
Assembly: Serenity.PackageBootstrapper.Editor.dll
Syntax
public static class ReoccupiedMovedPathPlanner
Methods
FindReoccupiedMovedPaths(IEnumerable<ShippedAssetEntry>, IEnumerable<ShippedAssetEntry>)
Declaration
public static List<ReoccupiedMovedPath> FindReoccupiedMovedPaths(IEnumerable<ShippedAssetEntry> previousReleaseEntries, IEnumerable<ShippedAssetEntry> currentEntries)
Parameters
Returns