Project

General

Profile

Backport #8609

FileUtils.mv fails across devices on Windows

Added by luislavena (Luis Lavena) almost 6 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal

Description

Reproduction code: https://gist.github.com/luislavena/5179408

The issue is that Ruby is using MoveFile under the covers: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365239(v=vs.85).aspx

Quote directly from the MoveFile docs: "The one caveat is that the MoveFile function will fail on directory moves when the destination is on a different volume."

Instead, MoveFileEx should be used with the MOVEFILE_COPY_ALLOWED flag. This function has existed since XP, and since Ruby 1.9 is XP+, we can safely switch to this: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx

The MoveFileEx call with the proper flag will just do the right thing.


Related issues

Related to Backport200 - Backport #8109: FileUtils.mv fails across devices on WindowsClosed03/18/2013Actions

Associated revisions

Revision e6716b5e
Added by usa (Usaku NAKAMURA) almost 6 years ago

merge revision(s) 40001: [Backport #8609]

    * win32/win32.c (wrename): use MoveFileExW instead of MoveFileW,
      because the latter fails on cross device file move of some
      environments.
      fix [ruby-core:53492] [Bug #8109]
      reported by mitchellh (Mitchell Hashimoto)

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@42460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 42460
Added by usa (Usaku NAKAMURA) almost 6 years ago

merge revision(s) 40001: [Backport #8609]

* win32/win32.c (wrename): use MoveFileExW instead of MoveFileW,
  because the latter fails on cross device file move of some
  environments.
  fix [ruby-core:53492] [Bug #8109]
  reported by mitchellh (Mitchell Hashimoto)

History

#1

Updated by luislavena (Luis Lavena) almost 6 years ago

Please backport r40001 to Ruby 1.9.3 so File.rename work across devices.

Thank you.

#2

Updated by usa (Usaku NAKAMURA) almost 6 years ago

  • Status changed from Assigned to Closed

This issue was solved with changeset r42460.
Luis, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 40001: [Backport #8609]

* win32/win32.c (wrename): use MoveFileExW instead of MoveFileW,
  because the latter fails on cross device file move of some
  environments.
  fix [ruby-core:53492] [Bug #8109]
  reported by mitchellh (Mitchell Hashimoto)

Also available in: Atom PDF