diff options
Diffstat (limited to 'test/functional/helpers.lua')
-rw-r--r-- | test/functional/helpers.lua | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 13b06e7f1b..a27b0e7783 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -428,6 +428,16 @@ local function expect_any(contents) return ok(nil ~= string.find(curbuf_contents(), contents, 1, true)) end +local function win_remove_readonly_attr(abspath) + assert(os_name() == "windows") + local cmd = 'attrib -h -r "'..abspath..'"' + -- TODO: Lua 5.2 io.popen():close() returns better info: + -- http://stackoverflow.com/a/14031974 + -- https://www.lua.org/manual/5.2/manual.html#pdf-file:close + local exitcode = os.execute(cmd) + return (exitcode == 0), exitcode +end + local function do_rmdir(path) if lfs.attributes(path, 'mode') ~= 'directory' then return nil @@ -443,8 +453,21 @@ local function do_rmdir(path) else local ret, err = os.remove(abspath) if not ret then - error('os.remove: '..err) - return nil + if os_name() == "windows" then + -- Remove `readonly` attribute (if any)... + local attr_status, attr_rv = win_remove_readonly_attr(abspath) + if not attr_status then + error('win_remove_readonly_attr: '..attr_rv) + return nil + end + -- ...then try again. + ret, err = os.remove(abspath) + end + + if not ret then + error('os.remove: '..err) + return nil + end end end end |