=?UTF-8?B?QnJhbmtvIMSMaWJlag==?= <br...@wandisco.com> wrote: > On 19.10.2012 04:41, Josh Rowe wrote: >> I didn't see this reported in the bug database, nor did a casual web >> search turn this up: >> >> When de-duplication is enabled on a Windows Server 2012 NTFS volume, >> the de-duplication engine replaces files that contain duplicate data >> with reparse points. Subversion then reports that those files have >> unexpectedly changed special status. For example: >> >> PS I:\temp\packages-2> svn commit >> svn: E145001: Commit failed (details follow): >> svn: E145001: Entry >> 'I:\temp\packages-2\Roslyn.Compilers.VisualBasic.1.2.20906.2\lib \net45 >> \Roslyn.Compilers.VisualBasic.dll' has unexpectedly changed special >> status >> >> Once the files have been deduplicated, the workaround is to disable >> deduplication on a folder, then copy the versioned controlled >> directory to the new location. >> >> Repro steps: >> >> Enable deduplication on a Win2012 NTFS volume. >> Check out two copies of a repository onto the deduplicated volume. >> Wait for deduplication to occur, or force it to happen. >> Make a change to one copy of the repository. >> Attempt to commit with "svn commit". > > > This is not a Subversion bug. If the user tells NTFS to replace files > with application-visible symbolic links, which apparently is what NTFS > deduplication does, then there's hardly a sane way for Subversion to > know that the user didn't do this intentionally. > Symbolic links in Windows are reparse points, but not all reparse points are symbolic links. The de-duplication appears to use a specific data deduplication type of reparse point, so Subversion could make the distinction in a perfectly sane manner.
Every reparse point has an identifier tag identifying the type of reparse point which includes the following possible values: IO_REPARSE_TAG_CSV IO_REPARSE_TAG_DEDUP IO_REPARSE_TAG_DFS IO_REPARSE_TAG_DFSR IO_REPARSE_TAG_HSM IO_REPARSE_TAG_HSM2 IO_REPARSE_TAG_MOUNT_POINT IO_REPARSE_TAG_NFS IO_REPARSE_TAG_RESERVED_ONE IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ZERO IO_REPARSE_TAG_SIS IO_REPARSE_TAG_SYMLINK IO_REPARSE_TAG_WIM (other values are also possible as Microsoft provide a mechanism for defining new tags) If Subversion treated the IO_REPARSE_TAG_SYMLINK as a symlink and any other type as a normal file that might be a sane solution. It is unfair to blame the user: the user may not have control over the settings an administrator makes for the server file system. There is a workaround (have Subversion checkouts excluded from deduplication by policy) but that assumes the administrator of the server is willing to make appropriate policy changes.