github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/test/setup/reposetup/setup_files.go (about) 1 package reposetup 2 3 import ( 4 "os" 5 "path/filepath" 6 ) 7 8 const ( 9 dirMode = 0755 10 fileMode = 0644 11 12 fileData = "hello world" 13 ) 14 15 /* 16 Directory structure: 17 18 files 19 ├── deeplynested 20 │ └── a 21 │ ├── b 22 │ │ ├── c 23 │ │ │ ├── d 24 │ │ │ │ ├── f_d_one 25 │ │ │ │ ├── f_d_two 26 │ │ │ │ ├── f_one 27 │ │ │ │ ├── f_three 28 │ │ │ │ └── f_two 29 │ │ │ ├── f_c_one 30 │ │ │ └── f_c_two 31 │ │ ├── f_b_one 32 │ │ └── f_b_two 33 │ └── f_a_one 34 ├── hardlinks 35 ├── regulars 36 │ ├── f_one 37 │ ├── f_three 38 │ └── f_two 39 ├── symlinks 40 └── wildcards 41 └── a 42 ├── b 43 │ ├── c 44 │ │ ├── d 45 │ │ │ ├── f_1 46 │ │ │ ├── f_2 47 │ │ │ ├── f_3 48 │ │ │ ├── f_d_1 49 │ │ │ └── f_d_2 50 │ │ ├── f_c_1 51 │ │ └── f_c_2 52 │ ├── f_b_1 53 │ └── f_b_2 54 └── f_a_1 55 */ 56 func SetupBaseFileStructure(basePath string) []string { 57 dir := filepath.Join(basePath, "files") 58 dir = mkdir(dir) 59 60 var files []string 61 62 files = append(files, setupRegularFiles(dir)...) 63 files = append(files, setupDeeplyNestedFiles(dir)...) 64 files = append(files, setupWildcardFiles(dir)...) 65 files = append(files, setupSymlinkedFiles(dir)...) 66 files = append(files, setupHardlinkedFiles(dir)...) 67 68 return files 69 } 70 71 func mkdir(path ...string) string { 72 dir := filepath.Join(path...) 73 if err := os.MkdirAll(dir, dirMode); err != nil { 74 panic(err) 75 } 76 77 return dir 78 } 79 80 func mkfile(path ...string) string { 81 file := filepath.Join(path...) 82 if err := os.WriteFile(file, []byte(fileData), fileMode); err != nil { 83 panic(err) 84 } 85 86 return file 87 } 88 89 // Set up regular files. 90 func setupRegularFiles(basePath string) []string { 91 dir := filepath.Join(basePath, "regulars") 92 dir = mkdir(dir) 93 94 var files []string 95 96 files = append(files, mkfile(dir, "f_one")) 97 files = append(files, mkfile(dir, "f_two")) 98 files = append(files, mkfile(dir, "f_three")) 99 100 return files 101 } 102 103 // Set up deeply nested files. 104 func setupDeeplyNestedFiles(basePath string) []string { 105 dir := filepath.Join(basePath, "deeplynested") 106 dirA := filepath.Join(dir, "a") 107 dirB := filepath.Join(dir, "a/b") 108 dirC := filepath.Join(dir, "a/b/c") 109 dirD := filepath.Join(dir, "a/b/c/d") 110 dirLast := dirD 111 dir = mkdir(dirLast) 112 113 var files []string 114 115 files = append(files, mkfile(dir, "f_one")) 116 files = append(files, mkfile(dir, "f_two")) 117 files = append(files, mkfile(dir, "f_three")) 118 119 files = append(files, mkfile(dirA, "f_a_one")) 120 121 files = append(files, mkfile(dirB, "f_b_one")) 122 files = append(files, mkfile(dirB, "f_b_two")) 123 124 files = append(files, mkfile(dirC, "f_c_one")) 125 files = append(files, mkfile(dirC, "f_c_two")) 126 127 files = append(files, mkfile(dirD, "f_d_one")) 128 files = append(files, mkfile(dirD, "f_d_two")) 129 130 return files 131 } 132 133 // Set up bath structure used to apply wildcards. 134 func setupWildcardFiles(basePath string) []string { 135 dir := filepath.Join(basePath, "wildcards") 136 dirA := filepath.Join(dir, "a") 137 dirB := filepath.Join(dir, "a/b") 138 dirC := filepath.Join(dir, "a/b/c") 139 dirD := filepath.Join(dir, "a/b/c/d") 140 dirLast := dirD 141 dir = mkdir(dirLast) 142 143 var files []string 144 145 files = append(files, mkfile(dir, "f_1")) 146 files = append(files, mkfile(dir, "f_2")) 147 files = append(files, mkfile(dir, "f_3")) 148 149 files = append(files, mkfile(dirA, "f_a_1")) 150 151 files = append(files, mkfile(dirB, "f_b_1")) 152 files = append(files, mkfile(dirB, "f_b_2")) 153 154 files = append(files, mkfile(dirC, "f_c_1")) 155 files = append(files, mkfile(dirC, "f_c_2")) 156 157 files = append(files, mkfile(dirD, "f_d_1")) 158 files = append(files, mkfile(dirD, "f_d_2")) 159 160 return files 161 } 162 163 // Set up symlinked files. 164 func setupSymlinkedFiles(basePath string) []string { 165 dir := filepath.Join(basePath, "symlinks") 166 // dir = mkdir(dir) 167 _ = mkdir(dir) 168 169 return nil 170 } 171 172 // Set up hardlinked files. 173 func setupHardlinkedFiles(basePath string) []string { 174 dir := filepath.Join(basePath, "hardlinks") 175 // dir = mkdir(dir) 176 _ = mkdir(dir) 177 178 return nil 179 }