pkg.re/essentialkaos/ek.v11@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 }