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  }