@@ -478,6 +478,49 @@ describe("Path", function()
478
478
src_dir :rm { recursive = true }
479
479
end )
480
480
481
+ it (" self copies folders only once" , function ()
482
+ local scan = require " plenary.scandir"
483
+ -- create nested folder
484
+ local src_dir = Path :new " src"
485
+ src_dir :mkdir ()
486
+ src_dir :joinpath (" file1.lua" ):touch ()
487
+ local src_sub_dir = src_dir :joinpath (" sub_dir" )
488
+ src_sub_dir :mkdir ()
489
+ src_sub_dir :joinpath (" file2.lua" ):touch ()
490
+ -- src
491
+ -- ├── file1.lua
492
+ -- └── sub_dir
493
+ -- └── file2_2.lua
494
+
495
+ local trg_dir = src_dir :joinpath (" src" )
496
+ src_dir :copy { destination = trg_dir , recursive = true }
497
+ -- src/
498
+ -- ├── file1.lua
499
+ -- ├── src
500
+ -- │ ├── file1.lua
501
+ -- │ └── sub_dir
502
+ -- │ └── file2.lua
503
+ -- └── sub_dir
504
+ -- └── file2.lua
505
+ local src_dir_data = scan .scan_dir (src_dir :absolute (), { depth = 1 , add_dirs = true })
506
+ local trg_dir_data = scan .scan_dir (trg_dir :absolute (), { depth = 1 , add_dirs = true })
507
+ table.insert (trg_dir_data , trg_dir :absolute ())
508
+ -- check that equal number of items
509
+ assert (# src_dir_data == # trg_dir_data )
510
+ -- insert file/folder stems into set
511
+ local path_set = {}
512
+ -- get suffixes of absolute paths in respective folders and check match by creating set
513
+ for _ , value in ipairs (src_dir_data ) do
514
+ value = table.remove (Path :new (value ):_split ())
515
+ path_set [value ] = true
516
+ end
517
+ for _ , value in ipairs (trg_dir_data ) do
518
+ value = table.remove (Path :new (value ):_split ())
519
+ assert (path_set [value ])
520
+ end
521
+ src_dir :rm { recursive = true }
522
+ end )
523
+
481
524
it (" can copy directories recursively" , function ()
482
525
-- vim.tbl_flatten doesn't work here as copy doesn't return a list
483
526
local flatten
0 commit comments