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