pkg.re/essentialkaos/ek@v12.36.0+incompatible/fsutil/walker.go (about)

     1  // +build !windows
     2  
     3  package fsutil
     4  
     5  // ////////////////////////////////////////////////////////////////////////////////// //
     6  //                                                                                    //
     7  //                         Copyright (c) 2021 ESSENTIAL KAOS                          //
     8  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     9  //                                                                                    //
    10  // ////////////////////////////////////////////////////////////////////////////////// //
    11  
    12  import (
    13  	"os"
    14  )
    15  
    16  // ////////////////////////////////////////////////////////////////////////////////// //
    17  
    18  var dirStack []string
    19  
    20  // ////////////////////////////////////////////////////////////////////////////////// //
    21  
    22  // Push changes current working directory and add previous working directory to stack
    23  func Push(dir string) string {
    24  	var wd string
    25  
    26  	if dirStack == nil {
    27  		wd, _ = os.Getwd()
    28  		dirStack = append(dirStack, wd)
    29  	}
    30  
    31  	err := os.Chdir(dir)
    32  
    33  	if err != nil {
    34  		return ""
    35  	}
    36  
    37  	wd, _ = os.Getwd()
    38  
    39  	dirStack = append(dirStack, wd)
    40  
    41  	return wd
    42  }
    43  
    44  // Pop changes current working directory to previous in stack
    45  func Pop() string {
    46  	var wd string
    47  
    48  	if dirStack == nil {
    49  		wd, _ = os.Getwd()
    50  		dirStack = append(dirStack, wd)
    51  	}
    52  
    53  	dl := len(dirStack)
    54  
    55  	switch dl {
    56  
    57  	case 0, 1:
    58  		// nop
    59  
    60  	default:
    61  		err := os.Chdir(dirStack[dl-2])
    62  
    63  		if err != nil {
    64  			return ""
    65  		}
    66  
    67  		dirStack = dirStack[0 : dl-1]
    68  	}
    69  
    70  	wd, _ = os.Getwd()
    71  
    72  	return wd
    73  }