diff --git a/lib/vfs/ourdb_fs/directory.v b/lib/vfs/ourdb_fs/directory.v index aa8535b5..9cf48d75 100644 --- a/lib/vfs/ourdb_fs/directory.v +++ b/lib/vfs/ourdb_fs/directory.v @@ -248,7 +248,30 @@ pub fn (mut dir Directory) move(src_name string, dst_name string) !FSEntry { if mut entry := dir.myvfs.load_entry(child_id) { if entry.metadata.name == src_name { found = true - // Create a new directory entry with the new name + entry.metadata.name = dst_name + entry.metadata.modified_at = time.now().unix() + dir.myvfs.save_entry(entry)! + new_entry = entry + break + } + } + } + + if !found { + return error('${src_name} not found') + } + + return new_entry +} + +pub fn (mut dir Directory) rename(src_name string, dst_name string) !FSEntry { + mut found := false + mut new_entry := FSEntry(dir) + + for child_id in dir.children { + if mut entry := dir.myvfs.load_entry(child_id) { + if entry.metadata.name == src_name { + found = true entry.metadata.name = dst_name entry.metadata.modified_at = time.now().unix() dir.myvfs.save_entry(entry)! diff --git a/lib/vfs/vfsourdb/vfsourdb.v b/lib/vfs/vfsourdb/vfsourdb.v index 54bd79fb..3743e207 100644 --- a/lib/vfs/vfsourdb/vfsourdb.v +++ b/lib/vfs/vfsourdb/vfsourdb.v @@ -127,8 +127,14 @@ pub fn (mut self OurDBVFS) get(path string) !vfscore.FSEntry { return convert_to_vfscore_entry(entry) } -pub fn (mut self OurDBVFS) rename(old_path string, new_path string) ! { - return error('Not implemented') +pub fn (mut self OurDBVFS) rename(old_path string, new_path string) !vfscore.FSEntry { + src_parent_path := os.dir(old_path) + src_name := os.base(old_path) + dst_name := os.base(new_path) + + mut src_parent_dir := self.get_directory(src_parent_path)! + renamed_dir := src_parent_dir.rename(src_name, dst_name)! + return convert_to_vfscore_entry(renamed_dir) } pub fn (mut self OurDBVFS) copy(src_path string, dst_path string) ! { diff --git a/lib/vfs/vfsourdb/vfsourdb_test.v b/lib/vfs/vfsourdb/vfsourdb_test.v index c48ee08c..f49584ed 100644 --- a/lib/vfs/vfsourdb/vfsourdb_test.v +++ b/lib/vfs/vfsourdb/vfsourdb_test.v @@ -56,31 +56,41 @@ fn test_vfsourdb() ! { assert entries.len == 1 assert entries[0].get_metadata().name == 'test.txt' + // Test directory rename + renamed_dir := vfs.rename('/test_dir2', '/test_dir')! + assert moved_dir.get_metadata().name == 'test_dir2' + assert moved_dir.get_metadata().file_type == .directory + + // Test directory listing + entries = vfs.dir_list('/test_dir')! + assert entries.len == 1 + assert entries[0].get_metadata().name == 'test.txt' + // Test exists - assert vfs.exists('/test_dir2') == true - assert vfs.exists('/test_dir2/test.txt') == true + assert vfs.exists('/test_dir') == true + assert vfs.exists('/test_dir/test.txt') == true assert vfs.exists('/nonexistent') == false // Test symlink creation and reading - vfs.link_create('/test_dir2/test.txt', '/test_dir2/test_link')! - link_target := vfs.link_read('/test_dir2/test_link')! - assert link_target == '/test_dir2/test.txt' + vfs.link_create('/test_dir/test.txt', '/test_dir/test_link')! + link_target := vfs.link_read('/test_dir/test_link')! + assert link_target == '/test_dir/test.txt' // Test symlink deletion - vfs.link_delete('/test_dir2/test_link')! - assert vfs.exists('/test_dir2/test_link') == false + vfs.link_delete('/test_dir/test_link')! + assert vfs.exists('/test_dir/test_link') == false // Test file deletion - vfs.file_delete('/test_dir2/test.txt')! - assert vfs.exists('/test_dir2/test.txt') == false - assert vfs.exists('/test_dir2') == true + vfs.file_delete('/test_dir/test.txt')! + assert vfs.exists('/test_dir/test.txt') == false + assert vfs.exists('/test_dir') == true - entries = vfs.dir_list('/test_dir2')! + entries = vfs.dir_list('/test_dir')! assert entries.len == 0 // Test directory deletion - vfs.dir_delete('/test_dir2')! - assert vfs.exists('/test_dir2') == false + vfs.dir_delete('/test_dir')! + assert vfs.exists('/test_dir') == false println('Test completed successfully!') }