On 08.06.2018 00:30, Branko Čibej wrote:

Just FYI: in that case svn would have a requirement for NTFS. Because
both hard links (for files) and junctions (for directories) only work
on NTFS. So it wouldn't be possible anymore to use svn on e.g. a usb
stick formatted with FAT32.

Yes ... we'd _also_ have to detect the capabilities of the underlying
filesystem.

And not just that: you'd also have to check whether a reparse point is in fact a junction and not something else (like the sparse files of the OneDrive folder).

On Windows, the MoveFileEx() API which is used by win32_file_rename
which is used by svn_io_file_rename2 can work that way: the flag
MOVEFILE_COPY_ALLOWED must be passed as well. Then the Move works
across volumes because Windows then does the move as a copy/delete
instead.

We do use that flag, but — just like cross-device copies on Unix — the
move is no longer atomic, which could break the working copy quite badly.

there's also the MoveFileTransacted(), but MS recommends to not use that if there's another way to do it.

Also: the current implementation on Windows handles links wrong: it
assumes that a reparse point is always a junction, but that's not the
case. A junction is just a special form of a reparse point.

Well, the more patches we get to fix these issues, the better.

In the mean time, can we apply my patch to make things work with OneDrive folders?

Stefan

Reply via email to