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  }