On Sat, 12 Sep 2009, Brandon S. Allbery KF8NH wrote:

On Sep 12, 2009, at 11:22 , Trent W. Buck wrote:
Jason Dagit <da...@codersbase.com> writes:
which ensures that when the operating system is not WIN32, that
renaming of files will be performed by the OS shell.

I'm also puzzled as to why this works -- surely mv(1) assumes POSIX
semantics, too?  I would be interested in seeing the exact error
transcript, preferably as an issue on bugs.d.n.  I'm not sure the
problem has been diagnosed correctly.

In order to handle the case where you're moving across filesystems, mv(1) gracefully degrades to cp + rm. rename(2) does not. This also happens to work around compatibility issues with native CIFS (and possibly older HP/UX, not that anyone likely cares).

I don't think that darcs is ever likely to want to do a move across filesystems - unless someone has actually put a mount point in the middle of their darcs repo (and perhaps not even then for the metadata operations such as the one that was failing here, as I think those are all inside a single directory).

Darcs already has a WIN32-specific workaround for renaming going wrong when the new file exists, and my initial guess was that was what was going wrong here. The workaround just tries to remove the new file and retries the rename. The original poster doesn't make clear whether he tried my suggested fix enabling that workaround unconditionally before resorting to shelling out.

Cheers,

Ganesh
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to