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

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