There aren't many more similiar problems.
There are basically two types of junctions/symlinks:
1) Inner Links
2) Outer Links
An Inner Link references within the "root" of the top-folder being copied/moved.
Whereas an Outer Link references outside of the "root".
These inner/outer links can themselves also be inner/outer with respect to where they reference.
When dealing with Links (Junctions/Symlinks),
1) Build the directory structure with normal folders.
2) Note Symlinked (or Hardlinked) files.
3) Check for any conflicts with said files.
-- Be that duplicate names in target or
-- Hardlinks that would traverse outside the Drive in question.
Allow the user to choose,
1) An overriding default behaviour for dealing with these conflicts.
2) Ask the user what to do with the conflicts, one by one.
While processing said conflicts:
1) Log the conflicts that arise, and if they are automatically handled:
2) Notify the user what was done:
---> Link was broken, and not copied.
---> Link was traversed, and duplicate non-link was created.
It doesn't matter what the
user expects --- so long as the user is notified about HOW the conflicts were handled.
Note, TC shouldn't just notify the user of a NAME conflict, when one or more of the files are Links, it should also notify that the source in question (or target) is a link.
TC could also notify which is the newer file - be that a link source, link target. As well as indicating whether a given action will duplicate content, or break a link reference.
Currently we just wind up with duplicated content and no option whatsoever. You are trying to claim that due to the possibility that something may not occur like the
user expects then nothing should be done at all. That is a fallacious argument.
2. folderwithlinktargets may already exist in the target, and the user may choose to skip some files when overwriting. Then the copied links may point to this older data, while the user expects to see the newer data from the source.
This makes no sense to me. If a file is symlinked it points to specific file/data; similiarly for a hardlink (that can't span drives).
If a symlink exists in the target and is NOT overwritten by a file with the same name, it will continue to reference what it did before.
How is that unexpected behaviour? And how is that not what the user would expect? You skipped copying the file, it remains what it was before. How can the user expect to see newer data from "source" if they skipped copying it?