mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(fileio): use first available directory in backupdir for backupcopy (#20655)
Fix backups failing for symlink files
Set backup to NULL prior to continuing & Clear backup prior to NULL set
to avoid leaking
Fixes #11349
Remove testing hacks in scripts for windows
Skip FreeBSD
Something appears up with these types of tests for FreeBSD on
Circus, see 2d6735d8ce
This commit is contained in:
parent
95f2f3cb5e
commit
19a487bc86
@ -2781,10 +2781,11 @@ int buf_write(buf_T *buf, char *fname, char *sfname, linenr_T start, linenr_T en
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// copy the file
|
// copy the file
|
||||||
if (os_copy(fname, backup, UV_FS_COPYFILE_FICLONE)
|
if (os_copy(fname, backup, UV_FS_COPYFILE_FICLONE) != 0) {
|
||||||
!= 0) {
|
SET_ERRMSG(_("E509: Cannot create backup file (add ! to override)"));
|
||||||
SET_ERRMSG(_("E506: Can't write to backup file "
|
XFREE_CLEAR(backup);
|
||||||
"(add ! to override)"));
|
backup = NULL;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
@ -2795,6 +2796,7 @@ int buf_write(buf_T *buf, char *fname, char *sfname, linenr_T start, linenr_T en
|
|||||||
#ifdef HAVE_ACL
|
#ifdef HAVE_ACL
|
||||||
mch_set_acl((char_u *)backup, acl);
|
mch_set_acl((char_u *)backup, acl);
|
||||||
#endif
|
#endif
|
||||||
|
SET_ERRMSG(NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
local lfs = require('lfs')
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
|
||||||
local assert_log = helpers.assert_log
|
local assert_log = helpers.assert_log
|
||||||
@ -5,6 +6,7 @@ local assert_nolog = helpers.assert_nolog
|
|||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
local neq = helpers.neq
|
||||||
local ok = helpers.ok
|
local ok = helpers.ok
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
local funcs = helpers.funcs
|
local funcs = helpers.funcs
|
||||||
@ -132,6 +134,57 @@ describe('fileio', function()
|
|||||||
eq('foo', foo_contents);
|
eq('foo', foo_contents);
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('backup symlinked files #11349', function()
|
||||||
|
if isCI('cirrus') then
|
||||||
|
pending('FIXME: cirrus')
|
||||||
|
end
|
||||||
|
clear()
|
||||||
|
|
||||||
|
local initial_content = 'foo'
|
||||||
|
local link_file_name = 'Xtest_startup_file2'
|
||||||
|
local backup_file_name = link_file_name .. '~'
|
||||||
|
|
||||||
|
write_file('Xtest_startup_file1', initial_content, false)
|
||||||
|
lfs.link('Xtest_startup_file1', link_file_name, true)
|
||||||
|
command('set backup')
|
||||||
|
command('set backupcopy=yes')
|
||||||
|
command('edit ' .. link_file_name)
|
||||||
|
feed('Abar<esc>')
|
||||||
|
command('write')
|
||||||
|
|
||||||
|
local backup_raw = read_file(backup_file_name)
|
||||||
|
neq(nil, backup_raw, "Expected backup file " .. backup_file_name .. "to exist but did not")
|
||||||
|
eq(initial_content, trim(backup_raw), 'Expected backup to contain original contents')
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
it('backup symlinked files in first avialable backupdir #11349', function()
|
||||||
|
if isCI('cirrus') then
|
||||||
|
pending('FIXME: cirrus')
|
||||||
|
end
|
||||||
|
clear()
|
||||||
|
|
||||||
|
local initial_content = 'foo'
|
||||||
|
local backup_dir = 'Xtest_backupdir'
|
||||||
|
local sep = helpers.get_pathsep()
|
||||||
|
local link_file_name = 'Xtest_startup_file2'
|
||||||
|
local backup_file_name = backup_dir .. sep .. link_file_name .. '~'
|
||||||
|
|
||||||
|
write_file('Xtest_startup_file1', initial_content, false)
|
||||||
|
lfs.link('Xtest_startup_file1', link_file_name, true)
|
||||||
|
mkdir(backup_dir)
|
||||||
|
command('set backup')
|
||||||
|
command('set backupcopy=yes')
|
||||||
|
command('set backupdir=.__this_does_not_exist__,' .. backup_dir)
|
||||||
|
command('edit ' .. link_file_name)
|
||||||
|
feed('Abar<esc>')
|
||||||
|
command('write')
|
||||||
|
|
||||||
|
local backup_raw = read_file(backup_file_name)
|
||||||
|
neq(nil, backup_raw, "Expected backup file " .. backup_file_name .. " to exist but did not")
|
||||||
|
eq(initial_content, trim(backup_raw), 'Expected backup to contain original contents')
|
||||||
|
end)
|
||||||
|
|
||||||
it('readfile() on multibyte filename #10586', function()
|
it('readfile() on multibyte filename #10586', function()
|
||||||
clear()
|
clear()
|
||||||
local text = {
|
local text = {
|
||||||
|
Loading…
Reference in New Issue
Block a user