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 }