diff --git a/internal/config/init.go b/internal/config/init.go index 6807ab25e819b99d899fac711da304c8dc8db595..36742ed96ea91a1cb8834a2ddabfc8dfc8e56f38 100644 --- a/internal/config/init.go +++ b/internal/config/init.go @@ -7,6 +7,8 @@ import ( "slices" "strings" "sync/atomic" + + "github.com/charmbracelet/crush/internal/fsext" ) const ( @@ -59,6 +61,15 @@ func ProjectNeedsInitialization() (bool, error) { return false, nil } + // If the working directory has no non-ignored files, skip initialization step + empty, err := dirHasNoVisibleFiles(cfg.WorkingDir()) + if err != nil { + return false, fmt.Errorf("failed to check if directory is empty: %w", err) + } + if empty { + return false, nil + } + return true, nil } @@ -90,6 +101,15 @@ func contextPathsExist(dir string) (bool, error) { return false, nil } +// dirHasNoVisibleFiles returns true if the directory has no files/dirs after applying ignore rules +func dirHasNoVisibleFiles(dir string) (bool, error) { + files, _, err := fsext.ListDirectory(dir, nil, 1, 1) + if err != nil { + return false, err + } + return len(files) == 0, nil +} + func MarkProjectInitialized() error { cfg := Get() if cfg == nil {