mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-09-20 05:27:31 -07:00
fix(debug): trace startup logic
This commit is contained in:
parent
a7b0021179
commit
e3b2d86b06
|
@ -11,6 +11,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gookit/config/v2"
|
||||
"github.com/gookit/config/v2/json"
|
||||
|
@ -90,6 +91,7 @@ func LoadConfig(env environment.Environment) *Config {
|
|||
}
|
||||
|
||||
func loadConfig(env environment.Environment) *Config {
|
||||
defer env.Trace(time.Now(), "config.loadConfig")
|
||||
var cfg Config
|
||||
configFile := env.Flags().Config
|
||||
if _, err := os.Stat(configFile); err != nil {
|
||||
|
|
|
@ -197,6 +197,7 @@ func (e *Engine) PrintDebug(startTime time.Time, version string) string {
|
|||
}
|
||||
e.write(fmt.Sprintf("\n\x1b[1mRun duration:\x1b[0m %s\n", time.Since(startTime)))
|
||||
e.write(fmt.Sprintf("\n\x1b[1mCache path:\x1b[0m %s\n", e.Env.CachePath()))
|
||||
e.write(fmt.Sprintf("\n\x1b[1mConfig path:\x1b[0m %s\n", e.Env.Flags().Config))
|
||||
e.write("\n\x1b[1mLogs:\x1b[0m\n\n")
|
||||
e.write(e.Env.Logs())
|
||||
return e.string()
|
||||
|
|
|
@ -51,7 +51,7 @@ func (env *ShellEnvironment) parseBatteryOutput(output string) (*BatteryInfo, er
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) BatteryState() (*BatteryInfo, error) {
|
||||
defer env.trace(time.Now(), "BatteryInfo")
|
||||
defer env.Trace(time.Now(), "BatteryInfo")
|
||||
output, err := env.RunCommand("pmset", "-g", "batt")
|
||||
if err != nil {
|
||||
env.log(Error, "BatteryInfo", err.Error())
|
||||
|
|
|
@ -189,6 +189,7 @@ type Environment interface {
|
|||
ConvertToWindowsPath(path string) string
|
||||
WifiNetwork() (*WifiInfo, error)
|
||||
TemplateCache() *TemplateCache
|
||||
Trace(start time.Time, function string, args ...string)
|
||||
}
|
||||
|
||||
type commandCache struct {
|
||||
|
@ -227,6 +228,10 @@ type ShellEnvironment struct {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) Init() {
|
||||
defer env.Trace(time.Now(), "Init")
|
||||
if env.CmdFlags.Debug {
|
||||
log.SetOutput(&env.logBuilder)
|
||||
}
|
||||
if env.CmdFlags == nil {
|
||||
env.CmdFlags = &Flags{}
|
||||
}
|
||||
|
@ -236,12 +241,10 @@ func (env *ShellEnvironment) Init() {
|
|||
env.cmdCache = &commandCache{
|
||||
commands: newConcurrentMap(),
|
||||
}
|
||||
if env.CmdFlags.Debug {
|
||||
log.SetOutput(&env.logBuilder)
|
||||
}
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) resolveConfigPath() {
|
||||
defer env.Trace(time.Now(), "resolveConfigPath")
|
||||
if len(env.CmdFlags.Config) == 0 {
|
||||
env.CmdFlags.Config = env.Getenv("POSH_THEME")
|
||||
}
|
||||
|
@ -274,6 +277,7 @@ func (env *ShellEnvironment) resolveConfigPath() {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) downloadConfig(location string) error {
|
||||
defer env.Trace(time.Now(), "downloadConfig", location)
|
||||
configPath := filepath.Join(env.CachePath(), "config.omp.json")
|
||||
cfg, err := env.HTTPRequest(location, 5000)
|
||||
if err != nil {
|
||||
|
@ -292,7 +296,7 @@ func (env *ShellEnvironment) downloadConfig(location string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) trace(start time.Time, function string, args ...string) {
|
||||
func (env *ShellEnvironment) Trace(start time.Time, function string, args ...string) {
|
||||
if !env.CmdFlags.Debug {
|
||||
return
|
||||
}
|
||||
|
@ -318,14 +322,14 @@ func (env *ShellEnvironment) debugF(function string, fn func() string) {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) Getenv(key string) string {
|
||||
defer env.trace(time.Now(), "Getenv", key)
|
||||
defer env.Trace(time.Now(), "Getenv", key)
|
||||
val := os.Getenv(key)
|
||||
env.log(Debug, "Getenv", val)
|
||||
return val
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) Pwd() string {
|
||||
defer env.trace(time.Now(), "Pwd")
|
||||
defer env.Trace(time.Now(), "Pwd")
|
||||
lock.Lock()
|
||||
defer func() {
|
||||
lock.Unlock()
|
||||
|
@ -353,7 +357,7 @@ func (env *ShellEnvironment) Pwd() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HasFiles(pattern string) bool {
|
||||
defer env.trace(time.Now(), "HasFiles", pattern)
|
||||
defer env.Trace(time.Now(), "HasFiles", pattern)
|
||||
cwd := env.Pwd()
|
||||
pattern = cwd + env.PathSeparator() + pattern
|
||||
matches, err := filepath.Glob(pattern)
|
||||
|
@ -374,7 +378,7 @@ func (env *ShellEnvironment) HasFiles(pattern string) bool {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HasFilesInDir(dir, pattern string) bool {
|
||||
defer env.trace(time.Now(), "HasFilesInDir", pattern)
|
||||
defer env.Trace(time.Now(), "HasFilesInDir", pattern)
|
||||
pattern = dir + env.PathSeparator() + pattern
|
||||
matches, err := filepath.Glob(pattern)
|
||||
if err != nil {
|
||||
|
@ -387,7 +391,7 @@ func (env *ShellEnvironment) HasFilesInDir(dir, pattern string) bool {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HasFileInParentDirs(pattern string, depth uint) bool {
|
||||
defer env.trace(time.Now(), "HasFileInParent", pattern, fmt.Sprint(depth))
|
||||
defer env.Trace(time.Now(), "HasFileInParent", pattern, fmt.Sprint(depth))
|
||||
currentFolder := env.Pwd()
|
||||
|
||||
for c := 0; c < int(depth); c++ {
|
||||
|
@ -408,7 +412,7 @@ func (env *ShellEnvironment) HasFileInParentDirs(pattern string, depth uint) boo
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HasFolder(folder string) bool {
|
||||
defer env.trace(time.Now(), "HasFolder", folder)
|
||||
defer env.Trace(time.Now(), "HasFolder", folder)
|
||||
f, err := os.Stat(folder)
|
||||
if err != nil {
|
||||
env.log(Debug, "HasFolder", "false")
|
||||
|
@ -423,7 +427,7 @@ func (env *ShellEnvironment) ResolveSymlink(path string) (string, error) {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) FileContent(file string) string {
|
||||
defer env.trace(time.Now(), "FileContent", file)
|
||||
defer env.Trace(time.Now(), "FileContent", file)
|
||||
if !filepath.IsAbs(file) {
|
||||
file = filepath.Join(env.Pwd(), file)
|
||||
}
|
||||
|
@ -438,7 +442,7 @@ func (env *ShellEnvironment) FileContent(file string) string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) LsDir(path string) []fs.DirEntry {
|
||||
defer env.trace(time.Now(), "LsDir", path)
|
||||
defer env.Trace(time.Now(), "LsDir", path)
|
||||
entries, err := os.ReadDir(path)
|
||||
if err != nil {
|
||||
env.log(Error, "LsDir", err.Error())
|
||||
|
@ -455,12 +459,12 @@ func (env *ShellEnvironment) LsDir(path string) []fs.DirEntry {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) PathSeparator() string {
|
||||
defer env.trace(time.Now(), "PathSeparator")
|
||||
defer env.Trace(time.Now(), "PathSeparator")
|
||||
return string(os.PathSeparator)
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) User() string {
|
||||
defer env.trace(time.Now(), "User")
|
||||
defer env.Trace(time.Now(), "User")
|
||||
user := os.Getenv("USER")
|
||||
if user == "" {
|
||||
user = os.Getenv("USERNAME")
|
||||
|
@ -470,7 +474,7 @@ func (env *ShellEnvironment) User() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) Host() (string, error) {
|
||||
defer env.trace(time.Now(), "Host")
|
||||
defer env.Trace(time.Now(), "Host")
|
||||
hostName, err := os.Hostname()
|
||||
if err != nil {
|
||||
env.log(Error, "Host", err.Error())
|
||||
|
@ -482,12 +486,12 @@ func (env *ShellEnvironment) Host() (string, error) {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) GOOS() string {
|
||||
defer env.trace(time.Now(), "GOOS")
|
||||
defer env.Trace(time.Now(), "GOOS")
|
||||
return runtime.GOOS
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) RunCommand(command string, args ...string) (string, error) {
|
||||
defer env.trace(time.Now(), "RunCommand", append([]string{command}, args...)...)
|
||||
defer env.Trace(time.Now(), "RunCommand", append([]string{command}, args...)...)
|
||||
if cmd, ok := env.cmdCache.get(command); ok {
|
||||
command = cmd
|
||||
}
|
||||
|
@ -514,7 +518,7 @@ func (env *ShellEnvironment) RunCommand(command string, args ...string) (string,
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) RunShellCommand(shell, command string) string {
|
||||
defer env.trace(time.Now(), "RunShellCommand", shell, command)
|
||||
defer env.Trace(time.Now(), "RunShellCommand", shell, command)
|
||||
if out, err := env.RunCommand(shell, "-c", command); err == nil {
|
||||
return out
|
||||
}
|
||||
|
@ -522,7 +526,7 @@ func (env *ShellEnvironment) RunShellCommand(shell, command string) string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) CommandPath(command string) string {
|
||||
defer env.trace(time.Now(), "HasCommand", command)
|
||||
defer env.Trace(time.Now(), "HasCommand", command)
|
||||
if path, ok := env.cmdCache.get(command); ok {
|
||||
return path
|
||||
}
|
||||
|
@ -548,12 +552,12 @@ func (env *ShellEnvironment) HasCommand(command string) bool {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) ErrorCode() int {
|
||||
defer env.trace(time.Now(), "ErrorCode")
|
||||
defer env.Trace(time.Now(), "ErrorCode")
|
||||
return env.CmdFlags.ErrorCode
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) ExecutionTime() float64 {
|
||||
defer env.trace(time.Now(), "ExecutionTime")
|
||||
defer env.Trace(time.Now(), "ExecutionTime")
|
||||
if env.CmdFlags.ExecutionTime < 0 {
|
||||
return 0
|
||||
}
|
||||
|
@ -561,12 +565,12 @@ func (env *ShellEnvironment) ExecutionTime() float64 {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) Flags() *Flags {
|
||||
defer env.trace(time.Now(), "Flags")
|
||||
defer env.Trace(time.Now(), "Flags")
|
||||
return env.CmdFlags
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) Shell() string {
|
||||
defer env.trace(time.Now(), "Shell")
|
||||
defer env.Trace(time.Now(), "Shell")
|
||||
if env.CmdFlags.Shell != "" {
|
||||
return env.CmdFlags.Shell
|
||||
}
|
||||
|
@ -591,7 +595,7 @@ func (env *ShellEnvironment) Shell() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HTTPRequest(targetURL string, timeout int, requestModifiers ...HTTPRequestModifier) ([]byte, error) {
|
||||
defer env.trace(time.Now(), "HTTPRequest", targetURL)
|
||||
defer env.Trace(time.Now(), "HTTPRequest", targetURL)
|
||||
ctx, cncl := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(timeout))
|
||||
defer cncl()
|
||||
request, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil)
|
||||
|
@ -624,7 +628,7 @@ func (env *ShellEnvironment) HTTPRequest(targetURL string, timeout int, requestM
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) HasParentFilePath(path string) (*FileInfo, error) {
|
||||
defer env.trace(time.Now(), "HasParentFilePath", path)
|
||||
defer env.Trace(time.Now(), "HasParentFilePath", path)
|
||||
currentFolder := env.Pwd()
|
||||
for {
|
||||
searchPath := filepath.Join(currentFolder, path)
|
||||
|
@ -649,7 +653,7 @@ func (env *ShellEnvironment) HasParentFilePath(path string) (*FileInfo, error) {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) StackCount() int {
|
||||
defer env.trace(time.Now(), "StackCount")
|
||||
defer env.Trace(time.Now(), "StackCount")
|
||||
if env.CmdFlags.StackCount < 0 {
|
||||
return 0
|
||||
}
|
||||
|
@ -669,7 +673,7 @@ func (env *ShellEnvironment) Logs() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) TemplateCache() *TemplateCache {
|
||||
defer env.trace(time.Now(), "TemplateCache")
|
||||
defer env.Trace(time.Now(), "TemplateCache")
|
||||
if env.tmplCache != nil {
|
||||
return env.tmplCache
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import (
|
|||
)
|
||||
|
||||
func (env *ShellEnvironment) Root() bool {
|
||||
defer env.trace(time.Now(), "Root")
|
||||
defer env.Trace(time.Now(), "Root")
|
||||
return os.Geteuid() == 0
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ func (env *ShellEnvironment) QueryWindowTitles(processName, windowTitleRegex str
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) IsWsl() bool {
|
||||
defer env.trace(time.Now(), "IsWsl")
|
||||
defer env.Trace(time.Now(), "IsWsl")
|
||||
// one way to check
|
||||
// version := env.FileContent("/proc/version")
|
||||
// return strings.Contains(version, "microsoft")
|
||||
|
@ -35,7 +35,7 @@ func (env *ShellEnvironment) IsWsl() bool {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) IsWsl2() bool {
|
||||
defer env.trace(time.Now(), "IsWsl2")
|
||||
defer env.Trace(time.Now(), "IsWsl2")
|
||||
if !env.IsWsl() {
|
||||
return false
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ func (env *ShellEnvironment) IsWsl2() bool {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) TerminalWidth() (int, error) {
|
||||
defer env.trace(time.Now(), "TerminalWidth")
|
||||
defer env.Trace(time.Now(), "TerminalWidth")
|
||||
if env.CmdFlags.TerminalWidth != 0 {
|
||||
return env.CmdFlags.TerminalWidth, nil
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ func (env *ShellEnvironment) Platform() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) CachePath() string {
|
||||
defer env.trace(time.Now(), "CachePath")
|
||||
defer env.Trace(time.Now(), "CachePath")
|
||||
// get XDG_CACHE_HOME if present
|
||||
if cachePath := returnOrBuildCachePath(env.Getenv("XDG_CACHE_HOME")); len(cachePath) != 0 {
|
||||
return cachePath
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
)
|
||||
|
||||
func (env *ShellEnvironment) Root() bool {
|
||||
defer env.trace(time.Now(), "Root")
|
||||
defer env.Trace(time.Now(), "Root")
|
||||
var sid *windows.SID
|
||||
|
||||
// Although this looks scary, it is directly copied from the
|
||||
|
@ -71,7 +71,7 @@ func (env *ShellEnvironment) Home() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) QueryWindowTitles(processName, windowTitleRegex string) (string, error) {
|
||||
defer env.trace(time.Now(), "WindowTitle", windowTitleRegex)
|
||||
defer env.Trace(time.Now(), "WindowTitle", windowTitleRegex)
|
||||
title, err := queryWindowTitles(processName, windowTitleRegex)
|
||||
if err != nil {
|
||||
env.log(Error, "QueryWindowTitles", err.Error())
|
||||
|
@ -80,17 +80,17 @@ func (env *ShellEnvironment) QueryWindowTitles(processName, windowTitleRegex str
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) IsWsl() bool {
|
||||
defer env.trace(time.Now(), "IsWsl")
|
||||
defer env.Trace(time.Now(), "IsWsl")
|
||||
return false
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) IsWsl2() bool {
|
||||
defer env.trace(time.Now(), "IsWsl2")
|
||||
defer env.Trace(time.Now(), "IsWsl2")
|
||||
return false
|
||||
}
|
||||
|
||||
func (env *ShellEnvironment) TerminalWidth() (int, error) {
|
||||
defer env.trace(time.Now(), "TerminalWidth")
|
||||
defer env.Trace(time.Now(), "TerminalWidth")
|
||||
if env.CmdFlags.TerminalWidth != 0 {
|
||||
return env.CmdFlags.TerminalWidth, nil
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ func (env *ShellEnvironment) Platform() string {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) CachePath() string {
|
||||
defer env.trace(time.Now(), "CachePath")
|
||||
defer env.Trace(time.Now(), "CachePath")
|
||||
// get LOCALAPPDATA if present
|
||||
if cachePath := returnOrBuildCachePath(env.Getenv("LOCALAPPDATA")); len(cachePath) != 0 {
|
||||
return cachePath
|
||||
|
@ -145,7 +145,7 @@ func (env *ShellEnvironment) LookWinAppPath(file string) (string, error) {
|
|||
// Returns a variant type if successful; nil and an error if not.
|
||||
//
|
||||
func (env *ShellEnvironment) WindowsRegistryKeyValue(path string) (*WindowsRegistryValue, error) {
|
||||
env.trace(time.Now(), "WindowsRegistryKeyValue", path)
|
||||
env.Trace(time.Now(), "WindowsRegistryKeyValue", path)
|
||||
|
||||
// Format:
|
||||
// "HKLM\Software\Microsoft\Windows NT\CurrentVersion\EditionID"
|
||||
|
@ -326,7 +326,7 @@ const (
|
|||
)
|
||||
|
||||
func (env *ShellEnvironment) WifiNetwork() (*WifiInfo, error) {
|
||||
env.trace(time.Now(), "WifiNetwork")
|
||||
env.Trace(time.Now(), "WifiNetwork")
|
||||
// Open handle
|
||||
var pdwNegotiatedVersion uint32
|
||||
var phClientHandle uint32
|
||||
|
|
|
@ -30,7 +30,7 @@ func mapMostLogicalState(currentState, newState battery.State) battery.State {
|
|||
}
|
||||
|
||||
func (env *ShellEnvironment) BatteryState() (*BatteryInfo, error) {
|
||||
defer env.trace(time.Now(), "BatteryInfo")
|
||||
defer env.Trace(time.Now(), "BatteryInfo")
|
||||
|
||||
parseBatteryInfo := func(batteries []*battery.Battery) *BatteryInfo {
|
||||
var info BatteryInfo
|
||||
|
|
|
@ -3,6 +3,7 @@ package mock
|
|||
import (
|
||||
"io/fs"
|
||||
"oh-my-posh/environment"
|
||||
"time"
|
||||
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
@ -229,3 +230,7 @@ func (env *MockedEnvironment) DirMatchesOneOf(dir string, regexes []string) bool
|
|||
args := env.Called(dir, regexes)
|
||||
return args.Bool(0)
|
||||
}
|
||||
|
||||
func (env *MockedEnvironment) Trace(start time.Time, function string, args ...string) {
|
||||
_ = env.Called(start, function, args)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue