From 84cafb9c97fa4678b45acdc56c8b2f95231fc3e7 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Mon, 2 Mar 2026 08:52:23 +0800 Subject: [PATCH] vim-patch:9.2.0037: netrw: need better tests for absolute paths Problem: netrw: need better tests for absolute paths Solution: Use absolutepath(), instead of regex test (Miguel Barro). closes: vim/vim#19477 https://github.com/vim/vim/commit/bd1dc5b1a652e9f2ba45e3695ea2d83e81992c88 Cherry-pick a typo fix from latest Vim. Co-authored-by: Miguel Barro --- .../pack/dist/opt/netrw/autoload/netrw.vim | 3 +- test/old/testdir/test_plugin_netrw.vim | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim index ba9f511138..670de1cc15 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim @@ -19,6 +19,7 @@ " 2025 Dec 26 by Vim Project fix use of g:netrw_cygwin #19015 " 2026 Jan 19 by Vim Project do not create swapfiles #18854 " 2026 Feb 15 by Vim Project fix global variable initialization for MS-Windows #19287 +" 2026 Feb 21 by Vim Project better absolute path detection on MS-Windows #19477 " Copyright: Copyright (C) 2016 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright @@ -3239,7 +3240,7 @@ function s:NetrwFile(fname) endif if !g:netrw_cygwin && has("win32") - if fname =~ '^\' || fname =~ '^\a:\' + if isabsolutepath(fname) " windows, but full path given let ret= fname else diff --git a/test/old/testdir/test_plugin_netrw.vim b/test/old/testdir/test_plugin_netrw.vim index ac2cb9fb9e..de52692f81 100644 --- a/test/old/testdir/test_plugin_netrw.vim +++ b/test/old/testdir/test_plugin_netrw.vim @@ -113,7 +113,6 @@ function Test_NetrwMarkFileCopy_SameDir(dir = $HOME, symlink = 0) abort endif endfunction - " Test file copy operations via s:NetrwMarkFileMove() function Test_NetrwMarkFileMove(source_dir, target_dir, marked_files) abort " set up @@ -128,6 +127,12 @@ function Test_NetrwMarkFileMove(source_dir, target_dir, marked_files) abort bw endfunction +" Test how netrw fixes paths according with settings +" (g:netrw_keepdir, g:netrw_cygwin, tree style ...) +function Test_NetrwFile(fname) abort + return s:NetrwFile(a:fname) +endfunction + " }}} END @@ -310,6 +315,30 @@ func Test_netrw_wipe_empty_buffer_fastpath() unlet! netrw_fastbrowse endfunction +" Test UNC paths on windows +func Test_netrw_check_UNC_paths() + CheckMSWindows + + let test_paths = [ + \ '\\Server2\Share\Test\Foo.txt', + \ '//Server2/Share/Test/Foo.txt', + \ '\\Server2\Share\Test\', + \ '//Server2/Share/Test/', + \ '\\wsl.localhost\Ubuntu\home\user\_vimrc', + \ '//wsl.localhost/Ubuntu/home/user/_vimrc', + \ '\\wsl.localhost\Ubuntu\home\user', + \ '//wsl.localhost/Ubuntu/home/user'] + + " The paths must be interpreted as absolute ones + for path in test_paths + call assert_equal( + \ path, + \ Test_NetrwFile(path), + \ $"UNC path: {path} misinterpreted") + endfor + +endfunction + " --------------------------------- " Testing file management functions " ---------------------------------