utils.go: added function ExpandPath
This commit is contained in:
		
							parent
							
								
									b4529499d6
								
							
						
					
					
						commit
						e35d4e3f70
					
				
							
								
								
									
										38
									
								
								utils.go
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								utils.go
									
									
									
									
									
								
							@ -6,7 +6,11 @@ package expr
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"os/user"
 | 
				
			||||||
 | 
						"path"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func IsString(v any) (ok bool) {
 | 
					func IsString(v any) (ok bool) {
 | 
				
			||||||
@ -221,3 +225,37 @@ func ForAll[T, V any](ts []T, fn func(T) V) []V {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return result
 | 
						return result
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ExpandPath(sourcePath string) (expandedPath string, err error) {
 | 
				
			||||||
 | 
						for expandedPath = os.ExpandEnv(sourcePath); expandedPath != sourcePath; expandedPath = os.ExpandEnv(sourcePath) {
 | 
				
			||||||
 | 
							sourcePath = expandedPath
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if strings.HasPrefix(sourcePath, "~") {
 | 
				
			||||||
 | 
							var home, userName, remainder string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							slashPos := strings.IndexRune(sourcePath, '/')
 | 
				
			||||||
 | 
							if slashPos > 0 {
 | 
				
			||||||
 | 
								userName = sourcePath[1:slashPos]
 | 
				
			||||||
 | 
								remainder = sourcePath[slashPos:]
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								userName = sourcePath[1:]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if len(userName) == 0 {
 | 
				
			||||||
 | 
								home, err = os.UserHomeDir()
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								var userInfo *user.User
 | 
				
			||||||
 | 
								userInfo, err = user.Lookup(userName)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								home = userInfo.HomeDir
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							expandedPath = path.Join(home, remainder)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user